in reply to a 240-byte game for you

I like the game, but unfortunately, it doesn't always win..... I was thinking AAAA
C:\game.pl DHEC 00 GFGB 00
it lost, gave up after the second 00 but it did win on several other tries.

-Kevin
my $a='62696c6c77667269656e6440676d61696c2e636f6d'; while ($a=~m/(^.{2})/s) {print unpack('A',pack('H*',"$1"));$a=~s/^.{2}//s;}

Replies are listed 'Best First'.
Re^2: a 240^W250-byte game for you
by jdalbec (Deacon) on May 06, 2005 at 01:30 UTC
    Fencepost bug. for($|=1;@g>1;) in the first line should be for($|=1;@g>=1;) or for($|=1;@g>0;).

    Sorry, that change causes an infinite loop. Of course you could always control-C out of it...

    Update: If the player is honest (or at least consistent), for($|=1;$&<40;) works at the expense of an additional character. Or you could combine this condition with one of the struck-out conditions above for a total of 248 or 247 characters.

    Another fix that seems more natural to me involves using one of the struck-out conditions in combination with splice for a total of 250 or 249 characters.

    It seems more natural to format this in four lines, though (take your pick):
    @g=map{$_=sprintf"%04o",$_;$_=~y@0-7@A-H@;$_}0..4095;for($|= 1;@g>0;){print$f=splice(@g,@g*rand,1),$";($S=<>)=~/^[0-4]{2}$ /?(@g=grep{$d=4-($a=($f^($e=$_))=~y@\0@@);$d-=($c=index$e,$_)< 0||(substr($e,$c,1)="")for(split'',$f);$&eq$a.$d}@g):print"\7"}
    or
    @g=map{$_=sprintf"%04o",$_;$_=~y@0-7@A-H@;$_}0..4095;for($|=1;@ g>0;){print$f=splice(@g,@g*rand,1),$";($S=<>)=~/^[0-4]{2}$/?(@ g=grep{$d=4-($a=($f^($e=$_))=~y@\0@@);$d-=($c=index$e,$_)<0|| (substr($e,$c,1)="")for(split'',$f);$&eq$a.$d}@g):print"\7"}