Tehetséggondozás az informatikában
Rostálunk
Arra jutottunk tehát, hogy ha egy szót már korábban előállítottunk (ha már
szerepel a fában, ha előfordul a listánkban), akkor azt ne illesszük be az
eddigiek után.
Két kézenfekvő lehetőség is kínálkozik ennek megvalósítására.
Az egyik az, hogy az egyes szabályoknál külön-külön vizsgáljuk, hogy az
újonnan előállított szót megkaptuk-e már korábban, s ha igen, akkor eldobjuk
azt – ez azt jelenti, hogy négy helyen kell ugyanúgy kiegészíteni a
programunkat, amivel valószínűleg nehezebben olvashatóvá válik (de
hatékonyabb lehet).
A másik az, hogy a négy függvény minden újonnan előállítható szót visszaad,
s ezeket a (rész)eredményeket egységesen vizsgáljuk: a felesleges szavakat
elvetjük, a többit beillesztjük a lista végére – így a program olvashatóbb,
de várhatóan kevésbé hatékony lesz.
Mi most a második utat választjuk – annál is inkább, mert hamarosan a
másikat is kipróbáljuk…
def rule1(list, i):
word= list[i]
if word[-1]=='I':
return [ word+'U' ]
else:
return []
def rule2(list, i):
word= list[i]
return [ word+word[1:] ]
def rule3(list, i):
word= list[i]
lisu= []
for j in range(1, len(word)-2):
if word[j:j+3]=='III':
lisu+= [ word[:j]+'U'+word[j+3:] ]
return lisu
def rule4(list, i):
word= list[i]
lisu= []
for j in range(1, len(word)-1):
if word[j:j+2]=='UU':
lisu+= [ word[:j]+word[j+2:] ]
return lisu
def filt(list, lisu):
for word in lisu:
if not word in list:
list+= [ word ]
def rules(list, i):
lisu= rule1(list, i)
filt(list, lisu)
lisu= rule2(list, i)
filt(list, lisu)
lisu= rule3(list, i)
filt(list, lisu)
lisu= rule4(list, i)
filt(list, lisu)
return list, i+1
i= 0
list= [ 'MI' ]
while i<11:
list, i= rules(list, i)
print(list)
És íme, megszűntek a lista duplumai (a kimenet ismét áttördelve):
[
'MI',
'MIU', 'MII',
'MIUIU', 'MIIU', 'MIIII',
'MIUIUIUIU', 'MIIUIIU', 'MIIIIU', 'MIIIIIIII', 'MUI',
'MIUIUIUIUIUIUIUIU', 'MIIUIIUIIUIIU', 'MIIIIUIIIIU', 'MUIU', 'MIUU', …
… 'MIIIIIIIIU', 'MIIIIIIIIIIIIIIII', 'MUIIIII', 'MIUIIII', 'MIIUIII', …
… 'MIIIUII', 'MIIIIUI', 'MIIIIIU', 'MUIUI'
]