Utwórz funkcję, która pobierze dwa ciągi jako dane wejściowe i zwróci jedno wyjście dla wyniku. Najpopularniejsza odpowiedź wygrywa.
Zasady Rock-paper-nożyce-jaszczurki-Spock są następujące:
- Nożyce do cięcia papieru
- Papier obejmuje kamień
- Skała miażdży jaszczurki
- Jaszczurka zatruwa Spocka
- Spock rozbija nożyczki
- Nożyce dekapitują jaszczurki
- Jaszczurka je papier
- Papier obala Spocka
- Spock paruje skałę
- Skała łamie nożyce
Dane wyjściowe dla każdego możliwego przypadku wejściowego to:
winner('Scissors', 'Paper') -> 'Scissors cut Paper'
winner('Scissors', 'Rock') -> 'Rock breaks Scissors'
winner('Scissors', 'Spock') -> 'Spock smashes Scissors'
winner('Scissors', 'Lizard') -> 'Scissors decapitate Lizard'
winner('Scissors', 'Scissors') -> 'Scissors tie Scissors'
winner('Paper', 'Rock') -> 'Paper covers Rock'
winner('Paper', 'Spock') -> 'Paper disproves Spock'
winner('Paper', 'Lizard') -> 'Lizard eats Paper'
winner('Paper', 'Scissors') -> 'Scissors cut Paper'
winner('Paper', 'Paper') -> 'Paper ties Paper'
winner('Rock', 'Spock') -> 'Spock vaporizes Rock'
winner('Rock', 'Lizard') -> 'Rock crushes Lizard'
winner('Rock', 'Scissors') -> 'Rock breaks Scissors'
winner('Rock', 'Paper') -> 'Paper covers Rock'
winner('Rock', 'Rock') -> 'Rock ties Rock'
winner('Lizard', 'Rock') -> 'Rock crushes Lizard'
winner('Lizard', 'Spock') -> 'Lizard poisons Spock'
winner('Lizard', 'Scissors') -> 'Scissors decapitate Lizard'
winner('Lizard', 'Paper') -> 'Lizard eats Paper'
winner('Lizard', 'Lizard') -> 'Lizard ties Lizard'
winner('Spock', 'Rock') -> 'Spock vaporizes Rock'
winner('Spock', 'Lizard') -> 'Lizard poisons Spock'
winner('Spock', 'Scissors') -> 'Spock smashes Scissors'
winner('Spock', 'Paper') -> 'Paper disproves Spock'
winner('Spock', 'Spock') -> 'Spock ties Spock'
Dodatkowe wyzwanie sugerowane przez @Sean Cheshire: Zezwalaj na listy niestandardowe, takie jak te z tej witryny. Z listą n-pozycji, przedmiot traci do (n-1) / 2 poprzedniej i wygrywa z (n-1) / 2 następną
popularity-contest
dansalmo
źródło
źródło
Odpowiedzi:
APL
Wyjście dokładnie tak, jak wymagane we wszystkich przypadkach, w tym remis / remisy. Brak tabeli odnośników, z wyjątkiem faktycznych słów.
Możesz spróbować na http://ngn.github.io/apl/web/
APL po prostu wie!
źródło
SED
źródło
Oto ogólne rozwiązanie oparte na łańcuchu reguł o dowolnym rozmiarze. Dokonuje poprawnej wielkiej litery dla prawidłowej nazwy „Spock”, a także dopuszcza reguły określania „powiązania” zamiast „powiązań” dla obiektów w liczbie mnogiej.
Wyniki:
źródło
rules
można użyć ciągu wielowierszowego zamiast dosłownego konkatenacji. Pozwala to usunąć zbędne nawiasy.Pyton
źródło
Pyton
źródło
Rubinowe, arytmetyczne podejście
Aktorów można ustawić w szeregu w taki sposób, aby każdy aktor
a[i]
wygrał z aktoramia[i+1]
ia[i+2]
, na przykład, modulo 5:Następnie dla aktora
A
z indeksemi
możemy zobaczyć, jak dopasowuje się do aktoraB
z indeksemj
, wykonującresult = (j-i)%5
: Wynik1
i2
oznacza, że aktor A wygrał z aktorem odpowiednio o 1 lub 2 miejsca przed nim;3
i4
podobnie oznacza, że przegrał z aktorem stojącym za nim w szeregu.0
oznacza remis. (Zauważ, że może to zależeć od języka; w Ruby(j-i)%5 == (5+j-i)%5
również, kiedyj>i
.)Najbardziej interesującą częścią mojego kodu jest użycie tej właściwości do znalezienia funkcji sortującej indeksów dwóch aktorów. Zwracana wartość będzie wynosić -1, 0 lub 1, tak jak powinna :
Oto cała sprawa:
źródło
Pyton
Korzystanie ze skomplikowanego słownika.
źródło
return(' '.join([p,'tie' + 's'*(p[1]!='c'),q]))
otrzyma czasownik poprawny.DO#
Założenia
Przeciwnicy są ułożeni w szereg n-przedmiotów, w których gracze pokonują (n-1) / 2 graczy przed nimi i przegrywają z (n-1) / 2 graczami za nimi. (W przypadku list o równej długości gracz przegrywa z ((n-1) / 2 + 1) graczami za nimi)
Akcje odtwarzacza są rozmieszczone w tablicy, w której akcje mieszczą się w przedziale od [(indexOfPlayer * (n-1) / 2)] do [(indexOfPlayer * (n-1) / 2)) + (n-2) / 2 - 1 ].
Dodatkowe informacje
CircularBuffer<T>
to opakowanie wokół tablicy, aby utworzyć „nieskończenie” adresowalną tablicę.IndexOf
Funkcja zwraca indeks elementu w rzeczywistych granice tablicy.Klasa
Przykład
źródło
Python, jedno-liniowy
źródło
.split(', ')
i nie musisz razem blokować reguł.Tylko mała rzecz, którą wymyśliłem:
Tutaj reguły to plik zawierający wszystkie podane reguły.
źródło
Pyton
Zainspirowany kodem APL @ Tobia.
Wyniki:
źródło
C ++
Trochę testu
źródło
JavaScript
źródło
JavaScript
Widzę, że to nie jest konkurs golfowy, ale zanim znalazłem ten wątek, bawiłem się tą łamigłówką, więc proszę bardzo.
Oto (standardowa) wersja js składająca się z 278 znaków:
Lub wykorzystujący funkcje E6 (prawdopodobnie działa tylko w Firefoksie) w 259 znakach:
źródło