Q on associative binary operation
BillyGOTO
billy at dadadada.net
Tue Aug 12 20:06:18 PDT 2003
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;
> }
More information about the cypherpunks-legacy
mailing list