Benutzerspezifische Werkzeuge
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 vor knapp zehn Jahren gebautes Gadget beschrieben, welches auf Basis eines 16F84-Microcontrollers einen Taschenrechner realisiert, auf dem ein 4x7-Mastermind-Solver läuft. Allerdings erlaubt 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, bei der jeweils nach einer Zufallsauswahl der noch verbleibenden Möglichkeiten gefragt wird.

Heutige Mobiltelefone, speziell Smartphones sind verglichen damit 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 Binary 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, 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 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 viel zu umständlich bzw. viel 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. Wer möchte potentiellen Nutzern ein Verfahren wie dieses zumuten?

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): 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.

 

 

 

 

Artikelaktionen