#!/usr/bin/perl
#require 5.008;
our $VERSION = "0.00"; #Time-stamp: <2011-11-17T02:32:58Z>

use strict;
use warnings;
use utf8; # Japanese

use Encode;

our $TRIALS = 100000;
our $CHANGE = 1;

sub make_board {
  my @c = (0 .. 21);
#  my @c = (0 .. 23);
#  my @c = (0 .. 15);
  splice(@c, 13, 1);
  splice(@c, 0, 1);

  my @d;
  while (@c) {
    my $n = int(rand(1) * scalar(@c));
    push(@d, splice(@c, $n, 1));
  }
  @c = splice(@d, 0, 6);

  if ($CHANGE) {
    my $n = 0;
    for (my $i = 0; $i < @c; $i++) {
      if ($c[$i] % 2) {
	$n++;
      }
    }
    my $simul = 0;
    for (my $i = 0; $i < @c; $i++) {
      if ($c[$i] == 8) {
	$simul++;
      } elsif ($c[$i] == 11) {
	$simul++;
      }
    }

    for (my $i = 0; $i < @c; $i++) {
      if ($simul == 2) {
#	next;
	if ($c[$i] == 8) {
	  $c[$i] = 11;
	} elsif ($c[$i] == 11) {
	  $c[$i] = 8;
	}
      } else {
	if ($c[$i] == 8 && ($n > 3 || ($n == 3 && 0 == int(rand(2))))) {
	  $c[$i] = 11;
	} elsif ($c[$i] == 11 && ((6 - $n) > 3 || ($n == 3 && 0 == int(rand(2))))) {
	  $c[$i] = 8;
	}
      }
    }
  }
  return @c;
}

MAIN:
{
  my @n = (0) x 64;
  my @b = (0) x 7;

  for (my $i = 0; $i < $TRIALS; $i++) {
    my @c = make_board();
    my $c = 0;
    my $b = 0;
    for (my $j = 0; $j < @c; $j++) {
      if ($c[$j] % 2) {
	$c = $c * 2 + 1;
	$b++;
      } else {
	$c = $c * 2;
      }
    }
    $n[$c]++;
    $b[$b]++;
  }

  for (my $i = 0; $i < @n; $i++) {
    printf("%02x: %g\n", $i, $n[$i] / $TRIALS);
  }

  for (my $i = 0; $i < @b; $i++) {
    printf("%01x: %g\n", $i, $b[$i] / $TRIALS);
  }
}
