Easter Egg Hunt
Bot znajdź jajko, zanim królik znajdzie jajko. Bot szczęśliwy.
Przegląd
To wyzwanie na szczycie wzgórza na cześć Wielkanocy i tradycji polowania na pisanki!
Twój bot ma wizję dwóch pól w każdym kierunku, w tym przekątnych, tworząc wokół siebie kwadrat 5x5, który możesz zobaczyć. Szuka jajek, a ten, kto znajdzie najwięcej jajek, wygrywa!
Tablica
Plansza będzie się składać z o
s, które są pisankami, #
s, które są ścianami, *
s, którzy są innymi graczami, i s, które są pustymi polami.
- Będzie to kwadrat o długości krawędzi
(number of entries) * 3
. - Będzie otoczony murami.
- Wewnątrz ścian będzie znajdować się losowo rozmieszczone ściany o linii prostej
#
, o losowej długości od 2 do 10 włącznie. Będzie(number of entries) * 3
ich. - Jaja zostaną następnie umieszczone losowo. Będą
(number of entries) * 4
ich i będą generowane tylko na pustych () kwadratach.
- Aby proces generowania płyty działał poprawnie, musi być co najmniej 7 wpisów.
Oto JSFiddle, który wygeneruje losową planszę do przetestowania. Oto przykład z (number of entries) = 7
:
#####################
# o ##
# # o ##
# #o ###### ##
###### # ##
## o # # ##
## o# #o# o o##
## #o # # o # #
## # o # # # #
## ## # # o # #
## # # o # # #
## # o # ## # # #
## # # # #
# o # ## # #
# o oo ##o #
#o ####### oo ## #
# # # #
# o o o# #
# o #### o o#
# #
#####################
Po wygenerowaniu planszy każdy gracz kładzie się na losowym polu (puste miejsce).
Wejście
Weźmiesz sześć wierszy danych wejściowych. Pierwsze pięć linii to twoje pole widzenia (spacje poza granicami planszy będą reprezentowane przez X
, a środkowa spacja zawsze będzie to *
Ty), a szósta linia będzie pusta (na początku).
Wynik
Wyprowadzisz trzy linie. Po pierwsze, kierunek, w którym chcesz się poruszać:
1 2 3
8 YOU 4
7 6 5
(9 to brak A
operacji, jeśli nie chcesz się ruszać), po drugie, jeden z ttack, C
ounter lub N
othing (zostanie to wyjaśnione wkrótce), a trzecia linia będzie miała dowolny ciąg długości do 1024 To będzie pamięć twojego bota. Możesz użyć go do wszystkiego, co chcesz, lub pozostawić puste. Pamięć ta będzie następnie szóstym wierszem danych wejściowych do programu przy następnym uruchomieniu.
Wszystkie dalsze wiersze danych wyjściowych są ignorowane, a jeśli jest tylko jeden wiersz, zakłada się, że drugi jest pusty.
W ruchu
Poniższy proces służy do określenia miejsca przeniesienia:
- Jeśli podczas ruchu skończysz na pustym polu (
), Twój gracz zostanie umieszczony na tym polu.
- Jeśli trafisz na ścianę (
#
), twój ruch zostanie zignorowany i stracisz swoją kolej. - Jeśli trafisz do jajka (
o
) lub gracza (*
), informacje te zostaną zapisane i zostaną wykorzystane po przeprowadzce wszystkich osób.
Po tym, jak wszyscy się przeprowadzą, niejasności zostaną rozwiązane.
Jeśli jest dwóch graczy, którzy wylądowali na tym samym polu, następuje walka! W tym miejscu pojawia się A
/ C
/ N
. A
ttack bije N
othing (normalny atak), N
othing bije C
ounter (nie można nic C
skontrować ), a ounter bije A
ttack (kontratak). Gracz, który wygra tę walkę, pozostaje na swoim polu, a gracz, który przegrywa, wraca do pierwotnego pola, na którym zaczął. W przypadku remisu obaj gracze wracają tam, gdzie byli.
Jeśli przegrywający lub remisujący gracz wróci do miejsca, w którym był, i tam jest inny gracz, nie będzie walki, a drugi gracz również powróci na swoje pierwotne pole. Jeśli na tym polu znajduje się inny gracz, ten gracz cofa się i to trwa, dopóki wszyscy gracze nie znajdą się na różnych polach.
Jeśli na jednym polu znajduje się trzech lub więcej graczy, wszyscy wracają do swoich pierwotnych pozycji.
Jeśli jakiś gracz nadal stoi na jajku ...
- Jeśli gracz wybierze
A
, jajko zostanie zniszczone. - Jeśli gracz wybrał
C
, nic się nie dzieje i gracz powraca do pierwotnego miejsca. - Jeśli gracz wybrał
N
, gracz podnosi jajko! Wynik gracza jest zwiększany o jeden, a jajko jest usuwane.
Języki
Możesz używać dowolnego języka, który jest swobodnie dostępny w systemach Windows, OSX i Linux, aby zapewnić uczciwość między uczestnikami. Jeśli kodu nie można swobodnie uruchamiać, ale można go skompilować lub spakować w formacie, który jest, proszę również podać ten format w swojej odpowiedzi. Najlepiej, jeśli możesz skompilować kod w bardziej popularnym języku (tj. CoffeeScript -> JavaScript), zrób to.
Punktacja
Twój wynik będzie średnią liczbą zebranych jaj z dziesięciu serii. Bieg kończy się, gdy wszystkie jajka zostaną zebrane lub gdy (number of entries * 25)
minie kolej. Ręcznie upewnię się, że możliwe jest dotarcie do wszystkich jaj dla każdej mapy (poprzez ciągłe generowanie map, aż wszystkie jajka będą dostępne).
Tablica wyników
Tablica wyników zostanie dodana, gdy zostaną spełnione wszystkie następujące warunki:
- Zgłoszono co najmniej siedem ważnych zgłoszeń z wynikiem pozytywnym lub zerowym (nie oceniono)
- Od utworzenia tego wyzwania minęło co najmniej 48 godzin (UTC 14:23)
Zasady nie zmienią się w tym okresie przedkonkursowym, z wyjątkiem dodania wyjaśnień w przypadku niejasności reguły. Po utworzeniu tablicy wyników zostanie tutaj opublikowany program testujący, abyś mógł przetestować swoje wpisy. Kod testowy jest wciąż w toku, ale można go odtworzyć i działa. Oto repozytorium GitHub.
9
, nigdy nie zostanie znacząco zaatakowany. Jeśli inny gracz (B) wejdzie na to pole gracza i wygra, A zostanie przeniesiony z powrotem na jego pierwotny kwadrat (który jest taki sam). Ale teraz dochodzi do starcia, ponieważ istnieją zarówno A, jak i B, więc B musi wrócić na swój własny kwadrat. Wynik jest więc niezależny od faktycznej walki, B zawsze wraca do początkowego pola, a A zawsze pozostaje na swoim miejscu. To pozwoliłoby mi napisać jedno i drugie, które mogłoby pomóc w kolejnym przesłaniu, blokując ścieżkę dla wszystkich innych.