Na prerii jest suche lato. Czterej rolnicy w okolicy zdają sobie sprawę, że mogą zaokrąglić rynek kukurydzy, spalając uprawy sąsiadów. Ale potrzebują do tego strategii; właśnie tam wchodzisz.
Twoim zadaniem jest napisanie bota, który powie rolnikom, co spalić. Celem jest ukończenie gry z największym obszarem niespalonej ziemi. Pole gry to siatka 32 x 32. Każda komórka może być jedną z następujących czynności:
. - Ground
@ - A bot
# - Ash
W - Wet ground
1,2,3,4,5, or 6 - Fire
Intensywność ognia wzrasta o 1 w każdej turze. Gdy osiągnie wartość 3 lub wyższą, podpali komórki obok niej (poziomo lub pionowo). Gdy ogień osiągnie 6, zamienia się w popiół.
W każdej turze boty otrzymują jako STDIN: bot startujący x, bot startujący y, bot bieżący x pozycja, bot bieżący y pozycja i plansza, oddzielone znakami nowej linii. Przykład:
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..........................
................................
................................
................................
................................
................................
................................
(w tym przypadku jesteś botem w lewym dolnym rogu).
Musisz wypisać trzy znaki, z opcjonalnym znakiem nowej linii, reprezentujące następujące elementy:
Przenieś - jeden z L, R, U, D, or S (stay)
Działanie - jeden z B (burn), P (pour water) or X (do nothing)
Kierunek - jeden z L, R, U, D or S
- kontroluje, na której komórce wykonujesz akcję
Ogień nie wpływa na boty.
Kolejność kolei jest następująca: Wszystkie boty się poruszają; wszystkie boty wykonują akcje; wtedy mają miejsce reguły środowiskowe. Jeśli wylejesz wodę na ziemię, będzie ona mokra ( W
) na jedną turę. Ogień nie rozprzestrzeni się na mokrą ziemię. Jeśli wylejesz wodę na mokrą ziemię, nadal będzie mokra. Jeśli wlejesz wodę do ognia, powróci ona do normalnego podłoża. Nie możesz nic zrobić.
Rundy są prowadzone z 4 botami jednocześnie. Runda kończy się po 50 turach lub gdy jeden bot skończy się z niespalonej ziemi, w zależności od tego, co nastąpi wcześniej. Twój wynik jest obliczany jako liczba naziemnych lub mokrych komórek naziemnych w kwadracie 9 x 9 wyśrodkowanym na początku twojego bota.
Oto przykładowy bot; wybiera losowo wszystkie trzy litery i na ogół spala własne pola.
RandomBurner:
#!/usr/bin/env python
import random
print random.choice('LRUDS')+random.choice('BPX')+random.choice('LRUDS')
Zasady:
- Brak dostępu do systemu plików poza własnym folderem.
- Możesz zapisywać do plików, jeśli chcesz przechowywać trwałe dane między kolejkami, ale tylko do 1 KB na bota
- Nie możesz nadpisywać niczyich botów
- Jeśli wydasz nieprawidłowy ruch, twój bot będzie siedział nieruchomo. Jeśli wydasz nieprawidłową akcję, twój bot nic nie zrobi.
- Proszę trzymać się popularnych języków, które można uruchomić na systemie OSX lub Linux.
Kod kontrolera można znaleźć tutaj.
Wstępne wyniki:
Average of 15 rounds:
---------------------
81 Farmer
56 CautiousBot
42 GetOff
41 Visigoth
40 DontBurnMeBro
37 FireFighter
35 Pyro
11 Protector
Aktualizacja : Dodano Farmera, CautiousBota, GetOff, FireFighter i Pyro.
źródło
Odpowiedzi:
Visigoth
Visigoth próbuje spalić wrogów na ziemię. Ma nadzieję to zrobić, zanim ktokolwiek dotrze na jego ziemię.
Biegać:
python visigoth.py
To mój pierwszy wpis, konstruktywna krytyka jest doceniana!
źródło
min
co powinienem byłmax
. Naprawiłem to.Java, Protector
Próbuje otoczyć swoje pole płotem popiołu.
Edycja: Ulepszona logika. Prawdopodobnie nie zrobi różnicy.
Umieść w pliku o nazwie
Protector.java
.Kompiluj z:
javac Protector.java
Uruchom z:
java Protector
źródło
GetOff, Python
GetOff chce po prostu zachować swoją ziemię dla siebie i nie boi się ścigać tych cholernych botów po całej swojej ziemi, wyrzucając je z pistoletu na wodę, dopóki nie odejdą. Chociaż jego własność nie jest naruszana, dokłada wszelkich starań, aby jego ziemia nie uległa spaleniu.
źródło
a < b < c
składnia działa w języku Python? Myślałam, że ma wartość(a < b) < c
, która jest albo1 < c
albo0 < c
. Popraw mnie, jeśli się mylę. (Znaleziony w pierwszym stanie pętli bota).1<3>2
oceniaTrue
na moim komputerze (gdyby je zgrupować, zwróciłoby wartość false:1>2
i1<1
są możliwości).Farmer, Java
Rolnik dba tylko o swoje uprawy. Stale obserwuje swoje pole pod kątem ewentualnych pożarów lub najeźdźców.
źródło
isFire
której możnaCharacter.isDigit
zamiast tego użyć .Pyro, python
Pyro lubi ogień. Pyro uwielbia ogień. Pyro żyje w ogniu. Myślę o „Pyro z TF2”. Pyro lubi palić rzeczy. Nie spali własnego terytorium, ale spróbuje się z niego wydostać, używając prostego algorytmu „znajdowania ścieżki”.
źródło
DontBurnMeBro
Kolejny wpis w języku Python. Z pewnością nie umrze jako pierwszy (tak myślę).
źródło
P
nie maW
.FireFighter, Java
Zwalcza wszystkie pożary.
źródło
Keeper, Python 2
Można to uprościć, ale jestem zmęczony.
Opiekun próbuje uchronić swoje pole przed krzywdą. Jeśli pojawi się ogień, podbiega do niego i gasi go tak szybko, jak to możliwe.
Mogę również dodać zakwaterowanie na nadchodzące pożary.
źródło
ValueError: min() arg is an empty sequence
- generuje błędy, jeśli jeszcze nic nie jest w płomieniach.CautiousBot, Node.js (ES5)
Ten bot wychodzi i próbuje podpalić ziemię innych botów. Siedzi nawet na szczycie ognia przez 3 tyknięcia, aby go ukryć! Jednak nigdy nie można być zbyt ostrożnym, dlatego zawsze upewnia się, że jest wystarczająco blisko, aby ugasić pożar na własnej ziemi.
Uwagi:
state.json
przechowywany w swoim katalogu roboczym, służący do przechowywania informacji o początkowych pozycjach innych botów i określania, jak długo ukrywać rozpoczęty pożar. Należy to usunąć po zakończeniu rundy (np. Gdy wygrał jakiś bot). W przeciwnym razie bot będzie zdezorientowany w następnej rundzie. (Daj mi znać, jeśli to złamie zasady).split
modułu.źródło
Error: Cannot find module 'split'
. Używam Node.js v0.10.30.cd botdir
npm install split
z jakiegoś powodu węzeł nie podoba mi się, że został zainstalowany globalnie, ale ty też możesz spróbować