W przyszłości, gdy podróżowanie w czasie (w skrócie TT) będzie powszechne, rzucanie monetami stanie się poważnym sportem umysłowym. Aby przygotować się na przyszłość, tworzymy konkurs na programy, w których podróże w czasie będą się naprawdę działo z punktu widzenia zgłoszeń.
Konkurs jest królem wzgórza w stylu robota okrągłego, polegającym na rzucaniu monetami między klasami Java.
Zasady losowania monet
- Jest dwóch graczy i 100 rund.
- W każdej rundzie rzuca się monetą i na podstawie wyniku jeden z graczy zdobywa 1 punkt. Każdy gracz ma 50% szans na zdobycie punktu.
- Po podrzuceniu obaj gracze mają szansę kontrolować czas, pociągając za dźwignie.
- Jeśli pociągniesz niebieską dźwignię (cofnij korek) TT nie będzie możliwe w rundzie, w której użyto dźwigni ani w żadnej wcześniejszej rundzie. Próby przejścia do tych rund TT nie przyniosą efektu.
- Jeśli pociągniesz czerwoną dźwignię (rewerter) , spróbujesz cofnąć czas do poprzedniej rundy. Jeśli się powiedzie , pamięć przeciwnika zostanie przywrócona do pamięci przed wybraną rundą, a wyniki losowania rozpoczynające się od wybranej rundy również zostaną usunięte . Jedynym możliwym znakiem dla przeciwnika na temat TT będzie liczba niewykorzystanych dźwigni, które nie zostaną cofnięte.
- Każdy gracz ma 5 niebieskich i 20 czerwonych nieużywanych dźwigni na początku meczu. TT nie wpływają na te dźwignie.
- Jeśli na końcu setnej rundy nie wydarzy się TT, gra się kończy, a gracz z wyższym wynikiem wygrywa.
Detale
- Rundy mają indeksowanie 1 (od 1 do 100).
- Przed rundą
x
otrzymujesz liczbę dostępnych niebieskich i czerwonych dźwigni, rzut monetą aż do turyx
(włącznie) i pamięć twojej (ostatniej)x-1
rundy. - Pociągnięcie niebieskiej dźwigni w rundzie
x
zatrzymuje wszystkie TT, które mają cel w rundziex
lub wcześniej (blokuje TT, jeśli zdarzy się również w tej samej dokładnej rundzie). - Powrót do rundy
x
oznacza, że następna runda będzie rundąx
. - Jeśli obaj gracze zdecydują się powrócić na koniec rundy, czas zostanie przywrócony do wcześniejszego celu, który nie jest blokowany. Gracz (y), którzy próbowali powrócić do tego czasu, zachowają swoją pamięć.
Szczegóły techniczne
- Powinieneś napisać klasę Java implementującą dostarczony interfejs Bot.
- Dodaj swojego bota do projektu.
- Dodaj instancję swojego Bota do
Bot
plikuController.java
. - Twoja klasa nie powinna przechowywać informacji między rozmowami . (W większości przypadków posiadanie tylko
final
zmiennych poza funkcjami spełnia to wymaganie). - Możesz przekazać kontrolerowi informacje w
memory
polu zwracanegoAction
obiektu. Zostanie ci to zwrócone w następnej turze, jeśli TT się nie wydarzyło. Jeśli zdarzy się TT, otrzymasz odpowiednią wcześniejszą pamięć. - Możesz użyć
totalScore()
metodyGame
klasy, aby uzyskać wynik ciągu historii.
Protokół
Na każdym kroku twoja
takeTurn(...)
metoda jest wywoływana z 5 argumentami:- liczba nieużywanych niebieskich dźwigni
- liczba nieużywanych czerwonych dźwigni
- historia losowania monet, ciąg składający się z 1 i 0 oznaczających twoje wygrane i przegrane w poprzednich rundach. Pierwszy znak odpowiada losowaniu pierwszej monety. (W pierwszej rundzie długość łańcucha będzie wynosić
1
.) - ciąg, twoja pamięć przechowywana z poprzedniej rundy
- indeks oparty na 1 tej rundzie
Za każdym razem twoja metoda zwraca
Action
obiekt zawierającyliczba całkowita w
move
polu opisującym twoje działanie:0
za brak działania-1
pociągnąć niebieską dźwignię i zablokować TT przechodzące przez tę rundę- dodatnia liczba całkowita
x
, nie większa niż bieżąca runda, aby pociągnąć czerwoną dźwignię i spróbować wrócić do rundyx
- Nieprawidłowe liczby całkowite są traktowane jako
0
.
ciąg zawierający twoją pamięć z tej rundy, którą chcesz zachować. Pamiętaj, że przechowywanie pamięci nie jest kluczową częścią wyzwania . Możesz dokonywać dobrych wpisów bez zapisywania użytecznych danych w ciągu. W pierwszej rundzie łańcuch będzie pusty.
Twoja metoda nie powinna zająć średnio więcej niż 10 ms na rundę w meczu.
- Regularne niedotrzymywanie terminu skutkuje dyskwalifikacją.
Punktacja
- Zwycięstwo w meczu daje 2 punkty, a remis - 1 punkt dla obu graczy. Strata nie daje punktów.
- Wynik bota będzie łączną liczbą punktów, które zebrał.
- Liczba meczów rozegranych między każdą parą zawodników będzie zależeć od liczby zgłoszeń i ich prędkości.
Dwa proste boty przykładowe są publikowane jako odpowiedzi.
Kontroler i kilka pierwszych botów są dostępne tutaj .
Wyniki testu z botami przesłanymi do 3 listopada .:
Wyniki ogółem:
Oldschool: 3163
Random: 5871
RegretBot: 5269
Nostalgia: 8601
Little Ten: 8772
Analyzer: 17746
NoRegretsBot: 5833
Oracle: 15539
Deja Vu: 5491
Bad Loser: 13715
(Kontroler jest oparty na Cat Catcher Challenge . Dziękujemy za @flawr, który jest dla niego bazą.)
Bonus: ładny 6-minutowy film oparty na podobnej koncepcji.
If you pull a blue lever (revert stopper) no TT is possible to the round the lever was used or any earlier round anymore. TT's attempting to go to these rounds will have no effect.
If you pull a blue lever (revert stopper) no TT is possible through that round anymore. TT's attempting to go through the round will have no effect.
Co „przechodzi przez rundę”?