Word squares…

Published on 2011-05-05 by Mark VandeWettering

I like to read the Programming Praxis website. Every post challenges you to write some simple programs to boost your skill, akin to finger exercises for a musical instrument. Today’s challenge was an interesting which intrigued Charles Babbage: creating word squares.

I spent about 10 minutes writing one in Python that worked rather well: here is an early version, which I augmented a bit. Running it against /usr/share/dict/words gave way too many squares, with lots of really uncommon words. I had better luck with The 12dicts word lists, which concentrate on more common words. In particular, I came up with this pair of rather pleasing order 5 squares based upon the words BRAIN WAGON.

        <td>
          R
        </td>
        
        <td>
          A
        </td>
        
        <td>
          I
        </td>
        
        <td>
          N
        </td>
      </tr>
      
      <tr>
        <td>
          R
        </td>
        
        <td>
          E
        </td>
        
        <td>
          T
        </td>
        
        <td>
          R
        </td>
        
        <td>
          O
        </td>
      </tr>
      
      <tr>
        <td>
          A
        </td>
        
        <td>
          T
        </td>
        
        <td>
          L
        </td>
        
        <td>
          A
        </td>
        
        <td>
          S
        </td>
      </tr>
      
      <tr>
        <td>
          I
        </td>
        
        <td>
          R
        </td>
        
        <td>
          A
        </td>
        
        <td>
          T
        </td>
        
        <td>
          E
        </td>
      </tr>
      
      <tr>
        <td>
          N
        </td>
        
        <td>
          O
        </td>
        
        <td>
          S
        </td>
        
        <td>
          E
        </td>
        
        <td>
          Y
        </td>
      </tr>
    </table>
  </td>
  
  <td>
    <table border="1" cellpadding="5">
      <tr>
        <td>
          W
        </td>
        
        <td>
          A
        </td>
        
        <td>
          G
        </td>
        
        <td>
          O
        </td>
        
        <td>
          N
        </td>
      </tr>
      
      <tr>
        <td>
          A
        </td>
        
        <td>
          G
        </td>
        
        <td>
          A
        </td>
        
        <td>
          V
        </td>
        
        <td>
          E
        </td>
      </tr>
      
      <tr>
        <td>
          G
        </td>
        
        <td>
          A
        </td>
        
        <td>
          T
        </td>
        
        <td>
          O
        </td>
        
        <td>
          R
        </td>
      </tr>
      
      <tr>
        <td>
          O
        </td>
        
        <td>
          V
        </td>
        
        <td>
          O
        </td>
        
        <td>
          I
        </td>
        
        <td>
          D
        </td>
      </tr>
      
      <tr>
        <td>
          N
        </td>
        
        <td>
          E
        </td>
        
        <td>
          R
        </td>
        
        <td>
          D
        </td>
        
        <td>
          Y
        </td>
      </tr>
    </table>
  </td>
</tr>
B

Fun!