Die Aufgabenstellung
Pathfinder
Diese Programmieraufgabe wurde von Silpion IT-Solutions für die Firmenkontaktmesse 2014 an die Studenten der FH-Wedel gestellt. Unter allen eingesendeten Lösungen werden Sachpreise am Tag der Firmenkontaktmesse verlost. Die Aufgabe umfasst das Programmieren eines einfachen Programms um den Weg durch ein gegebenes Spielfeld zu finden.
Idee
Eine überschaubare Aufgabe, keine Vorgaben der Technologie und die Möglichkeit etwas zu gewinnen :) Die Aufgabe soll anregen, mal eine neue Programmiersprache auszuprobieren oder gelernte Algorithmen wie den Dijkstra-Algorithmus oder den A*-Algorithmus zu implementieren, oder gar Reinforcement-Learning einzusetzen. Der Kreativität kann freien Lauf gelassen werden!
Seite des Wettbewerbs
Die Lösung
Meine Lösung habe ich mit Typescript entwickelt. Ich wollte mich, ganz im Sinne des Wettbewerbs, schon länger mal mit dieser Sprache beschäftigen, um eine angenehme Alternative zu Javascript zu finden.
Durch einen Klick auf die Liste mit den Spielfeldern können diese direkt geladen werden. Wer mag kann das Spielfeld im Editor verändern und dann mit dem Knopf "Weg finden" einen Weg suchen lassen. Und wer Spielfelder eingibt, bei denen die Zeilen nicht alle gleich breit sind, verletzt die Spezifikation des Wettbewerbs und ist selbst Schuld.
Damit die Lösung im Browser getestet werden kann, darf der Browser nicht zu alt sein. Optimalerweise benutzt man einen halbwegs modernen Firefox (ab Version 4), einen halbwegs modernen Browser auf Webkit Basis (ab Safari 5.1 oder Google Chrome 6) und zur Not tuts auch ein Internet Explorer ab Version 9. Ich hab mir mal gespart die Browserversionen zu detektieren. Wenn was nicht geht, ist der Browser halt zu alt. Garantiert! Der Fehler liegt bestimmt nicht in meinem Programm ...
Die Spielfelder
Der Editor
Der Pfad
Copy & Paste zeigt das gewünschte Format.
Spannende Eckpunkte & Erkenntnisse
- Zeit & Qualität
- Ich hab chronisch zu wenig Zeit und muss mich wirklich überwinden, diesen komischen Quelltext jetzt zu veröffentlichen ;)
- Abgabeformat
- Das geforderte Ausgabeformat auf Webseiten einzuhalten ist doof. So wie hier siehts ein wenig schicker aus und ich hoffe das jeder Browser (Firefox & Chrome hab ich getestet) nach Copy & Paste in ein leeres Dokument das korrekte Format enthüllt.
- node.js vs. Browser
- Mir fehlt jegliche Erfahrung Javascript parallel für Server und Clients zu entwickeln. Abhängigkeiten auf Clientseite sind aber auch doof zu handhaben ...
- Randfälle
- Einige Randfälle haben die Beispiele nicht behandelt. Wenn mehrere Ausgänge existieren, sucht dieses Programm daher Wege zu allen Ausgängen. Wenn kein Ausgang erreichbar ist wird dies ebenfalls vermerkt.
- Keine binäre Halde
- Typescript bzw. Javascript fehlt eine sinnvolle sortierte Liste. Ich war zu faul eine binäre Halde o.ä. zu implementieren und sortiere die "Unberechnet" Menge des Dijkstra Algorithmus einfach jeden Schritt nach Entfernung. Das ist bei großen Spielfeldern vermutlich ziemlich langsam ...
- Typescript gefällt
- Die Tatsache, dass jedes valide Javascript Programm auch ein valides Typescript Programm ist, hat wirklich was für sich. Der nach Javascript kompilierte Quelltext liest sich noch ganz gut und man muss angenehm weniger Boilerplate Code schreiben.