in reply to (Golf) Word squares

Update5: Thanks larryk for the suggestion, 77 now
sub Z{ @_=@l=sort{.5<=>rand}@_;join('',reverse@l)eq(join'',map{map{chop}@l}@l +)?@_:&Z }

Update4: Okay, last update, sorry (87 now)

sub Z{ @_=@l=map{splice@_,rand@_,1}@_;join('',reverse@l)eq(join'',map{map{cho +p}@l}@l)?@_:Z(@_) }

Update3:Okay, so I'm bad at golf :-) (now at 98)

sub Z{ for(;;){@_=@l=map{splice@_,rand@_,1}@_;return@_ if join('',reverse@l)e +q join'',map{map{chop}@l}@l} }

Update2: Using for(;;) instead of while(1) -- count = 101;

sub Z{ for(;;){@l=map{splice@_,rand@_,1}@_;@_=@l;return@_ if join('',reverse@ +l)eq join'',map{map{chop}@l}@l} }



Here is my shot at 102 using permutation trial and error, enjoy

my @ar = qw/NEAR LANE EARS AREA/ ; # @ar = qw/LINGO MILLS SMOCK IDIOM LOGIC/; print "$_\n" for Z(@ar); sub Z{ while(1){@l=map{splice@_,rand@_,1}@_;@_=@l;return@_ if join('',reverse +@l)eq join'',map{map{chop}@l}@l} }


Update: Added Mills Lingo :-)

Replies are listed 'Best First'.
Re: Re: (Golf) Word squares
by larryk (Friar) on Aug 14, 2001 at 03:07 UTC

    updates removed: my updates (which I have removed from this post) didn't work!

    @_=@l=sort{rand cmp rand}@_;join('',reverse@l)eq(join'',map{map{chop}@ +l}@l)?@_:&Z #81
    perl -le "s,,reverse killer,e,y,rifle,lycra,,print"
Re: Re: (Golf) Word squares
by Anonymous Monk on Aug 14, 2001 at 02:43 UTC
    annoyingly, "line" and "ikea" fit as well in the example...