Actually, strike that... The last row can only be (d,c,c,d). I had an off-by-one in the check_assoc subroutine.
It should be: sub check_assoc { my $op = shift; for(my $i=0;$i<4;$i++){ for(my $j=0;$j<4;$j++){ for(my $k=0;$k<4;$k++){ if( $op->[ $op->[$i][$j]] [ $k ] != $op->[ $i ] [ $op->[$j][$k] ] ) { return 0; } } } } return 1; } On Tue, Aug 12, 2003 at 03:04:41PM -0400, BillyGOTO wrote: > "For my ally is Perl, and a powerful ally it is." > > On Tue, Aug 12, 2003 at 02:06:43AM -0700, Sarad AV wrote: > > hi, > > > > how do we complete this table > > > > Table shown may be completed to define 'associative' > > binary operation * on S={a,b,c,d}. Assume this is > > possible and compute the missing entries > > > *|a|b|c|d > > --------- > > a|a|b|c|d > > --------- > > b|b|a|c|d > > --------- > > c|c|d|c|d > > --------- > > d| | | | > > > Lucky you! There are only 256 possibilities. > > There are four solutions: > > The last row can be any of: > > d c c a > > d c c b > > d c c c > > d c c d > > ... > > #!/usr/bin/perl -w > use strict; > > my $optbl = [ > [0,1,2,3], > [1,0,2,3], > [2,3,2,3], > ]; > > for(my $i=0; $i<0x100; $i++){ > $optbl->[3] = [ > ($i>>0)&0x3, > ($i>>2)&0x3, > ($i>>4)&0x3, > ($i>>6)&0x3, > ]; > if(&check_assoc($optbl)){ > for(join(',',@{$optbl->[3]})){ > tr/0123/abcd/; > print "$_\n"; > } > } > } > > sub check_assoc { > my $op = shift; > for(my $i=0;$i<3;$i++){ > for(my $j=0;$j<3;$j++){ > for(my $k=0;$k<3;$k++){ > if( $op->[ $op->[$i][$j]] [ $k ] > != $op->[ $i ] [ $op->[$j][$k] ] ) > { > return 0; > } > } } } > return 1; > }