Wyzwanie związane z odniesieniem do Star Trek tuż po 4 maja może być zaskoczone, ale proszę bardzo.
Ty, Luke, Anakin, Palpatine, Yoda i Han Solo uczestniczycie w szalonym turnieju rocka, papieru, nożyczek, jaszczurki i Spocka.
Problem polega na tym, że możesz używać tylko stałej kolejności ruchów. Jeśli twoje zamówienie to „R”, musisz używać Skały, dopóki nie przegrasz lub nie wygrasz ze wszystkimi. Jeśli twoje zamówienie to RRV, musisz użyć 2 kamieni, a następnie Spocka i powtarzać, dopóki nie wygrasz lub przegrasz.
Luke, Anakin, Palpatine, Yoda i Han Solo złożyli odpowiednie zamówienia, a Ty jako ekspert hakerów dostałeś swoje zamówienia!
Mając tę wiedzę, musisz zaprojektować swoje zamówienie na turniej. Ponieważ każdy chce wygrać, musisz stworzyć takie zamówienie, aby wygrać turniej, pokonując wszystkich. Ale może to nie być możliwe we wszystkich okolicznościach.
W przypadku możliwego zwycięskiego zamówienia wydrukuj je. Jeśli nie ma możliwości wygrania, wydrukuj -1 (lub 0 lub Fałsz lub „niemożliwe”)
Dane wejściowe : lista 5 zamówień
Wyjście : pojedyncze zamówienie lub -1
Przykładowe wejście 1
R
P
S
L
V
Przykładowe dane wyjściowe 1
-1
Wyjaśnienie 1
Bez względu na to, co zagrasz w swoim pierwszym ruchu, będzie co najmniej jedna osoba, która cię pokona, dlatego nie można wygrać.
Przykładowe wejście 2
RPS
RPP
R
SRR
L
Przykładowe wyjście 2
RPSP
Wyjaśnienie 2
Kiedy grasz w Rock w pierwszym ruchu, ostatecznie pokonujesz „L” i „SRR” i remisujesz z resztą. To dlatego, że Jaszczurka i Nożyce przegrywają z Kamieniem. Kiedy następnie zagrasz w Paper, pokonasz „R” i remisujesz z pozostałymi 2. To dlatego, że Rock przegrywa z Paper. Gdy następnie zagrasz w nożyczki, wygrasz przeciwko „RPP”, gdy Scissor pokona papier.
W końcu pokonasz „RPS” swoim Paper, ponieważ Paper pokonuje Rock.
Oto lista notacji (możesz użyć dowolnych 5 literałów, ale proszę podać w swojej odpowiedzi):
R : Rock
P : Paper
S : Scissor
L : Lizard
V : Spock
Oto lista wszystkich możliwych wyników:
winner('S', 'P') -> 'S'
winner('S', 'R') -> 'R'
winner('S', 'V') -> 'V'
winner('S', 'L') -> 'S'
winner('S', 'S') -> Tie
winner('P', 'R') -> 'P'
winner('P', 'V') -> 'P'
winner('P', 'L') -> 'L'
winner('P', 'S') -> 'S'
winner('P', 'P') -> Tie
winner('R', 'V') -> 'V'
winner('R', 'L') -> 'R'
winner('R', 'S') -> 'R'
winner('R', 'P') -> 'P'
winner('R', 'R') -> Tie
winner('L', 'R') -> 'R'
winner('L', 'V') -> 'L'
winner('L', 'S') -> 'S'
winner('L', 'P') -> 'L'
winner('L', 'L') -> Tie
winner('V', 'R') -> 'V'
winner('V', 'L') -> 'L'
winner('V', 'S') -> 'V'
winner('V', 'P') -> 'P'
winner('V', 'V') -> Tie
To jest golf golfowy , więc wygrywa najmniej bajtów.
PS: Daj mi znać, jeśli potrzebujesz więcej przypadków testowych.
Odpowiedzi:
Galaretka , 29 bajtów
Monadyczny link, który akceptuje listę liczb całkowitych (z których każda jest strategią przeciwnika), która daje listę list liczb całkowitych - z których każda jest strategią wygrywającą (więc pusta lista, jeśli żadna nie jest możliwa).
(Wystarczy dodać,
Ḣ
aby uzyskać tylko jedną listę strategii lub,0
jeśli to niemożliwe).Wypróbuj online! (formaty stopek, aby zawsze wyświetlać listy)
Lub wypróbuj wersję mapowaną na litery (w której strategie są podejmowane i wyświetlane w osobnych wierszach za pomocą
RPSVL
notacji).W jaki sposób?
Liczby są wybierane w taki sposób, że każda, która jest liczbą nieparzystą większą niż inny moduł pięciu wygranych (tj. Są ponumerowane, przechodzą wokół krawędzi wpisanego pięciokąta rzutów).
Kod odtwarza każdą strategię w stosunku do każdej strategii (włączając siebie) w celu uzyskania dwukrotnie większej liczby rzutów niż najdłuższa strategia, aby zapewnić znalezienie przegranych, którzy zatrzymają tych, którzy nie zostaną pokonani. Wynikowa lista strategii będzie zawierać pojedynczą strategię, jeśli zostanie zwycięzcą; brak strategii, jeśli nie byłoby zwycięzcy; lub wiele strategii, jeśli są losowani gracze. Następnie do każdej z tych strategii dołączany jest zwycięski zestaw ruchów.
źródło
ZLḤ
goLÄ
.Ɗ
w kodzie nie robi nawet tego, co mogłeś sobie wyobrazić - formuje każdy tak, jak własną długość, a następnie zbiera sumy tych wyników, więc również porównuje niepoprawne wartości. Spróbuj tego na przykład - pobiera[[1,2,3,4,5],[6,7],[8]]
, formuje każdy o długość całej listy (3), aby uzyskać,[[1,2,3],[6,7,6],[8,8,8]]
a następnie dokonuje akumulacji, aby uzyskać[[1,1+2,1+2+3],[6,6+7,6+7+8],[8,8+8,8+8+8]]
=[[1,3,6],[6,13,19],[8,16,24]]
.JavaScript (ES6),
122 115112 bajtówPobiera dane wejściowe jako tablicę ciągów cyfr z:
Wypróbuj online!
W jaki sposób?
Jest to pierwsze wyszukiwanie: najpierw próbujemy wszystkich ruchów na danym etapie, aby sprawdzić, czy możemy wygrać grę. Jeśli nie możemy teraz wygrać, staramy się dodać kolejny ruch do każdego nie-przegranego ruchu.
gdzie
and
ixor
są operatorami bitowymi.Skomentował
źródło
test(['P','P','S','P','P'])
odpowiedź powinna brzmieć „SR” lub „SV”.R ,
213190 bajtów-23 bajty dzięki Giuseppe.
Wypróbuj online!
Jeśli istnieje rozwiązanie, generuje je. Jeśli nie ma rozwiązania, wyświetla wiersz
NA
. Jeśli ten format wyjściowy jest nie do przyjęcia, mogę go zmienić kosztem kilku bajtów.Ruchy są kodowane jako 1 = R, 2 = S, 3 = P, 4 = L, 5 = V, dzięki czemu macierz wyników jest
(0 = brak zwycięzcy; 1 = gracz 1 wygrywa; 2 = gracz 2 wygrywa)
Górną granicą długości rozwiązania, jeśli istnieje, jest miejsce, w
n=sum(lengths(L))
którymL
znajduje się lista ruchów przeciwników. Kod tworzy wszystkie możliwe strategie długościn
(przechowywane w macierzyv
), wypróbowuje je wszystkie i wyświetla wszystkie zwycięskie strategie.Zauważ, że ta wartość
n
powoduje, że kod jest bardzo wolny na TIO, więc zapisałem na stałe w TIO,n=4
co jest wystarczające dla przypadków testowych.W pierwszym przypadku testowym wynikiem jest
odpowiadające rozwiązaniu RLSL.
W drugim przypadku testowym wynikiem jest
co oznacza, że nie ma rozwiązania.
Objaśnienie poprzedniej wersji (zaktualizuje się, gdy będę mógł):
Konieczne
which
jest pozbycie się NA, które występują, gdy dwóch graczy losuje na zawsze.Nie jestem przekonany, że jest to najbardziej skuteczna strategia. Nawet jeśli tak, jestem pewien, że kod dla
m
golfa może być dość golfowy.źródło
lengths()
aliasy są zawsze zwracane4
?v
...lengths
n=4
Emacs Lisp, 730 bajtów
Nie znalazłem internetowego tłumacza Emacsa Lispa :( Jeśli masz zainstalowany Emacsa, możesz skopiować kod do
.el
pliku, skopiować kilka linii testowych poniżeji uruchom to
$ emacs --script filename.el
.Jak to działa
Mój program najpierw dokonuje głębokiego wyszukiwania, czasami stwierdzając, że nie można wygrać i kończąc gałąź, w której działa.
Pełne wyjaśnienie można zobaczyć w nieskróconej wersji kodu:
źródło