Listing 1. findwords.sh11935l1.qrk > $testwords fi minlength="$(( $minlength + 1 ))" done ## PART TWO: sort letters for validity filter pattern="$(echo $1 | sed 's/./&\ /g' | tr '[[:upper:]]' '[[:lower:]]' | sort | fmt | sed 's/ //g')" for word in $( cat $testwords ) do # echo "checking $word for validity" simplified="$(echo $word | sed 's/./&\ /g' | tr '[[:upper:]]' '[[:lower:]]' | sort | fmt | sed 's/ //g')" ## PART THREE: do all letters of the word appear in the pattern # once and exactly once? Easy way: loop through and # remove each letter as used, then compare end states indx=1 failed=0 before=$pattern while [ $indx -lt ${#simplified} ] do ltr=${simplified:$indx:1} after=$(echo $before | sed "s/$ltr/-/") if [ $before = $after ] ; then # nothing changed, so we don't have that # letter available any more if [ $showfails ] ; then echo "FAILURE: came close, but can't make $word" fi failed=1 else before=$after fi indx=$(( $indx + 1 )) done if [ $failed -eq 0 ] ; then echo "SUCCESS: You can make the word $word" fi done /bin/rm -f $testwords exit 0