rätsel + lösung
neulich in de.alt.denksport:
Was sonst noch geschah: ich habe das Spiel «Sudoku» entdeckt. Suchtpotenzial eindeutig vorhanden.
Chris ist spitz auf die Tussi, die spitz auf Dirk ist.weil ich auf biegen und brechen keine anständige Tabelle erstellen konnte, habe ich es per Bruteforce lösen wollen und ein Python-Script geschrieben. Das alles hat einige Stunden beansprucht und hat somit eine Würdigung in diesem Weblog verdient. Hier der Quellcode:
Jochen ist spitz auf das Gerät, das spitz auf den Typen ist, der spitz
auf Gisela ist.
Tom ist spitz auf die Alte, die spitz auf den Macker ist, der spitz auf
Jule ist.
Klara ist nicht spitz auf Tom. Andrea ist spitz auf einen Stecher, der
nicht spitz auf Klara ist.
Wer ist spitz auf Jule?
a) Chris
b) Dirk
c) Jochen
d) Tom
e) Keiner davon
Na dann mal los...
def check(r): #try/except ist ne pseudooptimierung
try:
if not (r['klara'] != 'tom' ):
return False
except:
return None
try:
if not (r[ r['chris']] == 'dirk'):
return False
except:
return None
try:
if not (r[ r['andrea']] != 'klara'):
return False
except:
return None
try:
if not (r[ r[ r['jochen']]] == 'giesela'):
return False
except:
return None
try:
if not (r[ r[ r['tom' ]]] == 'jule'):
return False
except:
return None
return True
def gen_relations(c_relations, c_keys): #rekursiv
global m_names, f_names, log_file
result = check(c_relations)
if result==None:
for m in m_names:
for f in f_names:
if m not in c_keys:
gen_relations(dict(c_relations.items() + [(m,f)]), c_keys+[m])
elif f not in c_keys:
gen_relations(dict(c_relations.items() + [(f,m)]), c_keys+[f])
elif result==True:
print c_relations
log_file.write(repr(c_relations)+"\n")
if __name__=="__main__":
m_names = ("chris", "dirk", "tom", "jochen")
f_names = ("jule", "andrea", "klara", "giesela")
log_file = open('dicts.py', 'w')
gen_relations({}, [])
es ist wohl: a) ChrisWas sonst noch geschah: ich habe das Spiel «Sudoku» entdeckt. Suchtpotenzial eindeutig vorhanden.
der infiltrant - 27. Feb, 00:36
