· 9 min read

Battleship Coding Contest

Im Rahmen der virtuellen Konferenz Global Azure Austria 2021 fand ein Programmierwettbewerb statt (bis 3.5.2021 kann man noch mitmachen!). Man musste ein WebService bauen, dass Schiffe versenken spielt. Mir hat das sehr viel Spaß gemacht und auch die Konferenz verdient ein großes Lob, daher mal ein etwas anderer Artikel, der beschreibt wie es mir bei der Teilnahme beim Wettbewerb und auch ein wenig bei der Konferenz erging.

0. Start

Ich versuche im Moment meine Applikation ToDoVoDo ein wenig bekannter zu machen und daher habe ich beschlossen, ich muss etwas aktiver werden in den sozialen Medien. Aus diesem Grund habe ich mich letzte Woche nach langer Zeit mal wieder bei Twitter angemeldet und da sah ich, dass es in ein paar Tagen eine Azure Konferenz in Österreich gibt und sogar mit einem Programmierwettbewerb: Schifferlversenken. Die Anleitung kurz überfolgen und schon war ich gedanklich voll dabei, beim Battleship Coding Contest. Man sollte die FAQ genauer studieren, da stand eigentlich, dass man vom 16. - 3.5. Zeit hat. Ich schnappte das falsch auf, dass ich zum Start der Konferenz, am 16.4.2021, das Service fertig haben musste.

1. Meine Erfahrungen über Programmierwettbewerbe

Beim Abendessen besprach ich mit meiner Familie die Sache und ich meinte, da sollten wohl eigentlich Studenten und Schüler mitmachen und nicht ein erfahrener Softwareentwickler. Und Zeit habe ich eigentlich auch keine dafür, aber Lust hätte ich schon und es ist super aufbereitet und das könnte sich ausgehen, das müsste zu schaffen sein. Gewinnen kann man auch was, aber was ist noch nicht bekannt. Aber ich soll eigentlich was anderes machen, ich muss Leute finden, die ToDoVoDo ausprobieren, damit ich weiß, ob es auch für andere funktioniert und sinnvoll ist. Oder ich mache doch mit, aber es wird bestimmt dann bald einen Punkt geben, der mich ärgern wird und ich werde doppelt so lange brauchen, wie ich jetzt denke, aber… Was meint ihr? - Meine Frau kennt mich am besten und sagte nur, Du kannst eh nicht anders, Du wirst da mitmachen. Kurz darauf habe ich dann gleich mal mit meinem Sohn Schiffe versenken am Papier gespielt, damit ich wieder weiß, wie das eigentlich funktioniert und dann an die “Arbeit”. Zu Weihnachten 2019 habe ich bei einem Adventkalender mitgemacht 25 days of serverless. Fast jeden Tag habe ich die täglich neue Aufgabe versucht zu lösen. Manchmal habe ich es geschafft, oft hat es aber dann doch nicht gereicht, dass meine Abgabe als Lösung markiert wurde. Bei einer Security-Schulung hatten wir auch mal so eine Art Wettbewerb am Schluss, das hat mir da gar keinen Spaß gemacht. Vielleicht war es der Zeitdruck gegenüber den anderen Kollegen, vielleicht das Thema, irgendwie war das nur anstrengend.

2. Programmieren

Zunächst habe ich versucht das Rahmenprogramm nachzubauen. Ich habe mich für die Azure Function Variante entschieden. Ich merkte schnell, dass ich da nicht mehr am Laufenden bin. C# hat sich sehr weiterentwickelt in den letzten Jahren und auch die Azure Functions: .NET isolated function kannte ich bisher nicht. Doch mit der Anleitung muss das doch zu schaffen sein. Jedoch scheiterte ich zunächst, ich konnte den body nicht deserialisieren und habe dann am nächsten Tag die 2. empfohlene Variante (ASP.NET Core 5) begonnen. Dort funktionierte das und so habe ich herausgefunden ich muss einen C# Records deklarieren. Was ist das wieder? Ich muss mich da erst schlau machen, zumindest kam ich so über diese Hürde und konnte dadurch wieder bei der Azure Function weitermachen. Schließlich hatte ich das Rahmenprogramm fertig und es deployen, testen, sogar debuggen. Alles wunderbar erklärt in der Anleitung, wobei mir hier natürlich meine Erfahrung hilft.

3. Fertig

Am Abend des 15. hatte ich das Programm fertig und freute mich das dann gleich am nächsten Morgen auf der Plattform auszuprobieren. Klappte auch auf Anhieb. Als ich sah, dass man hier auch Twitter Account und Homepage angeben konnte, was ich eigentlich nie mache, freute ich mich ein wenig, denn so konnte ich den Wettbewerb auch gleich als Marketing Plattform nutzen. Somit habe ich die letzten Abende vielleicht doch nicht “ziellos” gearbeitet. 😅

Und dann sah ich das Ergebnis. Es haben sich drei angemeldet und ich war … Trommelwirbel … Letzter! 😓

2021-04-16-08_52_34-Global-Azure-Austria-2021

Ich schrieb an diesem Morgen dann in Microsoft Teams meinen Arbeitskollegen:

Vielleicht ist jemandem fad am Wochenende. Ich habe die letzten Tage wild programmiert, dass ich am Battleship Wettbewerb vom Coding Club Linz mitmachen kann und ab heute bis 3. Mai kann man das einreichen. Gleich in der Früh heute registriert und nun? - Ich bin zurzeit Letzter und das sieht man auch noch öffentlich! 🙁 Gut ich kann mich noch verbessern, aber vielleicht finden sich ja auch noch Leute, die noch schlechter sind als ich. 😁 Gestern haben sie dann auch noch die Gewinne bekanntgegeben, spricht mich eigentlich auch nichts wirklich an. - Naja, war aber zumindest lustig.

3.1 Taktik verbessert

Und so habe ich mal wieder die Anleitung des Wettbewerbs studiert und gesehen, dass man das immer wieder starten kann. Also habe ich am Samstag und Sonntag auch noch ein paar Stunden damit verbracht, mein Service zu verbessern, um meine Ergebnisse ein wenig zu steigern. Doch ich bin an meine Grenzen gestoßen. Mit meiner Taktik komme ich jetzt nicht mehr weiter. Ich sehe mir die Spielfelder an, wie mein Programm tippt und ich würde auch nicht anders spielen. Die zur Verfügung gestellte .NET Helper Library kann das Spielfeld ausgeben, genial:

???????????????????????????????
?  │  │  │  │  │  │  │  │  │  ?
?──┼──┼──┼──┼──┼──┼──┼──┼──┼──?
?  │  │~~│  │  │~~│  │  │  │  ?
?──┼──┼──┼──┼──┼──┼──┼──┼──┼──?
?  │~~│  │  │~~│  │xx│~~│~~│  ?
?──┼──┼──┼──┼──┼──┼──┼──┼──┼──?
?  │  │  │  │  │  │██│~~│  │  ?
?──┼──┼──┼──┼──┼──┼──┼──┼──┼──?
?  │  │~~│  │  │~~│  │  │  │  ?
?──┼──┼──┼──┼──┼──┼──┼──┼──┼──?
?  │~~│  │  │  │  │  │  │  │  ?
?──┼──┼──┼──┼──┼──┼──┼──┼──┼──?
?  │XX│XX│XX│~~│  │~~│  │  │  ?
?──┼──┼──┼──┼──┼──┼──┼──┼──┼──?
?  │  │~~│  │  │  │  │  │~~│  ?
?──┼──┼──┼──┼──┼──┼──┼──┼──┼──?
?  │~~│  │  │  │  │~~│  │  │  ?
?──┼──┼──┼──┼──┼──┼──┼──┼──┼──?
?  │  │  │  │  │  │  │  │  │  ?
???????????????????????????????

Was habe ich alles verbessert:

  • Die bereits abgeschossenen Schiffe samt Größen erkennen, damit ich z.B. Plätze, wo nur 2er Schiffe Platz haben, dementsprechend markieren und damit ausschließen kann.
  • Die Gewichtung angepasst, dass versucht wird auf möglichst großen freien Flächen sein Glück zu versuchen.
  • Die Ecken und Ränder weniger stark zu berücksichtigen.

Doch ich kam nur selten unter 42 Schüsse im Durchschnitt (Es werden pro Turnier immer 75 Runden gespielt und dann gemittelt.). Schließlich habe ich noch gemessen, wenn ich sehr viele Spiele mache (Es wird ein Client zum Testen zur Verfügung gestellt, dem kann man auch mal mitteilen, dass er 1000 Runden spielen soll.), welche Felder werden häufig belegt. Diese Tabelle habe ich dann händisch etwas angepasst und in die Gewichtung einfließen lassen. Eigentlich war auch meine vorhergehende Gewichtung schon so ähnlich, aber ich denke die 2.Zeile/Spalte bzw. Vorletzte, war noch zu hoch gewichtet. So kam ich zumindest um einen Schuss weniger aus. Dann hochgeladen und einige Male den Wettbewerb gestartet, bis ich zumindest ein paar Plätze gut gemacht habe.

Meine nächsten Gegner schaffen das Spiel mit 38. Schüssen, ich brauche über 40, da ist die Hürde zu groß. Ich könnte noch ein Programm schreiben, dass den Wettbewerb immer wieder anstoßt und ich so das Minimum raushole, vielleicht habe ich ja Glück und bekomme bei den 75 gespielten Runden pro Turnier mal lauter niedrige Werte, aber das ist nicht Sinn der Sache.

Meiner Meinung nach habe ich dafür eine Erkenntnis gewonnen: Da ich gesehen habe, dass Feinheiten einen doch weiterbringen, glaube ich, ich müsste jetzt künstliche Intelligenz einsetzen, die mir die optimalen Parameter ausrechnet. Ich wollte mich bisher eigentlich nicht mit künstlicher Intelligenz auseinandersetzen, aber vielleicht wäre das doch sinnvoller als bisher gedacht.

4. Die Konferenz

Ich habe die letzten Microsoft Konferenzen Ignite und Build versucht mitzuverfolgen und war enttäuscht und verwirrt. Die Sessions waren Großteils aufgenommen, aber wurden dann doch zu einer bestimmten Zeit gestreamt und das öfters am Tag, damit es für verschiedene Zeitzonen live aussieht. Ich kam damit nicht zurecht. Später fand man die Sessions nicht mehr, weil der Index so schlecht war. - Nein, das war nichts! Ich habe früher diese internationalen Konferenzen auch online verfolgt und mir Sessions runtergeladen, das war besser.

Aber wie war nun die Global Azure Austria 2021? Diese Konferenz war eigentlich perfekt. Genauso wie ich das kenne, so wie früher die Konferenzen in Österreich in der Stadthalle in Graz oder im Austria Center in Wien (von Microsoft oder auch die WeAreDevelpers vor ein paar Jahren in Wien). Es gab vier Sessions parallel, die hatten einen Schwerpunkt: Programmieren, IT, … Alles wurde live auf YouTube gestreamt, man konnte also Fragen stellen und gleich nach der Session blieb es auf YouTube, so kann man die Sessions auch jetzt noch ansehen (am einfachsten über die Schedule Seite der Konferenz). Interessante Themen, interessante Leute, manche Vorträge in Deutsch, manche in Englisch, die Sessions nicht zu lange, pünktlich begonnen, … - so macht das Spaß. Da kann Microsoft was lernen für die kommende Build.

Ich hatte leider auch nicht Zeit immer live dabei zu sein. Am Morgen war ich bei der Keynote (Azure - Ask us Anything) kurz dabei und am Nachmittag habe ich mir dann zwei Sessions angesehen. Am Samstag habe ich dann noch eine aufgezeichnete Session angesehen. (Mehr ging sich noch nicht aus, ich musste ja am Battleship Service weiterprogrammieren 😀) Ich vermute, es waren wohl zu wenig Teilnehmer, man ist doch ein wenig gesättigt im Moment mit Online Sessions, oder es war zu wenig bekannt. Selbst ich, habe das eigentlich nur am Rande mitbekommen. Naja, nächstes Jahr dann wieder.

5. Fazit

Danke für die tolle Konferenz und vor allem für den großen Aufwand, den Battleship Coding Contest auf die Beine zu stellen. Mir hat es viel Spaß gemacht. Mal sehen, wenn ich bis Mai ganz weit runterrutsche in der Tabelle, vielleicht packt mich nochmals der Ehrgeiz.

2021-04-19-23_33_21-Global-Azure-Austria-2021

HLC-ghost-BattleShip-2-twitter



Photo by Miltiadis Fragkidis on Unsplash


Share:
Back to Blog