#! perl -slw use strict; #use Math::Random::MT qw[ rand ]; $|++; our $I //= 1e6; my( $tried, $good ); for ( 1 .. $I ) { ++$tried; my @b = map int( rand 6 ), 1 .. 64; $good += checkBoard( \@b ); # displayBoard( \@b ); print "$good of $tried"; ; printf "\r%10u %18.15f ", $tried, $good / $tried unless $tried % 10000; } sub checkBoard { my $ref = shift; for( [0..7],[8..15],[16..23],[24..31],[32..39],[40..47],[48..55],[56..63], [ 0, 8,16,24,32,40,48,56], [ 1, 9,17,25,33,41,49,57], [ 2,10,18,26,34,42,50,58], [ 3,11,19,27,35,43,51,59], [ 4,12,20,28,36,44,52,60], [ 5,13,21,29,37,45,53,61], [ 6,14,22,30,38,46,54,62], [ 7,15,23,31,39,47,55,63], ) { my $n = 0; join( '', @{$ref}[ @$_ ] ) =~ m[(.)\1\1] and return 0; } return 1 } sub displayBoard { print for unpack '(A16)*', join ' ', @{ $_[ 0 ] } }