scrabble.rb

Path: scrabble.rb
Last Update: Mon Jan 07 00:27:08 +0100 2008

Dynamic Languages Shootout - Scrabble

Dies ist ein Beitrag zum Dynamic Languages Shootout. Das Programm implementiert einen Algorithmus, der auf einem 15x15 Felder grossen Spielfeld Wörter nach den von Scrabble bekannten Regeln platziert. Die verschiedenen Buchstaben geben je nach Häufigkeit ihres Vorkommens in der deutschen Sprache Punkte, es wird also versucht, möglichste teure Wörter zu legen. Es werden 5 Runden gespielt und das Spielbrett jeweils visualisiert.

Varianten

Ich habe zwei Varianten implementiert, eine für Standard Ruby sowie eine für JRuby, welche ein GUI mit Swing besitzt. Ausserdem lassen sich die Klassen mit JRuby zu Java Bytecode kompilieren und mit den JRuby Libraries zusammen in ein Jar packen, welches dann entweder direkt oder per Java Web Start ausgeführt werden kann. Es gibt also folgende Möglichkeiten:

Es wird erwartet, dass das Wörterbuch als de_DE.dic im Verzeichnis liegt. Die Swing-Variante besitzt aber auch die Möglichkeit, es aus dem Internet nachzuladen, da ich noch nicht herausgefunden habe wie ich mit JRuby Dateien aus dem Jar lese.

Eine Anmerkung zur Webstart Variante: Es dauert leider recht lange, bis das erste Frame erscheint, die Ursache dafür habe ich noch nicht gefunden.

Lösungsansatz

Der Lösungsansatz für das Scrabble-Problem ist recht simpel: Das Wörterbuch wird jede Runde nach allen Wörtern durchsucht, welche mit dem aktuellen Vorrat und den bereits gesetzten Buchstaben gebildet werden können. Dabei werden einfach die bereits verwendeten Buchstaben mit in den Pool geworfen und alle gültigen Wörter herausgesucht, nach ihrer Wertigkeit sortiert und danach stupide versucht, auf dem Brett zu platzieren, bis eines passt. Dabei werden natürlich alle Kriterien beachtet, also ob das Wort ein bestehendes ergänzt und es wird sichergestellt, dass immer nur gültige Wörter liegen.

Erstellen des Jars

Falls das jar erstellt werden soll, müssen einige Punkte beachtet werden:

  • Die Variablen zum JRuby Interpreter und Kompiler müssen angepasst werden.
  • Es wird eine Kopie von jruby-complete.jar benötigt
  • Der Keystore muss durch einen eigenen ersetzt werden
  • Der JRuby Compiler legt die Packages anhand des aktuellen Verzeichnisses fest, das Manifest sowie die jnlp-Datei müssen also wahrscheinlich angepasst werden.

Downloads

  • scrabble.jar - Das jar, beinhaltete die kompilierten Klassen sowie JRuby
  • scrabble.zip - Beinhaltet den Source, Buildfiles und Tests
  • de_DE.dic - Das verwendete Wörterbuch

Viel Spass!

Mirko Stocker, me@misto.ch

Der gesamte Code ist unter den Bedingungen der LGPL v2 oder höher freigegeben.

Required files

set  

[Validate]