# buildTheSquare
#
# Make A Word Square: Where middle row/col is 'nasal'
# and only vowel in all words is 'a'
# here is the five letter square
# (0,0) (0,1) (-,n) (0,3) (0,4)
# (0,1) (1,1) (-,a) (1,3) (1,4)
# (-,n) (-,a) (-,s) (-,a) (-,l)
# (0,3) (1,3) (-,a) (3,3) (3,4)
# (0,4) (1,4) (-.l) (3,4) (4,4)
#
# - First create five lists:
# [1] middle-letter-N-list
# [2] middle-letter-A-list
# [3] middle-letter-S-list (actually not needed)
# [4] middle-letter-A-list (same as above)
# [5] middle-letter-L-list
# - Then follow this procedure
# for each word in the 'middle-letter-N-list'
(And if we run out of words then there is NO
five letter word square)
# set that word to be word-one
# set the letters of that word to be the first
letter of each of the words, 2,3,4,5
# set word-three to be 'nasal'
# set the middle letter of each word to be
the letters 'n', 'a', 's', 'a', 'l'
# for each word in the 'middle-letter-A-list'
(see if it will be word-two)
(if we run out of words then go to the next N word)
# if the check the first letter for a match
from above fails try next word in this list
# set the letters of the word to be the letters
# .
# . etcetera (see the code below)
# .
#
def buildTheSquare(midLtrNList, midLtrAList,
midLtrSList, midLtrLList):
print("enter buildTheSquare")
#
# for each word in the Middle-Letter-'N'-List
let it be 'word0'
#
for i, wordFromMidLtrNList in enumerate(midLtrNList):
thisWord = []
thisWord = list(wordFromMidLtrNList)
word0 = []
word0 = thisWord
word1 = []
word1 = list('--a--')
word1[0] = word0[1]
word2 = []
word2 = list('nasal')
word3 = []
word3 = list('--a--')
word3[0] = word0[3]
word4 = []
word4 = list('--l--')
word4[0] = word0[4]
#
# for each word in the Middle-Letter-'A'-List
try to make it into 'word1'
#
for i,wordFromMidLtrAList in enumerate(midLtrAList):
if wordFromMidLtrAList[0] != word1[0]:
continue
word1 = list(wordFromMidLtrAList)
word3[1] = word1[3]
word4[1] = word1[4]
#
# always pick 'nasal' from the
Middle-Letter-'S'-List for 'word2'
#
word2 = list('nasal')
word3[2] = word2[3]
word4[2] = word2[4]
#
# for each word in the Middle-Letter-'A'-List
try to make it into 'word3'
#
for i,wordFromMidLtrAList in enumerate(midLtrAList):
if wordFromMidLtrAList[0] != word3[0]:
continue
if wordFromMidLtrAList[1] != word3[1]:
continue
if wordFromMidLtrAList[2] != word3[2]:
continue
word3 = list(wordFromMidLtrAList)
word4[3] = word3[4]
#
# for each word in the Middle-Letter-'L'-List
see if it can be 'word4'
#
for i,wordFromMidLtrLList in enumerate(midLtrLList):
if wordFromMidLtrLList[0] != word4[0]:
continue
if wordFromMidLtrLList[1] != word4[1]:
continue
if wordFromMidLtrLList[2] != word4[2]:
continue
if wordFromMidLtrLList[3] != word4[3]:
continue
word4 = list(wordFromMidLtrLList)
print ("Success!!")
print ("word0 = {0}".format("".join(word0)))
print ("word1 = {0}".format("".join(word1)))
print ("word2 = {0}".format("".join(word2)))
print ("word3 = {0}".format("".join(word3)))
print ("word4 = {0}".format("".join(word4)))
print ('done buildTheSquare')
return
print ("FAIL")
print ('done buildTheSquare')
# build list with middle letters equal to 'n','a','s','a','l'
and only containing the vowel 'a'
def buildIndividualWordLists(wodlist):
print("enter buildIndividualWordLists")
midLtrNList = []
midLtrAList = []
midLtrSList = []
midLtrLList = []
totalWordCount = 0
for i, myWord in enumerate(wodlist):
totalWordCount = totalWordCount + 1
# only words with the vowel 'a'
if ( (myWord.find('a')) == -1 or (myWord.find('e') != -1) or
(myWord.find('i') != -1) or (myWord.find('o') != -1) or
(myWord.find('u') != -1) ):
continue
# middle letter 'n', 'a', 's', 'l'
if ( ('n' != myWord[2]) and ('a' != myWord[2]) and
('s' != myWord[2]) and ('l' != myWord[2]) ):
continue
# middle letter 'n'
if ('n' == myWord[2]):
midLtrNList.append(myWord)
continue
# middle letter 'a'
elif ('a' == myWord[2]):
midLtrAList.append(myWord)
continue
# middle letter 's'
elif ('s' == myWord[2]):
midLtrSList.append(myWord)
continue
# middle letter 'l'
else:
midLtrLList.append(myWord)
continue
print "total word count = {0}".format(totalWordCount)
print "the number of middle letter N words wordCount = {0}".format(len(midLtrNList))
print "the number of middle letter A words wordCount = {0}".format(len(midLtrAList))
print "the number of middle letter S words wordCount = {0}".format(len(midLtrSList))
print "the number of middle letter A words wordCount = {0}".format(len(midLtrAList))
print "the number of middle letter L words wordCount = {0}".format(len(midLtrLList))
buildTheSquare(midLtrNList, midLtrAList, midLtrSList, midLtrLList)
print('Done buildIndividualWordLists')
# collectWords
# Read Lines From The Input File And Build A List Of Words Found
# Return The Built List
def collectWords( filename ):
print('enter collectWords')
wordlist = []
f = open(filename)
for line in f:
wordlist.extend( line.split() )
f.close()
buildIndividualWordLists(wordlist)
print('Done collectWords')
# Do It
if __name__ == "__main__":
import sys
myWords = []
myWords = collectWords("5x5_Common_Five_Letter_Words.txt")
print('Done main')
|
After removing the logic that completes the application when the first solution is found I found all 118 solutions:
ReplyDelete