In [7]:
#Ordina alfabeticamente le lettere di una parola
def ordina_lettere(parola):
lista = list(parola)
lista.sort()
parola_ordinata = "".join(lista)
return parola_ordinata
#Controlla se le due parole sono una l'anagramma dell'altra
def anagramma(parola1, parola2):
parola2 = ordina_lettere(parola2)
parola1 = ordina_lettere(parola1)
if parola1 == parola2:
return True
return False
#controlla se parola2 è parola1 con l'aggiunta di una lettera, o se parola1 è parola2 senza una lettera
def aggiunta_tolta(parola1, parola2):
for i in range(len(parola2)):
temp = parola2[0:i] + parola2[i+1:len(parola2)]
if parola1 == temp:
return True
return False
#Controlla se tra le due parole cambia solo una lettera
def lettera_cambiata(parola1, parola2):
conta = 0
if len(parola1) != len(parola2) :
return False
for i in range(len(parola1)):
if parola1[i] != parola2[i] :
conta = conta + 1
if conta == 1 :
return True
return False
#Controlla se parola2 è derivabile da parola1 con le regole del gioco
def is_next(parola1, parola2):
temp = lettera_cambiata(parola1, parola2) + aggiunta_tolta(parola1, parola2) + aggiunta_tolta(parola2, parola1)
temp = temp + anagramma(parola1, parola2)
if temp == 1 :
return True
return False
#Restituisce ila prima stringa nella lista parole derivabile da parola
def next_word(parole, parola):
for x in parole:
if is_next(parola, x):
return x
return False
#Toglie parola dalla lista parole
def escludi(parole, parola):
nuove_parole = []
for x in parole:
if x != parola:
nuove_parole = nuove_parole + [x]
return nuove_parole
In [8]:
#restituisce la lista parole ordinata secondo le regole del gioco
def ordina(parole):
finito = False
start = parole[0]
parole = escludi(parole, start)
parole_ordinate = [] + [start]
while not(finito):
prossima = next_word(parole, parole_ordinate[len(parole_ordinate)-1] )
parole_ordinate = parole_ordinate + [prossima]
parole = escludi(parole, prossima)
if (next_word(parole, parole_ordinate[len(parole_ordinate)-1] ) == False) :
finito = True
return parole_ordinate
In [12]:
def gioco(input_file, output_file):
fh = open(input_file).read()
parole = fh.split("\n")
parole = parole[0:len(parole)-1]
parole_ord = ordina(parole)
fh = open(output_file, "w").write( "\n".join(parole_ord) )
return True
In [13]:
gioco("input.txt", "output.txt")
#parole_ordinate = ordina(parole)
#parole_ordinate
Out[13]:
In [ ]: