Als Stefan Keller mir das erste Mal das Inserat des Dynamic Languages Shootout im Java-Spektrum gezeigt hatte, fühlte ich mich eigentlich nicht besonders davon angesprochen. Zum einen mag ich den Begriff “Dynamic Languages” nicht besonders (darüber vielleicht ein anderes Mal..) und ein Shootout, naja, war mir irgendwie alles zu reisserisch. Die Aufgabenstellung habe ich dann doch durchgelesen, und dachte mir, das ist ja eigentlich ganz einfach: Es geht grob darum, ein Programm zu erstellen, welches 5 Runden Scrabble spielt. Das Wörterbuch ist vorgegeben, pro Zug bekommt man 7 neue Buchstaben. Und schon hatte ich angefangen, mir zu überlegen, wie ich es umsetzen würde, und so nahm alles seinen Lauf…

Mein erster Ansatz bestand darin, mit dem vorhandenen Buchstaben alle möglichen Kombinationen zu bilden und diese dann im Wörterbuch nachzuschlagen. Das Problem, mit 7 Buchstaben gibt es 13699 Möglichkeiten, bei 9 Buchstaben sind es schon 986409, und mit 10 sinds 9864100 (eine elegante Formel hab ich leider nicht parat.. ). Mit etwas Pech sind es in der 5. Runde sogar 5 * 7 – (4 * 2) = 27 Buchstaben.

Ok, nächster Versuch: Performanter ist es, jedes Wort im Wörterbuch durchzugehen und zu prüfen, ob man es mit den vorhandenen Buchstaben bilden kann. Das gibt zwar auch noch einen Haufen zu tun, aber immerhin ist die Zunahme linear. Als nächstes werden die Wörter nach ihrer Wertigkeit sortiert und danach einfach versucht, auf dem Spielfeld korrekt zu platzieren.

Nachdem ich nun schon zwei Abende investiert hatte, wollte ich eigentlich auch am Wettbewerb teilnehmen, allerdings fehlte mir noch eine gute Idee für die Kür. Das Inserat hat Stefan im Java-Spektrum entdeckt, was mich denn auch auf die Idee brachte: Das ganze mit JRuby zu machen und ein Swing-GUI zu implementieren, natürlich alles in Ruby. Um das ganze noch etwas cooler zu machen, habe ich alles in ein Jar verpackt und das Ganze lässt sich per Java Webstart starten. Wie gesagt, ohne eine Zeile Java-Code.

Aussehen tut es folgendermassen:

scrabble_screenshot.png

und ausprobieren kann man es von hier aus. Eine der Anforderungen war auch, dass das ganze Dokumentiert wird, also habe ich auch mal etwas rdoc geschrieben.

Ach ja, es hat dann doch für den 2. Platz gereicht. Und gegen Smalltalk zu verlieren macht mir überhaupt nichts aus. :)