Jako dziecko często grałem w tę grę.
Zasady
Jest dwóch graczy (nazwijmy je A i B), a każdy gracz używa swoich rąk jako broni. Istnieją trzy możliwe ruchy:
Ręce do góry, aby załadować amunicję do pistoletu.
Każdy pistolet zaczyna się pusty. Ładowanie zwiększa amunicję o jeden.
Ręce skierowane na drugiego gracza do strzału.
To zmniejsza amunicję o jeden. Musisz strzelać przynajmniej jedną jednostką amunicji.
Skrzyżowane ramiona, aby uchronić się przed strzałem.
Obaj gracze poruszają się jednocześnie. Jeśli obaj gracze strzelają w tym samym czasie, pociski trafiają się nawzajem, a gra trwa. Gra kończy się, gdy jeden z graczy strzela, a drugi ładuje amunicję.
Strzelanie i pusta broń jest uważane za oszustwo . Jeśli gracz oszukuje, podczas gdy drugi dokonuje czynności prawnej, oszust przegrywa natychmiast. Jeśli obaj gracze oszukują w tym samym czasie, gra jest kontynuowana.
Próby oszukiwania nie zmniejszają amunicji, więc nigdy nie mogą być negatywne.
Wyzwanie
Biorąc pod uwagę ruchy wykonane przez graczy A i B, dane wyjściowe, który gracz wygrał grę: 1
dla gracza A, -1
dla gracza B i 0
remisu. Możesz użyć dowolnej potrójnej wartości zwrotnej, ale musisz w odpowiedzi określić, których używasz.
Gra może:
- zakończyć bez konieczności przetwarzania wszystkich ruchów;
- nie kończą się podanymi ruchami i dlatego uważa się je za remis.
Dane wejściowe można podjąć:
- jak struny
- jako tablice / listy liczb całkowitych
- w jakikolwiek inny sposób, który nie przetwarza danych wejściowych
Pełny program lub funkcje są dozwolone. Ponieważ jest to kod-golf , wygrywa najkrótsza odpowiedź w bajtach!
Przypadki testowe
A: "123331123"
B: "131122332"
-----^ Player B shoots player A and wins.
Output: -1
A: "111322213312"
B: "131332221133"
-------^ Player B cheats and loses.
Output: 1
A: "1333211232221"
B: "1213211322221"
----------^^ Both players cheat at the same time. The game continues.
Output: 0
A: "12333213112222212"
B: "13122213312232211"
| || ^---- Player A shoots player B and wins.
^-------^^------ Both players cheat at the same time. The game continues.
Output: 1
Odpowiedzi:
Galaretka,
333224 bajtówDrukuje 5 zamiast -1 i 7 zamiast 1 . Wypróbuj online! lub zweryfikuj wszystkie przypadki testowe .
Jak to działa
źródło
Pyth,
48464947 bajtówWypróbuj tutaj!
Dzięki @isaacg za zapisanie
24 bajtów!Pobiera dane wejściowe jako 2-krotkę z listą ruchów gracza A jako pierwszy i ruchów gracza B. jako drugim. Wydajność jest taka sama jak w wyzwaniu.
Wyjaśnienie
Krótki przegląd
[cheating win, fair win]
z możliwymi wartościami-1, 0, 1
dla każdej z nich, aby wskazać, czy gracz wygrał w tym momencie (-1, 1
) lub czy gra toczy się dalej (0
)[0,0]
, i wziąć jej pierwszy niezerowy element wskazujący zwycięzcęPodział kodu
źródło
m|Fd
jest taki sam jak|M
.M
. Btw: Problem sprzecznych zmiennych lambda, o którym rozmawialiśmy na czacie, kosztuje mnie tutaj kilka bajtów: P,1 2
jest taki sam jakS2
Python, 217 bajtów
Objaśnienie : Pobiera A i B jako listy liczb całkowitych. Po prostu przechodzi przez każdą parę ruchów, dodaje lub odejmuje 1 w razie potrzeby i zwraca, gdy ktoś zdradzi lub wygra. Robi to samo dwa razy, używając innej pętli for, raz dla ruchu A i raz dla ruchu B. Dodaje 1, jeśli x spadnie poniżej 0 do -1.
źródło
Java,
226212200196194 bajtów-14 bajtów poprzez zmianę kolejności logiki
-12 bajtów dzięki Panu Publicowi wskazującemu, jak wykorzystać trójskładnikową logikę strzelania
-4 bajty poprzez wciśnięcie logiki obciążenia w jedno zwarcie, jeśli
-2 bajty, ponieważ
==1
===<2
gdy sygnał wejściowy może być tylko1
,2
,3
Użycie i wersja wcięta:
Nie tak prosta implementacja zasad gry, ale prosta. W każdym cyklu wykonuje następujące operacje:
r
kierunku przegraniar
nie jest0
, zwróć wartość, ponieważ ktoś oszukiwałx
jest zmienną fikcyjną używaną do tego, aby kompilator pozwolił mi użyć wyrażenia trójskładnikowego.Zaraz, Java jest SHORTER niż Python?
źródło
w==2&&m<1?r--:m++
int x=w==2?m<1?r--:r:m--;
nadal używaj x (ponieważ jest to tylko zmienna fikcyjna, aby trójka działała) jak:x=v==2?n<1?r++:r:n--;