Wpisy są teraz zamknięte. Wszelkie nowe wpisy lub zmiany nie będą liczone w ostatnim uruchomieniu.
Dołącz do czatu!
Wyzwanie
Spróbuj wypełnić płótno jak największą ilością farby. Uważaj jednak na inne boty, które mogą pomalować twoją ciężką pracę!
Uwaga: W tym opisie wyzwania farba oznacza zmianę koloru kwadratu na siatce, a niepomalowanie oznacza, że kwadrat na siatce ma kolor 0 i nie jest przypisany żadnemu botowi.
Wejście
Twoja funkcja otrzyma cztery argumenty: ty, siatka, pozycja wszystkich botów na siatce i informacje o grze.
Siebie
Jest to tablica 1D co oznacza kolor i pozycję na starcie: [id, xpos, ypos]
.
Lewy górny róg siatki to pozycja (0, 0)
. Pozycja (1,0)
znajduje się po prawej stronie, a pozycja (0,1)
znajduje się poniżej
Twój identyfikator jest liczbą całkowitą, która jest synonimem twojego koloru (zobacz poniżej, aby dowiedzieć się, jak twój identyfikator wpływa na sposób malowania siatki). Twój identyfikator jest unikalny dla twojego bota.
Krata
Jest to tablica 2D zawierająca liczby całkowite, które informują o kolorze każdej komórki. Jeśli liczba komórek siatki wynosi 0
, oznacza to, że komórka jest niepomalowana. Jeśli liczba komórek siatki jest liczbą całkowitą x
, oznacza to, że komórka została namalowana przez bota z identyfikatorem x
.
Aby uzyskać kolor siatki w pozycji (x, y)
, należy użyć tablicę tak: grid[x][y]
.
Boty
Jest to tablica, która zawiera informacje o pozycji botów. Każdy element tablicy botów jest tablicą, która opisuje każdego bota i wygląda następująco: [id, xpos, ypos]
gdzie id
jest identyfikatorem bota, xpos
jest pozycją x bota i ypos
jest pozycją y bota.
Ta tablica zawiera pozycję i identyfikator twojego bota. Wyeliminowane boty nie zostaną uwzględnione w tej tablicy.
Informacje o grze
Jest to tablica zawierająca informacje o bieżącej grze i wygląda następująco: [roundNum, maxRounds]
gdzie roundNum
jest liczba bieżącej rundy (indeksowana 1) i maxRounds
liczba rund w bieżącej grze.
Wynik
Wynik powinien być ciągiem zwracanym przez twoją funkcję. To jest polecenie ruchu.
Polecenie ruchu określa następny ruch. Dostępne polecenia to:
up
down
left
right
wait
Ilekroć się poruszasz, malujesz kwadrat, na który się poruszasz. (więcej informacji poniżej)
Gdzie wait
oznacza, że się nie ruszasz. (ale malujesz kwadrat, na którym pozostajesz)
Jeśli spróbujesz wyjść poza siatkę, twoje polecenie zostanie zignorowane i pozostaniesz w tym samym miejscu.
Malowanie siatki
Ilekroć poruszasz się do kwadratu, malujesz go, ale istnieją zasady, które określają, jaki będzie kolor tego kwadratu.
Jeśli kwadrat jest niepomalowany (0), po prostu pomaluj go na ten sam kolor, co własny identyfikator. Jeśli jednak kwadrat był wcześniej malowany (niezerowy), wynikowy kolor kwadratu zostanie znaleziony zgodnie z następującym kodem JavaScript:
[botColour, 0, floorColour][Math.abs(botColour - floorColour)%3]
Ta formuła została stworzona tak, aby pozwolić botowi na przesuwanie się po własnym kolorze bez jego odmalowywania.
Eliminacja
Jeśli po rundzie 5 narysujesz jeden lub mniej kwadratów (liczba kwadratów na siatce, które są tego samego koloru), zostaniesz wyeliminowany. Oznacza to, że nie będziesz już w grze i automatycznie przegrasz.
Zasady
- Twój kod musi być funkcją typu
function(myself, grid, bots, gameInfo) {
// Code here
return move;
}
- Siatka będzie kwadratem o długości boku
- Aby zapobiec atakowaniu określonych botów, identyfikatory botów będą losowe.
- Kiedy dwa boty zajmą to samo miejsce, kolor tego miejsca zostanie pomalowany.
- Ruch jest turowa czyli podczas rundy, wszystkie boty są zasilane identyczne
grid
,bots
agameInfo
argumenty
- Możesz utworzyć maksymalnie trzy boty
- Boty mogą współpracować, ale nie mogą się ze sobą komunikować i nie będą się wzajemnie identyfikować. Wygrane będą przyznawane indywidualnie, a nie jako zespół.
- Nie wolno tworzyć bota, który celowo celuje w jednego, wcześniej wybranego bota. Możesz jednak celować w taktykę ogólnej klasy botów.
- Twój bot może przechowywać dane
window.localStorage
. Każdy bot musi używać własnego obiektu danych. Jeśli okaże się, że bot odczytuje dane innego bota (przypadkowo lub celowo), zostanie zdyskwalifikowany do czasu rozwiązania problemu. - Jeśli twój bot używa liczb losowych, użyj
Math.random()
Kontroler
Kontroler można znaleźć tutaj:
https://gist.github.com/beta-decay/10f026b15c3babd63c004db1f937eb14
Lub możesz go uruchomić tutaj: https://beta-decay.github.io/art_attack
Uwaga: Radzę wykonać wszelkie testy offline (pobierz kontroler z listy zadań), ponieważ strona internetowa może ulec zmianie w dowolnym momencie.
Po dodaniu wszystkich botów uruchomię 10 000 gier ze zredukowanym kontrolerem bez interfejsu graficznego. Możesz go uruchomić tutaj: https://beta-decay.github.io/art_attack/fast
Zwycięski
Gracz, który wypełnił większość płótna, wygrywa grę (gra ma 2000 rund). W przypadku remisu wszyscy losowani gracze wygrywają.
Gracz, który wygra najwięcej z 10 000 gier, wygrywa wyzwanie.
Szacuje się, że 10 000 gier zostanie uruchomionych w najbliższy poniedziałek (2018-08-27 o 23:00 UTC + 1).
[botColour, 0, floorColour][Math.abs(botColour - floorColour)%3]
formułą, niezależnie od tego, czy bot ma szczęście i nie może pomalować dużych konkurentów (lub zostanie zamalowany). Weź również pod uwagę trolle / myśliwych, którzy mogą samodzielnie zniszczyć wybranego bota. Tak czy inaczej, uśredni się na 10000 gier.
[botColour, 0, floorColour][Math.abs(botColour - floorColour)%3]
na angielski?