Niedobór jedzenia w Snakepit
Po raz pierwszy od 35 lat w snakepit zaczyna brakować jedzenia. Mieszkańcze węże muszą teraz walczyć ze sobą, aby przetrwać ten niedobór żywności. Tylko jeden wąż może stać na szczycie łańcucha pokarmowego!
Tabela liderów
Jeszcze nie tutaj!
Ostatnia aktualizacja 24 lutego
Link do wizualizacji ostatnich meczów
Opis
Jeśli chcesz walczyć o ostatnie pozostałe jabłka / wiśnie / cokolwiek innego, musisz zapewnić węża w postaci programu, który przyjmuje dane dane wejściowe i zwraca następny ruch.
Jedynym zwrotem jest to, że nie jesteś sam w swojej otchłani. Kolejny wąż też będzie próbował zdobyć rzadkie jedzenie! Ale wewnątrz snakepit jest ciemno, więc możesz zobaczyć tylko siebie i jabłko. Trafienie w przeciwnika spowoduje śmierć, tak jak ugryzienie siebie lub uderzenie w ścianę. Ponadto, ponieważ jabłka są obecnie rzadkie, głodujesz, jeśli Twój przeciwnik zje wystarczająco dużo, aby osiągnąć długość 7.
Snakepit to dwuwymiarowa mapa o szerokości i wysokości 15, podczas gdy najbardziej zewnętrzne płytki budują nieprzejezdną ścianę:
0 1 2 . . . c d e
0 # # # # # # # # #
1 # #
2 # x #
. # #
. # #
. # #
c # #
d # #
e # # # # # # # # #
Współrzędne są zerowane, więc punkt, w którym x
by się znajdował 12,2
.
Twój bot zostanie wywołany z dwoma argumentami:
- Lokalizacja jedzenia
- Lokalizacje segmentów ciała, oddzielone przez
/
Następnie powinien napisać jedno z poniższych poleceń na standardowe wyjście:
L
przez ćwierć obrotu w lewo jako następny ruchR
na ćwierć obrotu w prawo- Coś jeszcze do ruchu w tym samym kierunku
Przykład:
Projects/Snakepit> python bot.py 12,2 4,8/4,9/3,9/2,9
'R'
Projects/Snakepit>
Zasady
Twój bot może:
- Wyprowadzaj cokolwiek, ponieważ cokolwiek jest prawidłowym ruchem
- Odczyt / zapis plików we własnym katalogu, który znajduje się w ./snakes/ThisIsYourSnake
- Uruchom na Ubuntu 14.04 i Windows 7 (tak naprawdę musi)
Twój bot nie może:
- Odczytywanie / zapisywanie plików poza własnym katalogiem
- Korzystaj z zewnętrznych zasobów, takich jak Internet
- Czas działania powyżej 10 sekund na wykonanie
W swojej odpowiedzi musisz podać:
- Kod źródłowy bota
- Nazwa bota / węża
- (Twoje własne imię)
- Polecenie do uruchomienia twojego bota
Jeśli chcesz ułatwić moje życie, proszę podać taką linię
CoolSnake MyOwnName python bot.py
.
Punktacja
Twój wąż dostaje punkt za wygraną w grze z innym wężem. Gra zostaje wygrana w następujących okolicznościach:
- Twój przeciwnik uderza siebie, ciebie lub ścianę
- Osiągasz długość 7
Dodatkowo oba węże głodują po 200 cyklach.
Każdy wąż stoczy 10 meczów o przetrwanie ze sobą.
Przykładowe boty
Aby dać ci pomysł, przedstawię dwa (uczestniczące) przykładowe węże:
SneakySnake
#!/usr/bin/env python
import sys, random
def main(food, me) :
food = [int(i) for i in food.split(",")]
me = [[int(i) for i in seg.split(",")] for seg in me.split("/")]
head = me[0]
v = [head[0] - me[1][0], head[1] - me[1][1]]
if food[0] < head[0] :
vn = [-1, 0]
elif food[0] > head[0] :
vn = [1, 0]
elif food[0] == head[0] :
if food[1] < head[1] :
vn = [0, -1]
elif food[1] > head[1] :
vn = [0, 1]
if v == vn :
return "..."
elif [-v[1], v[0]] == vn :
return "R"
elif [v[1], -v[0]] == vn :
return "L"
else :
return random.choice(("R", "L"))
if __name__ == "__main__" :
print main(*sys.argv[1:3])
SneakySnake Cipher python bot.py
ViciousViper
#!/usr/bin/env python
import sys, random
def main(food, me) :
food = [int(i) for i in food.split(",")]
me = [[int(i) for i in seg.split(",")] for seg in me.split("/")]
head = me[0]
v = [head[0] - me[1][0], head[1] - me[1][1]]
vn = [food[0] - head[0], food[1] - head[1]]
if 0 not in vn :
vn[v.index(0)-1] = 0
vn[vn.index(0)-1] = vn[vn.index(0)-1] / abs(vn[vn.index(0)-1])
if v == vn :
return "..."
elif [v[0] + vn[0], v[1] + vn[1]] == [0, 0] :
return random.choice(("R", "L"))
else :
return "R" if [-v[1], v[0]] == vn else "L"
if __name__ == "__main__" :
print main(*sys.argv[1:3])
ViciousViper Cipher python bot.py
I ich mecze:
Program sterujący
Program sterujący można znaleźć na github , wraz ze wszystkimi botami i zapisami poprzednich meczów.
Wymagania:
- Python 2 + biblioteki
numpy
ipillow
(możesz sprawdzić, czy są one obecne przezpython -c "import numpy, PIL"
, jeśli generuje błędy, brakuje modułów) - Aby sterownik działał, konieczne jest skopiowanie pełnej struktury folderów
- Zarejestruj swojego bota (ów) w
./snakes/list.txt
pliku w styluCoolSnake MyOwnName Command To Run My Bot
- Umieść bota w katalogu z jego nazwą pod
./snakes
- Ani twoja, ani nazwa twojego bota nie może zawierać białych znaków!
Stosowanie:
python run.py [-h] [-n int] [-s int] [-l int] [-c int] [-g]
python run.py
przeprowadzi turniej ze wszystkimi botami zarejestrowanymi w list.txt i standardowymi właściwościami. Zaawansowane opcje to:
-h
wyświetla komunikat pomocy-n int
rundy bitew dla każdej kombinacji przeciwników-s int
określa rozmiar siatki (szerokość i wysokość)-l int
ustawia wymaganą długość wygranej-c int
ustawia limit cykli-g
lub--no-gifs
nie tworzy gifów z dopasowaniami
Odpowiedzi:
Zen - C ++
Ten Codémon nie jest tutaj, aby jeść, ale walczyć. Wie, że martwy wróg nie ukradnie jego jabłek.
Name| Author |Launch with
Zen GholGoth21 Zen.exe
Strategia
Wszyscy (oprócz CircleOfLife) pędzą do jabłek, ale nie Zen, nie zawsze. Jeśli wróg może sięgnąć po jedzenie przed nim, po prostu czeka w centrum (co? Ale co tu robisz, CircleOfLife?). W przeciwnym razie Zen podchodzi do jabłka i odwraca się, czekając, aż coś się wydarzy. W rzeczywistości używa jabłka jako przynęty.
Nie zakodowałem niczego przeciwko ciekawej strategii CircleOfLife, ponieważ on może wygrać tylko z bardzo dużym szczęściem.
Kod
To jest kompletny kod projektu C ++. Wytnij 11 plików źródłowych i plik Makefile i skompiluj z
make
Lub pobierz plik zip: Zen.zip
Wyniki
I niektóre typowe bitwy (ViciousViper vs Zen i SneakySnake vs Zen):
Edycja : Dodaję tę bardzo interesującą bitwę z CircleOfLife:
źródło
CircleOfLife (Java)
CircleOfLife Manu java CircleOfLife
(Kompiluj zjavac CircleOfLife.java
)Biegnie w kierunku środka i zostaje tam. Mam nadzieję, że niektóre zgłoszenia zderzą się z tym w drodze do jedzenia.
źródło