"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;
}

Reply via email to