Direkt zum Inhalt | Direkt zur Navigation

Benutzerspezifische Werkzeuge

Sektionen

Sie sind hier: Startseite / Basteleien / Weitere Bulls and Cows/Mastermind-Implementationen

Mastermind 4x7-Solver in Java und Python

Neben der in PicBasic und Microchipassembler implementierten Firmware des Mastermind-Taschenrechners habe ich einige Versionen für andere kleine Geräte implementiert, zwei davon (beide hier als Binaries für Nokia S60-Telefone) werden nachfolgend beschrieben

Jotto 1.4 Screenshot 1

Nebenan ist ein 1998 gebautes Gadget beschrieben, welches auf Basis eines 16F84-Microcontrollers einen Taschenrechner realisiert, auf dem ein 4x7-Mastermind-Solver läuft.Dies ist also ein Programm, welches nicht raten läßt, sondern die richtige Kombination durch eine Folge geschickt gewählter Fragen errät.

Allerdings erlaubte es der knappe Programm- und Datenspeicher sowie die geringe Geschwindigkeit des 16F84 (1K-14-Bit-Worte Programmspeicher, 68 Byte RAM, 1-2 Mio RISC-Operationen pro Sekunde) nur eine minimalistische Strategie zu verwenden, bei der jeweils anhand einer bloßen Zufallsauswahl der noch verbleibenden Möglichkeiten gefragt wird. Immerhin wird dann aber nur noch aus den verbliebenen Möglichkeiten erfragt, so daß Frage für Frage die Chance auf einen direkten Treffer steigt.

Heutige Mobiltelefone, speziell Smartphones sind verglichen mit diesem Minimal-Microcontroller so üppig ausgestattet, daß eine Implementation eines besseren Algorithmus auch in einer VM,  also quasi emuliert ablaufend ohne weiteres möglich ist.

Zwei der so entstandenen Implementationen liegen hier als ablauffähige App vor, eine ältere, etwas unfertige für Java-fähige Handies wie z.B. Nokia N70 oder E70, eine für den Gebrauch mit dem von Nokia auf Symbian S60 portierten Python-Interpreter, die optisch ansprechender ist.

Jotto/Java auf dem E70Java-Version

Die Java-Version vom 4.1.2004, von der rechts ein Screenshot nach der ersten Frage gezeigt wird, ist mehr eine Art Technologie-Demonstration und Fingerübung mit MIDP, ich habe das später nicht weiterverfolgt.

Immerhin kommt diese Version aber ohne zusätzliche Installationen aus, wenn das Handy Java-fähig ist. Das .jar-File ist nicht signiert.

Python-Version

Die in Python implementierte Fassung aus dem Jahr 2007 hingegen entspricht, wie auch die obige Java-Version der ursprünglich auf dem Nascom II implementierten Version, welche aus den noch verbleibenden Möglichkeiten die auswählt und als nächste Frage stellt, welche den Suchraum vorhersehbar am meisten reduziert. Da dies bei der ersten errechneten Frage (der zweiten also) recht lange dauern kann, gibt es ein einstellbares Zeitlimit, nach dessen Ablauf die bislang günstigste gefundene Frage gestellt wird.

Jotto 1.4 Screenshot 2Diese Implementation ist als Symbian-S60-Anwendung verpackt, die ganz normal installiert werden kann. Sie ist allerdings selbstsigniert, da mir das Nokia/Symbian-Verfahren zu umständlich bzw. zu teuer für eine reine Freizeitbeschäftigung erschien.

Die hier vorliegende Fassung läuft rein interpretativ in Python und ist eine nur wenig modifizierte Portierung einer für Standard-Python geschriebenen Kommandozeilenversion, i.W. kam das GUI hinzu.

Diese simple Portierung ist schnell genug, sie könnte aber schneller sein, wenn Teile in C/C++ implementiert würden. Üblicherweise realisiert man derartige Optimierungen, indem man zeitkritische Teile in ein Pythonmodul auslagert und dieses dann zunächst in Python und dann mit kompatibler Schnittstelle in C als Extension-Modul implementiert. Eine solche C-Reimplementierung des zeitkritischen Teils (Vergleichsfunktion und Neuberechnung des Suchraums) lag bereits für die portable Kommandozeilenversion resp. Windows/Linux vor.

Die Portierung dieses Extension-Moduls auf Basis der 2nd-Edition des SDK verlief erstaunlich unproblematisch,S60 Mastermind 1.3 auf Nokia N70 wenngleich doch eine kleinere Umstellung erforderlich war, weil Symbian-DLLs keine globalen Daten zulassen.

Unangenehmerweise läßt Symbian und damit auch Nokia auf 3d-Edition-Geräten (Symbian 9) nur beschränkt unsignierten oder selbstsignierten native Code zu, so daß Bastlern, Shareware- und Open-Source-Entwicklung diese Plattform inzwischen ziemlich vergällt wurde. Ich habe jedenfalls erst einmal aufgegeben, das besagte Extension-Module auf die 3d-Edition zu portieren und ehrlich gesagt auch ein wenig das Interesse an dieser Plattform verloren.

Verweise

Siehe auch die weiteren Verweise in der Navigation auf der rechten Seite.

Voraussetzung für die Lauffähigkeit der hier aufgeführten, in Python programmierten Implementationen von Jotto/Mastermind ist die vorherige Installation eines Python-Interpreters auf dem Handy. Python für S60 ist auf Sourceforge erhältlich, es handelt sich um eine von Nokia initiierte und gepflegte Open-Source-Portierung der Version 2.2 von Python. Aktuell ist (Stand Ende Oktober 2007): pys60 Release 1.4.1.  Benötigt wird jeweils die zur S60-Edition passende Version, für ein Nokia E70 z.B. PythonForS60_1_4_1_3rdEd.SIS.

Android mit SL4A (Scripting Layer For Android)

ScreenshotDie Portierung der Python-Version auf Android verlief in zwei Schritten. Eine erste, optisch unscheinbare Variante beschränkt sich auf Sprachausgabe und eine simple Dialogbox, die zweite hingegen nutzt nun das neuerlich verfügbare FullScreenUI mit einem in den Code engebetteten Layout und enthält die Sprachausgabe nur als optionalen Zusatz, der die Fragen vorlesen und darüberhinaus eine Einführung vorsprechen kann.

Leider gibt es keine elegante bzw. einfache Möglichkeit, ein SL4A-Script als Anwendung zu verpacken

 

Android mit PGS4A (Pygame for Android)

Bulls and Cows Calculator

Im Google-Appshop (play.google.com) gibt es eine Variante unter dem Namen "Bulls and Cows Calculator 1.2". Dies ist optisch gesehen ein Nachbau des hier dokumentierten PIC16F84-Taschenrechners mit den Mitteln von Pygame.

 

 

Bulls and Cows für Windows

Es gibt ein Setup-Programm, welches die hier gezeigte Pygame-Variante unter Windows installiert.

Screenshot_2013-02-16-18-27-28.png


 

 

 

PyR

Bulls&Cows mit PyRPyR enthält als Beispiel-Miniapp eine weitere in Python programmierte Variante, welche die von PyR verwendeten Kacheln als Darstellungsmittel nutzt. Hier gezeigt ist ein Bespielsnapshot unter Windows, in der Dokumentation ist ein Screenshot von einem Galaxy Nexus zu sehen.
 

Mastermind Solver mit LED-Streifen und IR-Fernbedienung

Mastermind-SolverInzwischen (Juni 2014) gibt es wieder eine Variante auf Basis eines Microcontrollers, in der ein Streifen aus acht RGB-LED per Fernbedienung bedient wird.

 

to be continued

 

Powered by Plone