Jesteś globusem szlamu. Oczywiście, będąc szlamem, chcesz przesiąkać jak najwięcej powierzchni. Ale są jeszcze 3 inne szlamy, które chcą zrobić dokładnie to samo. Kto będzie lepszym szlamem?
Opis
Wszystkie szlamy zostaną zebrane w jedną arenę. Sędziowie (tj. Program kontrolny) przejrzą wyczerpującą listę wszystkich możliwych kombinacji 4-szlamowych, umieszczą je na rogach stołu i zobaczą, który szlam wydziela się na największym obszarze.
Twoje szlamy mogą wykonywać jedną z 3 akcji w każdej turze: rozłożyć, skakać lub łączyć. Dalszy opis ich znaczenia zostanie podany w części Wyjście .
Board / Arena
Arena będzie kwadratową planszą (obecnie 8x8, ale może się to zmienić w przyszłości). Oto przykładowa arena trwającej gry:
11111222
11111444
11.22444
.1222.4.
333.3244
33333.44
333...44
333....4
Szlam jest reprezentowany przez liczby od 1 do 4 (gracze od 1 do 4), a puste miejsce jest reprezentowane przez kropkę ( .
). Początkowo plansza zaczyna się od pustej przestrzeni z wyjątkiem jednej jednostki szlamu gracza 1 w lewym górnym rogu, gracza 2 w prawym górnym rogu, gracza 3 w lewym dolnym rogu i gracza 4 w prawym dolnym rogu.
Współrzędne są reprezentowane przez indeks wierszy i kolumn oparty na 0, dla czytelności w kodzie. Na przykład współrzędne (3, 6) reprezentują 7. kwadrat w 4. rzędzie (w powyższym przykładzie a 4
). (Ułatwia to dostęp do kwadratów:. board[coords.x][coords.y]
) Oto wizualna ilustracja:
(0, 0) (0, 1) (0, 2)
(1, 0) (1, 1) (1, 2)
(2, 0) (2, 1) (2, 2)
Wejście
Dane wejściowe twojego programu będą to, kim jesteś (1, 2, 3 lub 4), przecinek ( ,
), a następnie zawartość planszy / areny (z nowymi liniami zastąpionymi przecinkami). Na przykład, jeśli byłeś graczem 3 w powyższym scenariuszu, Twój wkład byłby następujący:
3,11111222,11111444,11.22444,.1222.4.,333.3244,33333.44,333...44,333....4
Wynik
Twój program musi wypisać 4 liczby całkowite. Pierwsze dwa to odpowiednio indeks wiersza i kolumny szlamu, który chcesz przenieść, a następne dwa to indeks wiersza i kolumny, w którym chcesz je przenieść.
W każdej turze masz do wyboru trzy opcje: Rozłóż, skacz lub scal.
Rozpiętość
Aby rozprzestrzeniać się, współrzędne celu muszą znajdować się dokładnie o jeden kwadrat od przesuwanego szlamu, a kwadrat na współrzędnych celu musi być pustym miejscem. Podczas rozprzestrzeniania powstaje nowy szlam na współrzędnych docelowych, a stary szlam nie jest usuwany. Po utworzeniu nowego szlamu wszystkie wrogie szlamy na 8 polach wokół tego nowego szlamu są konwertowane na gracza, który się poruszył.
Na przykład, jeśli plansza na ryc. 1, jeśli gracz 1
0 1 1 2
miałby generować , wynikiem byłaby plansza na ryc. 2.1. 2. 11.22 11.12 1..22 1.112 ..22. ..11. ..... .....
Skok
Aby skoczyć, współrzędne celu muszą znajdować się dokładnie dwa kwadraty od przesuwanego szlamu, a kwadrat na współrzędnych celu musi być pustym miejscem. Podczas rozbijania powstaje nowy szlam na współrzędnych docelowych, a stary szlam jest usuwany. Po utworzeniu nowego szlamu wszystkie wrogie szlamy na 8 polach wokół tego nowego szlamu są konwertowane na gracza, który się poruszył.
Na przykład, jeśli plansza na ryc. 1, jeśli gracz 1
0 1 2 3
miałby generować , wynikiem byłaby plansza na ryc. 2.1. 2. 11..2 1...2 1...2 1...1 ....2 ...11 ...22 ...11
Łączyć
Aby się połączyć, współrzędne celu muszą znajdować się dokładnie o jeden kwadrat od przesuwanego szlamu, a kwadrat przy współrzędnych celu musi być śluzem tego samego gracza. Podczas łączenia stary szlam jest usuwany. Następnie wszystkie puste miejsca na 8 polach wokół docelowego szlamu są konwertowane na gracza, który się poruszył (nie wliczając przenoszonego starego szlamu).
Na przykład, jeśli plansza na ryc. 1, jeśli gracz 1
0 1 1 2
miałby generować , wynikiem byłaby plansza na ryc. 2.1. 2. 11..2 1.112 1.1.2 11112 ....2 .1112 ..222 ..222
Możesz także przekazać, po prostu wysyłając nieprawidłowe współrzędne (np. 0 0 0 0
).
Zasady i ograniczenia
Dodatkowe zasady to:
- Możesz odczytywać i zapisywać pliki we własnym folderze, aby zachować dane (zgłoszenia będą przechowywane
players/YourBotName/yourBotName.language
), ale nie możesz modyfikować ani uzyskiwać dostępu do niczego poza nim. Dostęp do Internetu jest zabroniony. - Twoje zgłoszenie może nie zostać zakodowane specjalnie w celu pomocy lub zranienia innego zgłoszenia. (Możesz mieć wiele zgłoszeń, ale nie mogą one w żaden sposób współdziałać ze sobą w żaden sposób).
- Zgłoszenie nie może zająć więcej niż 0,1 sekundy na turę. Jeśli od czasu do czasu przesłanie trwa 0,105 sekundy, to dobrze, ale może nie trwać znacznie dłużej niż ten limit czasu. (Jest to głównie kontrola poczytalności, aby uniknąć zbyt długiego testowania).
- Twoje zgłoszenie nie może być dokładnym duplikatem (tj. Używać tej samej logiki) innego, nawet jeśli jest w innym języku.
- Twoje zgłoszenie musi być poważnym przesłaniem. Jest to oparte na opiniach, ale jeśli twoje zgłoszenie wyraźnie nie próbuje rozwiązać wyzwania (np. Jeśli zdasz co turę), zostanie zdyskwalifikowane.
Jeśli Twoje zgłoszenie łamie którekolwiek z tych zasad lub nie wynika ze specyfikacją, zostanie zdyskwalifikowany, usunięty z playerlist.txt
, a gra uruchomi się ponownie od początku. Jeśli Twoje zgłoszenie zostanie zdyskwalifikowane, zostawię komentarz do Twojego wpisu wyjaśniający dlaczego. W przeciwnym razie zgłoszenie zostanie dodane do tablicy wyników. (Jeśli nie widzisz swojego zgłoszenia na tablicy wyników, nie masz komentarza wyjaśniającego do swojego postu i opublikowałeś swoje zgłoszenie przed upływem czasu „Ostatnia aktualizacja” poniżej, proszę powiedz mi! Mogłem go przypadkowo przeoczyć).
W swoim wpisie proszę podać:
- Imię.
- Polecenie powłoki, aby uruchomić program (na przykład
java MyBot.java
,ruby MyBot.rb
,python3 MyBot.py
, itd.).- Zauważ, że dane wejściowe (odtwarzacz i mapa) zostaną do tego dołączone jako argument wiersza poleceń.
- Programy będą testowane na Ubuntu 14.04, więc upewnij się, że Twój kod może być na nim uruchamiany (swobodnie).
- Numer wersji, jeśli kod działa inaczej w różnych wersjach języka.
- Kod twojego bota.
- Instrukcje, jak skompilować kod, jeśli to konieczne.
Kod kontrolera / testowanie, przykładowy bot
Kod kontrolera jest napisany w C ++ i można go znaleźć na Github . Dalsze instrukcje dotyczące uruchamiania i testowania kodu można znaleźć tutaj.
simplebot.rb
, bardzo prosty bot, który co turę rozprzestrzenia lub przeskakuje losowy szlam do losowej lokalizacji, jest również publikowany na Github .
Punktacja i liderów
Gdy wszystkie kwadraty na planszy zostaną wypełnione, gra się kończy i obliczane są wyniki. Ostateczny wynik gracza to liczba kwadratów, które zawierają śluz na końcu gry. Jeśli minęło 2000 tur (500 dla każdego gracza), a gra wciąż się nie kończy, gra i tak się zakończy, a wyniki zostaną zgłoszone, jakby gra się zakończyła.
Na koniec turnieju wyniki ze wszystkich gier zostaną uśrednione, aby obliczyć końcowy wynik każdego gracza, który zostanie opublikowany na tablicy wyników. Nie ma terminu składania wniosków; Będę okresowo aktualizować tabelę wyników, gdy pojawią się nowe zgłoszenia.
Wymagane są 4 zgłoszenia, aż pojawi się prawdziwa tabela wyników.
+--------------------------+-----------+--------------------+
| Name | Avg Score | Last Updated (UTC) |
+--------------------------+-----------+--------------------+
| GreedySlime | 47.000 | Jul 22 10:27 PM |
| Jumper | 12.000 | Jul 22 10:27 PM |
| ShallowBlue | 5.000 | Jul 22 10:27 PM |
| Lichen | 0.000 | Jul 22 10:27 PM |
+--------------------------+-----------+--------------------+
Ostatnia aktualizacja: 22 lipca 22:27 (UTC).