#!/bin/bash # cw-solver.sh # This is actually a wrapper around a one-liner (line 46). # Crossword puzzle and anagramming word game solver. # You know *some* of the letters in the word you're looking for, #+ so you need a list of all valid words #+ with the known letters in given positions. # For example: w...i....n # 1???5????10 # w in position 1, 3 unknowns, i in the 5th, 4 unknowns, n at the end. # (See comments at end of script.) E_NOPATT=71 DICT=/usr/share/dict/word.lst # ^^^^^^^^ Looks for word list here. # ASCII word list, one word per line. # If you happen to need an appropriate list, #+ download the author's "yawl" word list package. # http://ibiblio.org/pub/Linux/libs/yawl-0.3.2.tar.gz # or # http://bash.deta.in/yawl-0.3.2.tar.gz if [ -z "$1" ] # If no word pattern specified then #+ as a command-line argument . . . echo #+ . . . then . . . echo "Usage:" #+ Usage message. echo echo ""$0" \"pattern,\"" echo "where \"pattern\" is in the form" echo "xxx..x.x..." echo echo "The x's represent known letters," echo "and the periods are unknown letters (blanks)." echo "Letters and periods can be in any position." echo "For example, try: sh cw-solver.sh w...i....n" echo exit $E_NOPATT fi echo # =============================================== # This is where all the work gets done. grep ^"$1"$ "$DICT" # Yes, only one line! # | | # ^ is start-of-word regex anchor. # $ is end-of-word regex anchor. # From _Stupid Grep Tricks_, vol. 1, #+ a book the ABS Guide author may yet get around #+ to writing . . . one of these days . . . # =============================================== echo exit $? # Script terminates here. # If there are too many words generated, #+ redirect the output to a file. $ sh cw-solver.sh w...i....n wellington workingman workingmen