perlmeditation
japhy
Word squares are like really simple crossword puzzles. There are no black squares, the grid is a square, and the "down" clues are the same as the "across" clues.
<p>
So, given a list of words, construct a word square out of them. Here is an example:
<code>
division of a road: _ _ _ _
a location: _ _ _ _
in proximity to: _ _ _ _
hearing organs: _ _ _ _
</code>
The solution:
<table>
<tr>
<td bgcolor="#0000ff">
<font color="#0000ff">
<pre>L A N E
A R E A
N E A R
E A R S</pre>
</font>
</td>
</tr>
</table>
So, given some list of strings, return the strings in the order they would appear (down or across) in the grid. My solution uses two functions, and thus, I have decided that character count will include the "sub ...".
<code>
#23456789_123456789_123456789_123
sub Q{my$j=pop;my@l=map$$_[$j],@_
;for(@_){return"@$_",Q(@_,++$j)if
"@{[sort@$_]}"eq"@{[sort@l]}"}()}
sub S{Q map([split//],@_),$"=""}
</code>
My code is (<b>updated, thanks to [abstracts]</b>) 131 characters.
<p>
<font color="#ff0000">_____________________________________________________</font><br>
Jeff<tt>[<font color="#0000ff"><A HREF="/index.pl?node=japhy&lastnode_id=1072">japhy</A></font>]</tt>Pinyan:
<a href="http://www.pobox.com/~japhy/modules/">Perl</a>,
<a href="http://www.pobox.com/~japhy/docs/book.html">regex</a>,
and <a href="http://lists.perl.org/showlist.cgi?name=perl5-porters"><i>perl</i></a>
<a href="http://foldoc.doc.ic.ac.uk/foldoc/foldoc.cgi?query=hacker">hacker</a>.
<br>
<tt>s++=END;++y(;-P)}y js++=;shajsj<++y(p-q)}?print:??;</tt>