Bulls & Cows
Beim letzten Dojo haben wir das Spiel "Bulls and Cows" implementiert. Das Ergebnis könnt Ihr auf Bitbucket bewundern:
Allerdings kann diese Version nur "Schiedsrichter" spielen, also einen Rateversuch bewerten.
Nach dem Dojo haben wir noch weiterprogrammiert und auf
findet Ihr eine interaktive Version. (ein kleiner Tippfehler hat sich eingeschlichen: die Anzahl der erlaubten Versuche ist ein Zeile 85 auf 1 gesetzt)
Als Aufgabe fürs nächste Mal gilt es jetzt, einen künstlichen Spieler zu programmieren, also eine Funktion, die die Geheimzahl in möglichst wenigen Zügen erraten kann. (oder möglichst elegant, in möglichst wenigen Zeilen, etc.)
Hier eine Beispielimplementierung für einen Spieler, der einfach nur rät:
def random_interface(player): for question ∈ player: answer = str(random.randint(1000, 9999)) print('>', answer) result = player.send(answer) print(result)
Lösungen
Und eine Lösung mit etwas mehr Logik:
def grumpy_interface(player): guesses = list('{}{}{}{}'.format(*guess) for guess in permutations(range(10), 4)) for question in player: guess = guesses[0] print('>', guess) answer = player.send(guess) print(answer) if answer.startswith('success'): break # disregard all possible secrets that would not # have the same score with our current guess. guesses = [g for g in guesses[1:] if get_score(guess, g) == answer[:4]]
Eine aufgeräumte Version davon: bullsandcows.py
Christoph hat eine Lösung in OpenCL präsentiert. mind_cl.py benötigt das Modul pyopencl.