Wskazówka: Ta king-of-the-Hill wyzwanie zakończyła. Oznacza to, że zielony znacznik wyboru, który został przyznany C5H8NNaO4 za ich wejście Obserwator nie zostanie przeniesiony do żadnej nowej odpowiedzi.
Nadal możesz przesyłać nowe zgłoszenia, ale mogą występować opóźnienia w nowych turniejach, ponieważ nie sprawdzam już aktywnie nowych zgłoszeń.
Wprowadzenie
W tym wyzwaniu grasz w grę zręcznościową zatytułowaną The Ultimate Samurai Showdown Ultimate Edition Special Version 2.0 X Alpha Omega Turbo (lub po prostu Ultimate Samurai Showdown ). Twoi przeciwnicy? Nikt inny niż inni członkowie Programming Puzzles & Code Golf!
Jak można się spodziewać po zręcznościowej grze PPCG, nie grasz bezpośrednio w Ultimate Samurai Showdown , ale raczej piszesz program, który zagra dla Ciebie. Ten program będzie walczył z programami przesłanymi przez innych użytkowników w pojedynkach jeden na jednego. Najbardziej wykwalifikowany program zostanie ukoronowany Ostatecznym Samurajem PPCG i otrzyma zielony tyk legendy.
Opis gry
W tej części opisano mechanikę gry.
Warunek zwycięstwa
Mecz składa się z dwóch samurajów , które są skierowane przeciwko sobie nawzajem. Każdy samuraj rozpoczyna każdy mecz 20 punktami wytrzymałości i 1 honorem . Samuraj wygrywa, jeśli jego przeciwnik nie żyje i nadal żyje. Istnieją dwie metody śmierci samuraja:
- Jeśli punkty wytrzymałości samuraja spadną do 0, umrze.
- Jeśli samuraj przyniesie swój honor poniżej 0, zostanie on powalony przez bogów za nieuczciwe działanie w pojedynku.
Powalenie przez bogów ma wyższy priorytet niż zmniejszenie punktów życia do 0, więc w sytuacji, gdy jeden samuraj ma 0 punktów zdrowia, a drugi za -1 honoru, samuraj z 0 punktami zdrowia wygra. W sytuacji, gdy obaj samurajowie mają honor -1, obaj zostają powaleni przez bogów, a gra kończy się remisem.
Mecz składa się z maksymalnie 500 tur . Jeśli wszystkie 500 tur minie, a mecz nie zostanie rozstrzygnięty (żaden samuraj nie umarł), bogowie się nudzą i powalają obu samurajów, co powoduje remis.
działania
W każdej turze samuraj musi wykonać dokładnie jedną z następujących czynności:
W
Samurajowie będą czekać i nie wykonywać żadnych działań. To sprawia, że wygląda fajnie, ale nie pomaga mu pokonać przeciwnika. Jest to również akcja domyślna.
B
Samurajowie pokłonią się przeciwnikowi w sposób honorowy. To podoba się bogom, dzięki czemu samurajowie zdobędą 1 Honor. Honor jest niezbędny do sukcesu twojego samuraja, ponieważ Honor jest zasadniczo „zasobem” w tej grze - wszystkie ruchy oprócz B
i W
mogą zmniejszyć Honor. Ponadto, jeśli samuraj zyska 7 Honoru lub więcej, przyznany mu zostanie Miecz Bogów . Konsekwencje tego są opisane poniżej.
Jednak ukłon w stronę przeciwnika pozostawia cię otwartym, jeśli przeciwnik zdecyduje się cię uderzyć mieczem, więc bądź ostrożny, kiedy wybierzesz ukłon.
G
Samurajowie wejdą do pozycji obronnej i będą strzegli się wszelkich uderzeń mieczem. Ten ruch z powodzeniem zablokuje wszystkie ciosy mieczem, nawet te wykonane Mieczem Bogów .
Jednak bogowie patrzą na zbyt defensywnego samuraja, więc ten ruch pochłonie 1 Honor, jeśli akcja samuraja w bezpośrednio poprzedzającej turze również się strzegła. W przeciwnym razie nie konsumuje Honoru.
I
Samuraj spróbuje uderzyć przeciwnika szybkim wyciągnięciem miecza z pochwy. Jeśli samuraj ma 7 Honoru lub więcej, użyje Miecza Bogów zamiast swojego zwykłego miecza. Ten ruch pochłania 1 Honor.
Szybki remis to szybkie uderzenie, które pokona wolniejsze ataki z góry, jednak przegra z parami. Jeśli uderzenie zakończy się powodzeniem, zadaje 1 obrażenie lub 2 obrażenia Mieczem Bogów .
P
Samuraj spróbuje sparować każdy nadchodzący atak, a następnie rozpocznie własny atak. Jeśli samuraj ma 7 Honoru lub więcej, użyje Miecza Bogów zamiast swojego zwykłego miecza. Ten ruch pochłania 1 Honor.
Parowanie jest dobrym manewrem przeciwko szybkim atakom, ale zostanie obezwładnione przez wolniejsze ataki z góry. Jeśli uderzenie zakończy się powodzeniem, zadaje 1 obrażenie lub 2 obrażenia Mieczem Bogów .
O
Samuraj będzie próbował uderzyć przeciwnika wolniejszym atakiem z góry. Jeśli samuraj ma 7 Honoru lub więcej, użyje Miecza Bogów zamiast swojego zwykłego miecza. Ten ruch pochłania 1 honor.
Uderzenie ogólne może obezwładnić parowania, ale przegra z szybkimi uderzeniami. Jeśli uderzenie zakończy się powodzeniem, zadaje 1 obrażenie lub 2 obrażenia Mieczem Bogów .
Miecz Bogów
Samuraj z Honorem, który wynosi 7 lub więcej, zyskuje możliwość użycia Miecza Bogów . Jeśli jego Honor spadnie poniżej 7, umiejętność użycia Miecza Bogów zostanie mu odebrana. Sword of the Gods zajmuje 2 obrażenia zamiast 1.
Sword of the Gods nie pozwala pokonać strajk strajk miecz, że nie będzie zwyczajnie pokonać. Na przykład, sparowanie Miecza Bogów nadal przegrywa ze zwykłym uderzeniem z góry, a szybki los Miecza Bogów nie obezwładni zwykłego szybkiego ciosu . Rzeczywiście, tak zwany Miecz Bogów nie jest tak potężny - być może jest to kosmiczny żart grany przez bogów ...
Tabela interakcji
Poniższy fragment stosu zawiera tabelę, w której wyraźnie wymieniono wszystkie możliwe wyniki różnych kombinacji działań, które może podjąć dwóch samurajów. Aby go wyświetlić, kliknij „Pokaż fragment kodu”, a następnie „Uruchom fragment kodu”.
Komunikacja programowa
Aby ułatwić przeprowadzenie turnieju, napisano program kontrolny, który ma pełnić rolę „bogów” - przechowuje zapisy honoru i zdrowia oraz odpowiednio uderza w samuraja. W tej sekcji opisano, w jaki sposób twój program będzie komunikował się z programem kontrolera.
Opis wejścia
Program kontrolny wywoła twój program z linii poleceń w następujący sposób:
<command> <history> <enemy_history> <your_health> <enemy_health> <your_honour> <enemy_honour>
gdzie:
<command>
to polecenie wymagane do uruchomienia programu. Na przykład, jeśli twój program znajduje się w plikusuper_sentai.pl
, prawdopodobnie jest to polecenieperl super_sentai.pl
.<history>
to historia twoich ruchów. Na przykładWWBP
oznaczałoby to, że czekałeś dwa razy, ukłoniłeś się raz i sparowałeś raz.<enemy_history>
to historia ruchów wykonanych przez twojego wroga. Na przykładBBBI
oznaczałoby to , że twój wróg ukłonił się trzy razy i wykonał jeden szybki remis.<your_health>
jest twoje obecne zdrowie.<enemy_health>
to aktualne zdrowie wroga.<your_honour>
jest waszym obecnym honorem.<enemy_honour>
to obecny honor wroga.
W pierwszej turze znaki history
i enemy_history
będą puste, więc program zostanie wywołany z czterema ostatnimi argumentami:
<command> <your_health> <enemy_health> <your_honour> <enemy_honour>
Przygotuj się na to!
Bystrzy czytelnicy mogą zauważyć, że cztery argumenty zapewniające honor i zdrowie obu samurajów są w pewnym stopniu zbędne; ponieważ jest to doskonała gra informacyjna, honor i zdrowie samurajów można określić tylko na podstawie historii.
Wartości te podano dla wygody, abyś nie musiał analizować argumentów historii. To powinno się przydać przy wdrażaniu prostych strategii, takich jak nie atakowanie, gdy twój Honor wynosi 0.
Opis wyjścia
Aby wybrać akcję, Twój program powinien jedno wyjście W
, B
, G
, I
, P
, lub O
standardowe wyjście, w zależności od tego, co akcja chcesz zrobić. Jeśli twój program nie wypisze niczego w ciągu 1000ms, zostanie zakończony, a twój program będzie traktowany tak, jakby został wypisany W
.
Jeśli twój program wypisuje więcej niż jedną literę, brana będzie pod uwagę tylko pierwsza litera - więc wypisywanie Parry
będzie takie samo jak wypisywanie P
.
Jeśli wynik pierwszej litery programu nie jest żadną z opcji wymienionych powyżej, domyślnie będzie to W
.
Format zgłoszenia
Prześlij program jako odpowiedź na ten post. Możesz przesłać wiele programów. Jeśli przesyłasz wiele prostych programów, zalecamy przesłanie ich jako pojedynczej odpowiedzi; jeśli przesyłasz wiele złożonych programów, zalecamy przesłanie ich jako osobnych odpowiedzi. Po pomyślnym dodaniu twojego programu / programów do turnieju, dokonam zatwierdzenia do repozytorium git z twoim zgłoszeniem (link poniżej).
Jeśli napotkam problemy, które uniemożliwiają dodanie twojego programu do turnieju, zostawię komentarz na temat twojego zgłoszenia wskazujący problem.
W zgłoszeniu należy uwzględnić następujące informacje:
- Czytelna dla człowieka nazwa twojego programu, do użycia w tablicach wyników. Spacje są tutaj dozwolone; przecinki i znaki Unicode nie są.
- Język, w którym napisany jest Twój program. Unikaj pisania w dziwnych, trudno dostępnych językach, takich jak TinyMUSH.
- Krótkie streszczenie twojego programu. Może to być opis działania programu lub po prostu tekst smaku na temat programu (jeśli chcesz być całkowicie tajny), a może jedno i drugie.
- Polecenia wymagane do uruchomienia programu. Na przykład, jeśli piszesz swoje zgłoszenie w Javie o nazwie
example.java
, dostarczasz instrukcji kompilacji,javac example.java
a następnie instrukcji uruchamianiajava example
. - Kod źródłowy programu.
Aby pomóc w przesłaniu, udostępniam szablon zgłoszenia, który można znaleźć tutaj . Szablon sprawia, że przesyłanie wygląda ładniej. Gorąco zachęcam do korzystania z niego.
Podaję również dwa przykładowe wpisy. Mimo że przykładowe zgłoszenia będą brały udział w rundzie robin, ich głównym celem jest wyjaśnienie formatów przesyłania i wprowadzania / wysyłania do turnieju, a nie poważna rywalizacja o tytuł Ultimate Samurai.
Struktura turnieju
W tej części opisano, w jaki sposób odbędzie się turniej między uczestnikami.
Program kontroli
Program sterujący jest napisany w Pythonie 2 i można go znaleźć w repozytorium Ultimate Samurai Showdown Github . Jeśli chcesz go uruchomić samodzielnie, instrukcje, jak go uruchomić, znajdują się w pliku README.md w łączu. Jednak tylko turnieje rozgrywane na moim komputerze będą oficjalne, aby uniknąć różnic sprzętowych wpływających na wyniki turniejów.
Program sterujący zostanie uruchomiony na komputerze przenośnym z systemem Arch Linux. Ma procesor Intel Core i7 i 8 GB pamięci RAM. Spróbuję uruchomić wszystkie wpisy na moim komputerze, ale byłbym bardzo wdzięczny, jeśli unikniesz języków, do których nie można uzyskać swobodnego dostępu (ponieważ nie wiąże się to z żadnymi kosztami pieniężnymi).
System oceniania
System punktacji to okrągły robin. Każdy program rozegra osiem meczów z każdym innym programem. Wygrana daje programowi 1 punkt, strata bez punktów, a remis 0,5 punktu. Program z najwyższym wynikiem wygrywa. Jeśli dojdzie do remisu, pojedynkuję dwa najlepsze programy ze sobą, aby ustalić zwycięzcę.
Liczba odtworzeń każdego programu może zostać zmniejszona z 8, jeśli liczba uczestników jest bardzo duża. Dodam tutaj notatkę, jeśli to nastąpi.
Będę uruchamiał okrągły robin wiele razy, gdy publikowane są nowe zgłoszenia, ale liczy się tylko najnowszy okrągły robin.
Dyskwalifikacje
Możliwe jest, że Twój program zostanie zdyskwalifikowany z turnieju. Dyskwalifikacja może nastąpić, jeżeli:
- Twój program nie kompiluje się ani nie uruchamia;
- Twój program jest strategicznym duplikatem innego programu (tzn. Implementuje dokładnie taką samą strategię jak inny program);
- Twój program próbuje sabotować inne programy, modyfikując kod kontrolera, kod innego programu itp .;
- Twój program próbuje wykorzystać błąd w kodzie kontrolera. Zamiast wykorzystywać błędy, powinieneś otworzyć problem w repozytorium git, skomentować go lub pingować na czacie.
Wcześniejsze wyniki
Szczegółowe wyniki wszystkich turniejów są dostępne na stronie wiki .
Ostatni turniej został ukończony w dniu 17.07.2015, 07:20. Oto podsumowanie wyników:
The Observer: 209.0
Coward: 203.0
Monk: 173.0
Elephant Warrior: 157.0
Iniqy: 157.0
Agent 38: 144.0
Ninja: 138.0
Meiyo Senshi: 138.0
Kakashi: 136.0
Yoshimitsu: 131.0
Hermurai: 121.0
Warrior Princess: 120.0
Gargoyle: 119.5
The Honourable: 119.0
Hebi: 118.5
Predictor: 116.0
Whack-a-mole: 107.0
The Fool: 106.0
The Prophet: 105.0
Copy-san: 97.0
YAGMCSE: 80.0
The Waiter: 66.0
Swordsman: 43.0
Spork Holder: 32.5
Blessed Samurai: 27.5
Attacker: 27.0
The Terminator: 17.0
Master Yi: 16.0