Siebter Programmierwettbewerb gestartet

Zwei Jahre ist der letzte freiesMagazin-Programmierwettbewerb schon wieder her. Letztes Jahr ergab sich leider aus Zeitmangel eine ungewollte Pause, aber dieses Jahr freuen wir uns, wieder etwas präsentieren zu können …

Die Idee für den Wettbewerb basiert auf dem Lightcycle-Race aus dem Film „Tron“. Diese wurde im September 2013 bei einer Umfrage von den freiesMagazin-Lesern als Aufgabe gewählt. In einer Arena treten zwei Bots gegeneinander an. Jede Runde können sie sich entscheiden, nichts zu tun oder sich um 90 Grad nach rechts oder nach links zu drehen. Danach bewegen sie sich automatisch ein Feld vorwärts. Hierbei besetzt jeder Bot das Feld, das er gerade verlässt, welches dadurch für jeden unpassierbar bleibt (auch für den Bot selbst). Wer bei einer Bewegung gegen eine Wand bzw. gegen ein besetztes Feld läuft/fährt, scheidet aus.

Webseite mit Regeln zur Teilnahme

FAQ zum siebten Programmierwettbewerb (Update 30.11.2014)

Quellcode zur Teilnahme

Jeder Teilnehmer hat bis zum 20. Dezember 2014 Zeit, seinen Bot einzureichen. Die Bots werden von uns getestet und wir geben Rückmeldung, soweit möglich. Die Teilnehmer können den Bot mehrfach ausbessern. Auch im Team darf man arbeiten.

Als Preise gibt es für die beiden Erstplatzierten ein Buch nach eigener Wahl im Wert von 35 bzw. 20 Euro. Der Drittplatzierte erhält den Originalfilm „Tron“ von 1986 auf DVD. Zusätzlich gibt es für alle anderen Teilnehmer den Doppel-CD-Sampler des Free!Music!Contest 2014 als Trostpreis, falls gewünscht und solange der Vorrat reicht.

Wir wünschen allen Teilnehmern viel Erfolg und freuen uns auf eine rege Beteiligung.

Ihre freiesMagazin-Redaktion

PS: Um immer auf den aktuellen Stand zu sein, was den Wettbewerb angeht, kann man die Kommentare zur Wettbewerbsseite per RSS abonnieren. Kommentare können dort aber nur vom freiesMagazin-Team verfasst werden!

Uhh, ein neuer Wettbewerb.

Uhh, ein neuer Wettbewerb. Den guck ich mir doch mal an. :)

Eine Frage: Wie lange darf der Bot pro Zug rechnen? Klar, das hängt natürlich von der Leistung des Rechners ab, aber ein grober Richtwert wäre dennoch ganz nett. Darf ich eine Sekunde rechnen, soll das Spiel in einer Sekunde fertig sein, …?

Grüße, Keba

Re: Uhh, ein neuer Wettbewerb.

Du könntest entweder die Anleitung lesen und die Antwort selbst in den Teilnahmebedingungen finden oder … Nee, es gibt eigentlich kein Oder. ;) Im Ernst: 1 Sekunden Maximum pro Zug. Solange wird aber wohl niemand ernsthaft benötigen.

Ohh, ich sollte lesen lernen.

Ohh, ich sollte lesen lernen. Entschuldige.

Und welcher Computer ist der

Und welcher Computer ist der Maßstab für diese 1 Sekunde Rechenzeit?

Diejengein, die auf lahmen Computern entwickeln sind bei so einer Maßangabe ja im Nachteil, weil sie diese 1 Sekunde schon nach wenigen Rechenschritten erreichen, während andere mit einem schnellen Rechner in der gleichen Zeit viele Rechenschritte machen können.

Und falls am Ende dann diejenigen, mit dem schnellen Rechner disqualifiziert werden, weil ihr Bot auf dem Rechner der Juri länger als 1 Sekunde zum Rechnen braucht, würde ich das auch nicht richtig finden.

Re: Computer

Bitte konzentriert Euch nicht so sehr auf die Rechenzeit. 1 Sekunde ist sehr lang, um eine so simple Rechnung abzuhalten, selbst wenn man Schritte im Voraus berechnet. Daher einfach einen Versuch wagen, uns das Ergebnis zuschicken und wir testen dann. Wir werden niemand disqualifizieren, weil er 1,1 Sekunden braucht. Es sollte aber auch verständlich sein, dass eine Minute für die Rechnung nicht sinnvoll ist.

Falls unbedingt eine grobe Richtlinie gewünscht ist: Intel Core2 Duo CPU E8400@3.00GHz mit 4 GB RAM.

Fehler?

Wenn ich das richtig sehe, erhält der zweite Bot die falsche Position des ersten Bots, vor Runde 1 bspw. „POS 1 4,5 E“ statt „POS 1 3,5 E“

Re: Fehler?

Du hast Recht, das sah beim Debuggen schon seltsam aus. Ich habe es eben korrigiert. Danke fürs Melden!

Pingback

[...] aber wiederverwenden konnte, war die Engine dann doch in zwei Tagen geschrieben. Und da ist er nun: Siebter Programmierwettbewerb gestartet. Als Aufgabe muss man wie beim Film Tron sein Lightcycle in der Arena bewegen und dabei den Gegner [...]

Zwei kleine Wünsche

Hallo,

Ich möchte euch (bzw. Dee) um zwei kleine Dinge bitten:

1. Es gibt ja bereits eine Datei start_contest.sh, die den results-Ordner mit den Ergebnissen aller Kämpfe füllt. (Dieses lässt übrigens auch jeden Bot gegen sich selbst antreten, was laut Regeln nicht gewollt ist für die Endauswertung). Irgendwann wird man hier sicher ohnehin ein Auswertungsskript benötigen. Es wäre ganz nett, wenn man das jetzt schon haben könnte, um seine verschiedenen Bots vergleichen zu können. An sich genügt eine Tabelle mit Punkten und den Tiebreak. Besonders schön wäre es natürlich für jedes Spielfeld eine Kreuztabelle zu erhalten.

2. Da stdin/stdout als Kommunikationskanal verwendet wird, gestaltet es sich etwas schwierig einen Bot zu schreiben, der auf Nutzereingaben reagiert. Von Engine-Seite her sollte das aber recht simpel sein: Aktuelles Spielfeld (gerne mit Zahlen am Rand) und Positionen ausgeben und auf eine Eingabe AHEAD, LEFT oder RIGHT warten. Für den Wettbewerb später ist so ein menschlicher Mitspieler vielleicht weniger interessant, aber für Testzwecke wäre das durchaus recht praktisch. (Außerdem würde es mich interessieren, ob man später die guten Bots noch durch intuitives Spielen schlagen kann.)

2.1. Wenn jemand eine graphische Oberfläche schreiben könnte, in der man einen Spieler mit den Pfeiltasten steuern kann (die zu den Himmelsrichtungen, nicht zu AHEAD, LEFT, RIGHT passen), wäre das natürlich super. Dann käme hierbei tatsächlich etwas raus, was über den Wettbewerb hinaus Nutzen hätte.

Vielen Dank schonmal, Keba

Re: Zwei kleine Wünsche

zu 1. Du hast ja alle Daten beisammen und kannst gerne einen Vorschlag machen, wie die Auswertung aussehen könnte. Ich habe mir darüber noch keine großen Gedanken gemacht und werde das wohl auch erst im Dezember tun oder zumindest nicht vor November.

zu 2. Das geht heute bereits schon. Zumindest mit dem Beispielbot:

$ ./bot
GAMEBOARDSTART 2,2
..
..
GAMEBOARDEND
SET 1
POS 1 1,1 S
POS 2 2,2 N
ROUND 1

Darauf antwortet der Bot dann mit AHEAD. Du „simulierst“ also damit den zweiten Bot, in dem Du Deinem Bot einfach nur die neue Position mitteilst. Das ist ja der Vorteil von STDOUT und STDIN, Du kannst das sehr leicht ausnutzen für Tests.

zu 2.1. Das hatte ich für alle vorherigen Wettbewerb auch gehofft, aber das hat bisher niemand umgesetzt. Möglich ist es aber natürlich. Die GUI für das Spielprinzip habe ich ja schon geschrieben. Ich habe aber sicherlich nichts dagegen.

Re: Zwei kleine Wünsche

Danke für die schnelle Antwort.

Zu 1: Hm, gut. Dann gucke ich mal, ob ich selber was schreibe, oder bis November/Dezember warte.

Zu 2: Ah, das ist eine gute Idee. Ich muss ja gar nicht zwingend start.sh benutzen. Gut, damit geht das natürlich recht einfach, Danke. :)

Grüße, Keba

Re: Zwei kleine Wünsche

zu 1. Das Archiv enthält nun auch ein Skript zur Analyse der Ergebnisse: "./analyze_results.sh results/*" gibt die Punkte für jeden Spieler aus.

tartet 'gui' failed: ld error

Bei mir lässt sich die GUI unter Arch Linux leider nicht erstellen (ld-Fehler):

qmake && make
g++ -Wl,-O1,--sort-common,--as-needed,-z,relro -Wl,-O1 -o gui CommandHandler.o CommandWindow.o GameArea.o GameWindow.o GameData.o SingleTextStream.o MessageProcessor.o main.o moc_CommandWindow.o moc_GameArea.o moc_GameWindow.o -L/usr/lib -L../src/libtiles -L../src/libgame -L../src/libbot -lbot -lgame -ltiles -lQtGui -lQtCore -lpthread
CommandHandler.o: In function `CommandHandler::receiveAndHandleMessage(QString const&)':
CommandHandler.cpp:(.text+0x12f): undefined reference to `QArrayData::deallocate(QArrayData*, unsigned int, unsigned int)'
CommandHandler.cpp:(.text+0x776): undefined reference to `QArrayData::deallocate(QArrayData*, unsigned int, unsigned int)'
collect2: Fehler: ld gab 1 als Ende-Status zurück
Makefile:123: recipe for target 'gui' failed
make: *** [gui] Error 1

Unter Arch ist Qt5 die

Unter Arch ist Qt5 die Standardversion von Qt, daher muss man dort qmake-qt4 verwenden.

Hi,könntet ihr bitte auch

Hi,

könntet ihr bitte auch Kompilate des Servers für die unterschiedlichen Betriebssystem bereitstellen? Danke.

Re: Kompilate für unterschiedlichen Betriebssysteme

Hallo,

das wird schwer bis unmöglich. Wenn Ihr alle Linux-Systeme mit ihren zahlreichen Versionsausprägungen und dazu noch 32bit und 64bit sowie Windows unterstützen sollen, nimmt das etwas Überhand. Zum Beispiel bringt ein von mir kompiliertes Binary (Ubuntu 12.04 LTS 64-Bit) dem Arch-Linux-Nutzer rein nichts, weil der gegen andere Libraries linkt, die ich gar nicht habe.

Wenn Du konkret sagst, wo es hängt, könnte vielleicht jemand anderes mit dem gleichen System ein Binary beisteuern.

Viele Grüße
Dominik

Kompilate für unterschiedlichen Betriebssysteme

Hallo,

ein Windows (32 oder 64 Bit) und ein Mac OS X Build wären schön.

Re: Kompilate für unterschiedlichen Betriebssysteme

Beides habe ich nicht. Ggf. kann Dir jemand anderes ein Kompilat bauen.

Ich weiß aber bei Windows nicht einmal, ob es etwas bringt, weil das System Pipes für die Kommunikation unterstützen muss. Und zumindest beim letzten Wettbewerb hat das bei einem Benutzer mit Cygwin auf Windows nicht funktioniert.

Viele Grüße
Dominik

Regeln zur Spielfeldgröße

Gibt es irgendwelche Regeln zur maximal zulässigen / minimal erforderlichen Spielfeldgröße?
Mit dieser Info könnte man gezielter testen.

Re: Regeln zur Spielfeldgröße

Theoretisch gibt es keine Beschränkung, aber ich denke, Spielfelder mit maximal 1000x1000 Feldern wären noch vertretbar. Im Wettbewerb werden sie wohl kleiner sein, ich denke maximal 100x100.

Pingback

[...] dem Start des siebten freiesMagazin-Programmierwettbewerbs Anfang Oktober gab es einige Fragen von den Teilnehmern, die hier kurz für alle beantwortet werden [...]

Pingback

[...] siebte freiesMagazin-Programmierwettbewerb startete am 1. Oktober 2014 und vorgestern, am 20. Dezember 2014 war Einsendeschluss für die [...]