Inspiracją była mini-gra Minecraft. Zasady są dość proste: biegniesz i skaczesz, a każdy blok, na który wchodzisz, znika, gdy tylko nadepniesz. Celem jest pozostanie ostatnim.
Twój bot powinien być kompletnym programem. Powinien akceptować dane wejściowe jako argument wiersza poleceń. Dane wejściowe będą stanowić mapę „świata”; Oto przykład:
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxx xxxxxxxxxxxxxxxxxxxxxxxxxxx
xxx xxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxx x xxxxxxxxxxxxx@xxxxxxxxxxx
xxxxxx1xxxxxxxxxxxxx xxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxx xxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxx xxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxx xxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxx xxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxx xxxxxxxxxxx
xxxxxxxxxx xxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxx xxxxxxxxxxxx
xxxxxxxxxxxxxxxxx x x xxxxxxxxxx
xxxxxxxxxxxxxxxxxxxx xxxxxxxxxxx
xxxxxxxxxxxxxx xxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxx xxx xx3xxxxxxxxxx
xxxxxxxxxxxxxxxxxxx xxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx x
xxxxxxxxxxxxxxxxxxxxxxxxxxx xx
xxxxxxxxxxxxxxxxxxxxxxxxx 2
xxxxxxxxxxxxxxxxxxxxxxx
Legenda jest następująca:
x: solid block
: empty air
@: your bot
1,2,3,4,5,6,7,8,9,0: other bots
Twój bot powinien wysyłać twój ruch jako parę liczb całkowitych. Przykład: -1, 2
przeniesie 1 blok w lewo i 2 bloki w dół (początek współrzędnych znajduje się w lewym górnym rogu).
Możesz przenieść się do czterech bloków, odległość manhattan, z bieżącej lokalizacji. Jeśli spróbujesz przejść dalej, ruch jest nieprawidłowy. Każdy ruch, który przesunąłby cię poza krawędź, spowoduje przejście na krawędź. Nieprawidłowe ruchy zostaną zignorowane.
Gdy wylądujesz na bloku, jest on usuwany; jeśli pozostaniesz na tym samym bloku w następnej turze, upadniesz. Dwa boty mogą wylądować na tym samym bloku w tej samej turze i oba przetrwają; jeśli tak się stanie, oba boty zobaczą tylko siebie, a nie drugiego bota.
Jeśli musisz przechowywać pliki w celu utrwalenia, zrób to w folderze z nazwą bota. Nie możesz odczytać trwałych danych innych botów, jeśli takie istnieją.
Kontroler meczu jest dostępny na https://paste.ee/p/Xf65d .
Proszę używać języków, które można uruchomić w standardowej instalacji Linux lub OSX.
Aktualne wyniki (100 rund):
JumpBot 31
LookBot 27
ShyBot 26
Slow Bot 15
KnightBot 2
Moat Builder 0
UpBot 0
Random Bot 0
źródło
Odpowiedzi:
Slow Bot (Python)
Porusza się zgodnie z układem linii i sprawdza swoje ruchy przed ich wykonaniem (także samobójstwami, kiedy ostatni żyje, aby zapobiec długim czasom działania). Wygrał 195/200 bitew w moim turnieju testowym.
Nie jestem ekspertem w pythonie i prawdopodobnie istnieje 100 sposobów, aby zrobić to krócej / lepiej
źródło
JumpBot (C)
Spróbuj wskoczyć na pole z jak największą liczbą ruchów w następnej rundzie.
źródło
LookBot (C)
Prosty bot o podobnej wydajności do Slow Bot, z tym wyjątkiem, że wykonuje losowe ruchy. Zaplanuj ulepszenie tego do PredictBot.
źródło
Kreator fosy (Python)
Jeśli wykopię wokół siebie fosę, nikt poza nią nie może mnie przekręcić.
... znany również jako „Pomaluj się w symulator narożny 2016”.
źródło
Monte (Python)
Przepraszam, ta gra słów musiała zostać wykonana.
W każdym razie ten bot działa poprzez przeszukiwanie drzewa Monte Carlo we wszystkich możliwych zestawach ruchów. Pomyśl o JumpBocie, tylko bardziej dogłębnie.
Do uruchomienia potrzebny jest dodatkowy argument wiersza poleceń (można określić w kontrolerze). Kontroluje, ile czasu bot powinien szukać (w ms); Użyłem 750-1500 w testach.
Kod:
Próby
25 rund:
100 rund:
200 rund:
Wszystkie powyższe symulacje wykorzystały czas wyszukiwania 750. Ten bot prawdopodobnie byłby jeszcze lepszy z dłuższym czasem wyszukiwania (nie wiem, jaka jest maksymalna dozwolona wartość).
Ulepszenia
Ten bot nadal wymaga ulepszeń w:
źródło
ShyBot (Python)
Ten bot naprawdę nie lubi innych botów i spróbuje trzymać się z daleka, jeśli to możliwe. ShyBot jest również bardzo ostrożny w kwestii kroków; nawet nie nadepnie na innych botów. Jednak ShyBot nadal często przegrywa, co czyni niepewnym.
źródło
KnightBot (Java)
Działa jak szachy i nazywa się jak Twitch ...
...
.........
............................Przepraszam...
SwirlyBot (Java)
Nie są to oczywiście optymalne rozwiązania, ale mam nadzieję, że przydadzą się w testach na średnim poziomie.
źródło
Random Bot, UpBot
Dwa początkowe boty, z którymi można konkurować:
Random Bot: Przykładowy bot, który porusza się losowo.
UpBot: Przykładowy bot, który porusza się w górę.
źródło
StalkerBot (Python)
Zbliża się jak najbliżej najbliższego bota, którego widzi. Celuje w automatyczne (bezcelowe) samobójstwo Slow Bota. (Jeśli jestem na tym samym polu i nie ma innych graczy, nie zobaczy mnie i samobójstwo.)
źródło