Es ist ein trockener Sommer in der Prärie. Die vier Bauern in der Region erkennen, dass sie den Markt für Mais durch Verbrennen der Ernte ihrer Nachbarn in die Enge treiben können. Dafür brauchen sie eine Strategie. Hier kommst du rein.
Deine Aufgabe ist es, einen Bot zu schreiben, der den Bauern sagt, was sie verbrennen sollen. Ziel ist es, das Spiel mit der größten Fläche an unverbranntem Land zu beenden. Das Spielfeld ist ein 32x32-Raster. Jede Zelle kann eine der folgenden sein:
. - Ground
@ - A bot
# - Ash
W - Wet ground
1,2,3,4,5, or 6 - Fire
Die Intensität des Feuers nimmt mit jeder Runde um 1 zu. Sobald es 3 oder höher ist, werden Zellen daneben (horizontal oder vertikal) in Brand gesetzt. Nachdem das Feuer 6 getroffen hat, verwandelt es sich in Asche.
In jedem Spielzug erhalten Bots als STDIN Folgendes: Bots starten x, Bots starten y, Bots aktuelle x-Position, Bots aktuelle y-Position und das Brett, getrennt durch Zeilenumbrüche. Ein Beispiel:
8
22
6
24
................................
................................
................................
.....................1..........
....................1#1.........
...................1#363........
....................16@1........
.....................31.........
................................
.........1.1....................
........15#62...................
........15@2....................
.........32.....................
................................
................................
................................
................................
................................
................................
................................
................................
................................
....4.1.........................
.....1#3........................
.....@3.........................
.....W..........................
................................
................................
................................
................................
................................
................................
(in diesem Fall bist du der Bot unten links).
Sie müssen drei Zeichen mit einem optionalen Zeilenumbruch ausgeben, der Folgendes darstellt:
Move - einer von L, R, U, D, or S (stay)
Action - einer von B (burn), P (pour water) or X (do nothing)
Richtung - eine von L, R, U, D or S
- steuert, für welche Zelle Sie die Aktion ausführen
Feuer beeinflusst keine Bots.
Die Zugreihenfolge ist wie folgt: Alle Bots bewegen sich; Alle Bots führen Aktionen aus. dann passieren umweltregeln. Wenn Sie Wasser auf den Boden gießen, ist es W
eine Runde lang nass ( ). Feuer breitet sich nicht auf nassem Boden aus. Wenn Sie Wasser auf nassen Boden gießen, bleibt es weiterhin nass. Wenn Sie Wasser ins Feuer gießen, kehrt es zu normalem Boden zurück. Mit Asche kann man nichts anfangen.
Runden werden mit jeweils 4 Bots gespielt. Die Runde endet nach 50 Runden, oder wenn einem Bot der unverbrannte Boden ausgeht, je nachdem, was zuerst eintritt. Ihre Punktzahl wird berechnet als die Anzahl der gemahlenen oder nassen gemahlenen Zellen im 9x9-Quadrat, zentriert an der Stelle, an der Ihr Bot gestartet ist.
Hier ist ein Beispielbot; Es wählt alle drei Buchstaben nach dem Zufallsprinzip aus und brennt in der Regel seine eigenen Felder nieder.
RandomBurner:
#!/usr/bin/env python
import random
print random.choice('LRUDS')+random.choice('BPX')+random.choice('LRUDS')
Regeln:
- Kein Dateisystemzugriff außerhalb Ihres eigenen Ordners.
- Sie können in Dateien schreiben, wenn Sie dauerhafte Daten zwischen den Runden speichern müssen, jedoch nur bis zu maximal 1 KB pro Bot
- Sie dürfen den Bot eines anderen Benutzers nicht überschreiben
- Wenn Sie einen ungültigen Zug ausgeben, bleibt Ihr Bot stehen. Wenn Sie eine ungültige Aktion ausgeben, unternimmt Ihr Bot nichts.
- Bitte halten Sie sich an gebräuchliche Sprachen, die auf einer OSX- oder Linux-Box ausgeführt werden können.
Controller-Code finden Sie hier.
Erste Ergebnisse:
Average of 15 rounds:
---------------------
81 Farmer
56 CautiousBot
42 GetOff
41 Visigoth
40 DontBurnMeBro
37 FireFighter
35 Pyro
11 Protector
Update : Farmer, CautiousBot, GetOff, FireFighter und Pyro hinzugefügt.
quelle
Antworten:
Westgoten
Westgoten versuchen, ihre Feinde niederzubrennen. Es hofft, dies zu tun, bevor jemand anderes in sein Land gelangt.
Lauf:
python visigoth.py
Dies ist mein erster Eintrag, konstruktive Kritik wird geschätzt!
quelle
min
wo ich hätte haben sollenmax
. Ich habe es repariert.Java, Beschützer
Versuche, sein Feld mit einem Aschenzaun zu umgeben.
Edit: Die Logik wurde ein wenig verbessert. Macht wahrscheinlich keinen Unterschied.
In eine Datei mit dem Namen platzieren
Protector.java
.Kompilieren mit:
javac Protector.java
Ausführen mit:
java Protector
quelle
GetOff, Python
GetOff will nur sein Land für sich behalten, und er hat keine Angst, diese verdammten Bots überall auf seinem Land zu jagen und sie mit seiner Wasserpistole zu bespritzen, bis sie gehen. Während sein Eigentum nicht verletzt wird, versucht es sein Bestes, um sicherzustellen, dass sein Land nicht verbrannt wird.
quelle
a < b < c
Syntax in Python? Ich dachte(a < b) < c
das ergibt, was entweder1 < c
oder ist0 < c
. Korrigiere mich, wenn ich falsch liege. (Gefunden in der ersten Bedingung der Bot-Schleife.)1<3>2
wertet esTrue
auf meinem Rechner aus (wenn es sie gruppieren würde, würde es false zurückgeben:1>2
und1<1
gibt die Möglichkeiten).Bauer, Java
Der Bauer kümmert sich nur um seine Ernte. Er beobachtet ständig sein Feld auf mögliche Brände oder Eindringlinge.
quelle
isFire
könnte manCharacter.isDigit
stattdessen nutzen .Pyro, Python
Pyro mag Feuer. Pyro liebt Feuer. Pyro lebt im Feuer. Ich denke "Pyro von TF2". Pyro verbrennt gern Dinge. Er wird sein eigenes Territorium nicht verbrennen, aber er wird versuchen, es mithilfe eines einfachen "Pfadfindungs" -Algorithmus zu verlassen.
quelle
DontBurnMeBro
Ein weiterer Python-Eintrag. Garantiert nicht der Erste zu sein, der stirbt (glaube ich).
quelle
P
nichtW
.Feuerwehrmann, Java
Bekämpft alle Brände.
quelle
Bewahrer, Python 2
Könnte vereinfacht werden, aber ich bin müde.
Der Bewahrer versucht, sein Feld vor Schaden zu bewahren. Wenn ein Feuer auftaucht, eilt es dorthin und löscht es so schnell es geht.
Ich kann auch Unterkünfte für ankommende Brände hinzufügen.
quelle
ValueError: min() arg is an empty sequence
- wirft Fehler, wenn noch nichts in Brand ist.CautiousBot, Node.js (ES5)
Dieser Bot geht aus und versucht, das Land anderer Bots in Brand zu stecken. Es sitzt sogar 3 Zecken über dem Feuer, um es zu verstecken! Man kann jedoch nie zu vorsichtig sein, deshalb stellt man immer sicher, dass es nah genug ist, um Brände auf seinem eigenen Land zu löschen.
Anmerkungen:
state.json
die in ihrem Arbeitsverzeichnis gespeichert ist und Informationen über die Ausgangspositionen anderer Bots speichert und festlegt, wie lange ein ausgelöstes Feuer verborgen werden soll. Dies muss gelöscht werden, sobald die Runde vorbei ist (zB wenn ein Bot gewonnen hat). Andernfalls wird der Bot in der nächsten Runde verwirrt. (Lassen Sie mich wissen, wenn dies gegen die Regeln verstößt.)split
Modul.quelle
Error: Cannot find module 'split'
. Ich verwende Node.js v0.10.30.cd botdir
npm install split
Aus irgendeinem Grund mag Node es nicht, wenn es global für mich installiert wird, aber Sie könnten es auch versuchen