Я использовал эту отвратительную и неэффективную реализацию, чтобы найти слово, которое может удалять самые последовательные последние буквы и оставаться словом.
Родео, например, является хорошо известным: Родео, Роде, Род, Ро. В программе найдены "композиторы": композиторы, композитор, композит, композиты, комп.
Мне было интересно, как мне приступить к созданию программы, которая найдет самое длинное слово, которое может удалить ЛЮБОЙ из его букв (а не только последних) и все равно будет считаться словом:
Например: beast, best, bet, be - будет действительной возможностью
Вот моя программа, чтобы найти тот, который удаляет последовательные буквы (мне также интересно узнать, как это можно улучшить и оптимизировать):
#Recursive function that finds how many letters can be removed from a word and
#it still be valid.
def wordCheck(word, wordList, counter):
if len(word)>=1:
if word in wordList:
return (wordCheck(word[0:counter-1], wordList, counter-1))
else:
return counter
return counter
def main():
a = open('C:\\Python32\\megalist2.txt', 'r+')
wordList = set([line.strip() for line in a])
#megaList contains a sorted list of tuple of
#(the word, how many letters can be removed consecutively)
megaList = sorted([(i, len(i)-1- wordCheck(i, wordList, len(i))) for i in wordList], key= lambda megaList: megaList[1])
for i in megaList:
if i[1] > 3:
print (i)
if __name__ == '__main__':
main()