Dostępne wyniki końcowe
Wprowadzenie
Po mojej poprzedniej KOTH z ciężkimi motywami ( wojna fantasy , światowa pandemia ...) wróciłem z nową, lekką grą. Tym razem walczysz w sytuacji przypominającej grę planszową. Stos do góry nogami jest umieszczony na środku naprawdę dużego stołu, a ty jesteś zdeterminowany, aby zdobyć część łupu!
Słownik
Monety : Tokeny, które można odwrócić lub odpiąć.
Unflipped : Monety umieszczone na stole z wartością skierowaną w dół. Jest to domyślny stan monet.
Odwrócone : Monety umieszczone na stole z wartością skierowaną w górę.
Lokalny : odnosi się do stosu monet.
Globalny : odnosi się do stosu monet w centrum.
Zasada
Na początku gry każdy gracz zaczyna od 0 punktów i 0 monet (przerzuconych lub odpiętych). Gra jest turowa. Podczas swojej tury gracze mogą wykonać do 3 akcji wchodzących w interakcję ze stosem monet na środku stołu, własnym stosem monet lub z innymi graczami.
Kolejność gry określa się losowo na początku gry. Kolejność graczy na liście argumentów reprezentuje kolejność zakrętów i na tej liście przebiega od lewej do prawej. „Dalej” i „Poprzedni” odnoszą się odpowiednio do „po prawej stronie na tej liście” i „po lewej stronie na tej liście” z pętlą, jeśli jesteś ostatnią ze stron.
Gra trwa 50 rund lub dopóki na środku tury gracza nie ma 0 monet (oznacza to, że ukończysz 3 akcje, nawet jeśli stos jest pusty po pierwszej akcji, i możesz odłożyć monety, aby pozwolić gra będzie kontynuowana). Początkową liczbę globalnych monet określa się losowo za pomocą tego wzoru:
(2 ^ nb_players) + (nb_players * 10) - random(1 + (nb_players ^ 2))`
Każda akcja da ci punkty (lub sprawi, że stracisz trochę), a pod koniec gry każda posiadana moneta zostanie dodana do twoich punktów ( -1 za odpięcie, +2 za przerzucenie ). Gracz z najwyższym wynikiem wygrywa.
Kontroler udostępnia dane wejściowe za pomocą argumentów poleceń, a program musi wysyłać dane wyjściowe za pomocą standardowego wyjścia.
Składnia
Wkład
Za każdym razem, gdy wywoływany jest twój program, będzie on otrzymywał argumenty w następującym formacie:
Round;YourPlayerId;Coins;PlayerId_Points_Flipped_Unflipped;PlayerId_Points_Flipped_Unflipped;...
Rundy są indeksowane 1.
Przykładowe dane wejściowe
6;2;52;1_20_3_12;0_-2_0_1;2_12_1_0
Tutaj widzisz, że jest to szósta runda i jesteś graczem 2. Na środkowym stosie znajdują się 52 monety. Masz 12 punktów, 1 monetę odrzuconą i 0 monetę nieodpinaną. Punkty mogą być ujemne.
Wydajność
Musisz wydać trzy znaki (bez spacji, bez separatora), z których każdy odpowiada jednej akcji, którą wykonasz w tej turze. Kolejność znaków określa kolejność akcji. Możesz wygenerować te same działania wiele razy. Jeśli nie ma wystarczającej ilości monet, aby ukończyć akcję, wykorzysta maksymalną liczbę dostępnych monet i zlicza punkty tylko za użyte monety.
N
: Nic nie
1
rób: Weź 1 monetę ze środkowego stosu [Efekty: +1 miejscowy odpięty / -1 punkt / -1 globalny odpięty]
2
: Weź 2 monety ze środkowego stosu [Efekty: +2 lokalny odpięty / -2 punkty / -2 globalny odpięty]
3
: Weź 3 monety ze środkowego stosu [Efekty: +3 lokalne odpięte / -3 punkty / -3 globalny odpięty]
A
: Odłóż 1 monetę ze swojego stosu [Efekty: -1 lokalne rozpięte / +1 punkt / +1 globalny odpięty]
B
: Odłóż 2 monety ze stosu [Efekty: -2 lokalne odpięty / +2 punkty / +2 globalny odpięty]
C
: Odłóż 3 monety ze swojego stosu [Efekty: -3 lokalny odpięty / +3 punkty / +3 global unclipped]
X
: Usuń 1 monetę ze stosu[Efekty: -1 lokalny odpięty / 0 punkt]
Y
: Usuń 2 monety ze stosu [Efekty: -2 lokalny odpięty / 0 punkt]
Z
: Usuń 3 monety ze stosu [Efekty: -3 lokalny odpięty / 0 punkt]
R
: Obróć monety do poprzedniego gracza [Efekty: -1 punkt za otrzymane odczepienie, +2 punkty za otrzymane odrzucenie / dotyczy wszystkich graczy]
T
: Obracanie monet do następnego gracza [Efekty: -1 punkt za otrzymane odrzucenie / otrzymane / dotyczy wszyscy gracze]
F
: Odwróć 1 monetę [Efekty: -1 odepnij lokalnie / +1 odrzuć lokalnie / +2 punkt]
U
: Odepnij 1 monetę [Efekty: +1 odepnij lokalnie / -1 odrzuć lokalnie / -2 punkt]
Przykładowe dane wyjściowe
2FF
: Bierze dwie monety i rzuca dwie monety, zdobywając punkty -2 + 2 + 2 = 2 points
Jeśli dane wyjściowe są niepoprawne, kontroler przyjmie NNN
.
Kontroler
Kontroler można znaleźć na GitHub . Zawiera także dwa sampleboty napisane w Javie. Aby go uruchomić, sprawdź projekt i otwórz go w swoim Java IDE. Punkt wejścia w main
metodzie klasy Game
. Wymagana Java 8.
Aby dodać boty, najpierw potrzebujesz skompilowanej wersji dla Javy (pliki .class) lub źródeł tłumaczonych języków. Umieść je w folderze głównym projektu. Następnie utwórz nową klasę Java w players
pakiecie (możesz wziąć przykład z już istniejących botów). Ta klasa musi zostać zaimplementowana, Player
aby zastąpić metodę String getCmd()
. Zwrócony ciąg to polecenie powłoki do uruchamiania botów. Można na przykład wykonać pracę bota Ruby z tym poleceniem: return "C:\Ruby\bin\ruby.exe MyBot.rb";
. Na koniec dodaj bota do tablicy graczy na szczycie Game
klasy.
Zasady
- Boty nie powinny być pisane w celu pokonania lub wspierania określonych innych botów.
- Zapis do plików jest dozwolony. Napisz do „twojasubmissionname.txt”, folder zostanie opróżniony przed rozpoczęciem gry. Inne zasoby zewnętrzne są niedozwolone.
- Twoje zgłoszenie ma 1 sekundę na odpowiedź.
- Podaj polecenia, aby skompilować i uruchomić swoje zgłoszenia.
Obsługiwane języki
Spróbuję wesprzeć każdy język, ale musi on być dostępny online za darmo. Podaj instrukcje instalacji, jeśli nie używasz języka „głównego nurtu”.
W tej chwili mogę uruchomić: Java 6-7-8, PHP, Ruby, Perl, Python 2-3, Lua, R, node.js, Haskell, Kotlin, C ++ 11.
Ostateczne rezultaty
Oto wyniki 100 gier (punkty są sumowane):
1. BirdInTheHand: 1017790
2. Balance: 851428
3. SecondBest: 802316
4. Crook: 739080
5. Jim: 723440
6. Flipper: 613290
7. Wheeler: 585516
8. Oracle: 574916
9. SimpleBot: 543665
10. TraderBot: 538160
11. EgoisticalBot: 529567
12. RememberMe: 497513
13. PassiveBot: 494441
14. TheJanitor: 474069
15. GreedyRotation: 447057
16. Devil: 79212
17. Saboteur: 62240
Indywidualne wyniki gier są dostępne tutaj: http://pasted.co/63f1e924 (z monetami początkowymi i liczbą rund na grę).
Nagrodę w wysokości 50 reputacji otrzymuje zwycięzca: Bird In The Hand autorstwa Martina Büttnera .
Dziękujemy wszystkim za udział, do zobaczenia KOTH ~