|
|
|
"""
|
|
|
|
palindromes.py
|
|
|
|
|
|
|
|
Donald Knuth, Art of Computer Programming, Volume 4 Facsimile 0
|
|
|
|
Exercise #29
|
|
|
|
|
|
|
|
Find all SGB words that are palindromes (kayak)
|
|
|
|
or that are palindrome pairs (regal lager)
|
|
|
|
"""
|
|
|
|
from get_words import get_words
|
|
|
|
from pprint import pprint
|
|
|
|
|
|
|
|
def is_palindrome(word):
|
|
|
|
test1 = word[0]==word[4]
|
|
|
|
test2 = word[1]==word[3]
|
|
|
|
if(test1 and test2):
|
|
|
|
return True
|
|
|
|
return False
|
|
|
|
|
|
|
|
def is_palindrome_pair(word1,word2):
|
|
|
|
test0 = word1[0]==word2[4]
|
|
|
|
test1 = word1[1]==word2[3]
|
|
|
|
test2 = word1[2]==word2[2]
|
|
|
|
test3 = word1[3]==word2[1]
|
|
|
|
test4 = word1[4]==word2[0]
|
|
|
|
if(test0 and test1 and test2 and test3 and test4):
|
|
|
|
return True
|
|
|
|
return False
|
|
|
|
|
|
|
|
if __name__=="__main__":
|
|
|
|
words = get_words()
|
|
|
|
|
|
|
|
kp = 0
|
|
|
|
palindromes = []
|
|
|
|
|
|
|
|
kpp = 0
|
|
|
|
palindrome_pairs = []
|
|
|
|
|
|
|
|
# Check for palindromes
|
|
|
|
for i in range(len(words)):
|
|
|
|
if(is_palindrome(words[i])):
|
|
|
|
kp += 1
|
|
|
|
palindromes.append(words[i])
|
|
|
|
|
|
|
|
print("-"*40)
|
|
|
|
print("Palindromes: \n")
|
|
|
|
print(", ".join(palindromes))
|
|
|
|
print("There are {0:d} palindromes.".format(kp))
|
|
|
|
|
|
|
|
# Check for palindrome pairs
|
|
|
|
for i in range(len(words)):
|
|
|
|
for j in range(i,len(words)):
|
|
|
|
if(is_palindrome_pair(words[i],words[j])):
|
|
|
|
# Palindromes shouldn't count as palindrome pairs
|
|
|
|
if(words[i] is not words[j]):
|
|
|
|
kpp += 1
|
|
|
|
palindrome_pairs.append((words[i],words[j]))
|
|
|
|
|
|
|
|
print("-"*40)
|
|
|
|
print("Palindrome Pairs: \n")
|
|
|
|
for pair in palindrome_pairs:
|
|
|
|
print(", ".join(pair))
|
|
|
|
print("There are {0:d} palindrome pairs.".format(kpp))
|