Magiczna sztuczka z 5 kartami polega na magiku, którego asystent daje im 4 pokazane karty i ukrytą, w tej kolejności, a mag musi odgadnąć ukrytą.
OSTRZEŻENIE: Rozwiązanie poniżej! Wyjdź teraz lub zepsuj się.
Rozwiązanie
Sztuczka polega na tym, że pięć kart jest podanych w określonej kolejności !
to 5 kart w podanej kolejności.
jest liczbą karta w (numer rzędu).
, gdzieto numer karty i b jest liczbą całkowitą, jest równa liczbie karta b kroków prawejw N O , opakowania do początku, jeżeli jest to konieczne.
jest kolorem w (kolejność kolorów).
, gdzie jest numerem karty, a jest kolorem, oznacza kartę o numerze karty i kolorze .
, gdziei b są karty, jest prawdą, jeśli„s garnitur jest na lewo od B ” garnitur sw S O , lub ich stroje są równe ijest numer karty znajduje się na lewo od B 's numer karty w N O .
, gdziei b są karty, jest prawdą, jeśli < b jest fałszywe.
, gdzie , i są kartami, jest wskaźnikiem permutacji tego ich uporządkowania, określonym w poniższej tabeli:
Rozwiązaniem magicznej sztuczki z 5 kartami jest:
Wyzwanie
Jak na razie dobrze. Jednak wykonanie obliczeń określonych powyżej jest już tutaj wymagane . Zamiast tego, biorąc pod uwagę 5 kart w określonej kolejności, Twoim wyzwaniem jest prawidłowe ich uporządkowanie. Oznacza to, że pierwsze cztery karty na wyjściu będą reprezentować piąte. Innymi słowy, bądź asystentem. Wymagania:
- .
- (to znaczy musi to być możliwe).
Przykład
Rozważmy zestaw 7H,2D,6D,5C,6C
. Przede wszystkim bierzemy 25 par:
7H,7H 7H,2D 7H,6D 7H,5C 7H,6C
2D,7H 2D,2D 2D,6D 2D,5C 2D,6C
6D,7H 6D,2D 6D,6D 6D,5C 6D,6C
5C,7H 5C,2D 5C,6D 5C,5C 5C,6C
6C,7H 6C,2D 6C,6D 6C,5C 6C,6C
Następnie oczywiście usuwamy 5 par, które zawierają tę samą kartę dwa razy, nie istnieją one w jednej talii:
7H,2D 7H,6D 7H,5C 7H,6C
2D,7H 2D,6D 2D,5C 2D,6C
6D,7H 6D,2D 6D,5C 6D,6C
5C,7H 5C,2D 5C,6D 5C,6C
6C,7H 6C,2D 6C,6D 6C,5C
Następnie, ponieważ kolory muszą być takie same, różne kolory w parze to nie-nie:
2D, 6D 6D, 2D 5 ° C, 6 ° C 6C, 5C
Na koniec sprawdzamy, czy można przejść od pierwszej karty do drugiej, dodając maksymalnie 6, usuwając połowę pozostałych par:
2D, 6D 5 ° C, 6 ° C
Teraz mamy prawidłowe pary: 2D,6D
i 5C,6C
. Pierwsza karta każdej pary to karta 1, a ostatnia to karta 5.
Pójdziemy 5C,6C
tu z łatwością. Cały zestaw polega 7H,2D,6D,5C,6C
więc na usunięciu 2 kart z wybranej przez nas pary 7H,2D,6D
. Karty te będą reprezentować 6 - 5 = 1
, więc musimy zamówić je w stylu „min, mid, max”. 7H > 2D < 6D < 7H
lub po prostu 2D < 6D < 7H
, więc teraz mamy 2D,6D,7H
.
Ostatnim krokiem jest poskładanie tego wszystkiego razem, więc nasz wynik będzie 5C,2D,6D,7H,6C
.
Wyjaśnienia
- Możesz użyć
10
zamiastT
. - Można użyć jednego z
♠♥♦♣
,♤♡♢♧
lub♠♡♢♣
zamiastCDHS
, odpowiednio. - To jest code-golf , wygrywa najkrótszy kod.
Przypadki testowe
Możesz wydrukować jedno lub więcej poprawnych rozwiązań dla każdego przypadku testowego.
8S,TD,5C,QS,TS -> 8S,5C,QS,TD,TS
... 8S,TD,TS,5C,QS
... TS,5C,8S,TD,QS
JD,KH,4S,9D,8S -> 9D,KH,8S,4S,JD
... 4S,JD,KH,9D,8S
4H,4D,TH,KH,2C -> 4H,KH,4D,2C,TH
... TH,4D,2C,4H,KH
... KH,4D,TH,2C,4H
3S,KS,8S,KH,9H -> 9H,8S,KS,3S,KH
... 3S,KS,9H,KH,8S
... 8S,3S,9H,KH,KS
... KS,KH,9H,8S,3S
KH,TS,3C,7H,JD -> 7H,TS,JD,3C,KH
4C,KC,TD,JD,QS -> KC,JD,QS,TD,4C
... TD,4C,KC,QS,JD
AC,5H,8D,6D,8S -> 6D,AC,8S,5H,8D
AS,TC,3S,2H,9C -> 9C,2H,AS,3S,TC
... AS,9C,2H,TC,3S
4C,JS,AS,8H,JC -> JC,JS,AS,8H,4C
... JS,JC,4C,8H,AS
4H,QS,TH,QC,AC -> QC,4H,QS,TH,AC
... 4H,QS,QC,AC,TH
źródło
Odpowiedzi:
Node.js ,
190186180 bajtówWypróbuj online!
W jaki sposób?
Identyfikacja i porównanie numerów kart
Funkcja pomocnikag zwraca indeks reprezentujący numer danej karty.
Dodajemy10 aby wymusić dwie cyfry dla wszystkich pozycji, aby umożliwić bezpieczne sortowanie tych indeksów w porządku leksykograficznym. Dlatego as ma 10 a król 22 .
"NS"
Generowanie permutacji danych wejściowych
Testowanie garniturów
Pierwszym oczywistym testem jest sprawdzenie, czy pierwsza i ostatnia karta są tego samego koloru. Odrzucamy permutację, jeśli nie są równe.
Testowanie odległości
Odległość między pierwszym numerem karty a ostatnim numerem obliczamy za pomocą:
Ten test opiera się na sposobie działania
sort()
algorytmu Node.js.sort()
Rozważmy następujący kod:
Teraz, jeśli zrobimy:
Wszystkie porównania są teraz prawdziwe, co generuje maskę bitowąk = 15 .
Każda permutacja generuje unikalną maskę bitów, która jest mapowana na unikalną odległość:
Danyk , możemy przekonwertować go na odległość, wykonując:
Po złożeniu wszystkiego mamy następujący test:
źródło
Python 3 ,
260 248232 bajtyWypróbuj online!
-12 bajtów dzięki Ericowi Outgolfer
-14 bajtów poprzez usunięcie listy
źródło
Czysty ,
225220209 bajtówWypróbuj online!
Jako funkcja złożona
:: [[Char]] -> [[Char]]
, z kilkoma pomocnikami.Rozszerzony:
źródło
Rubinowy , 175 bajtów
Wypróbuj online!
Funkcja lambda przyjmująca tablicę kart jako ciągi
Skomentował
źródło
Galaretka , 41 bajtów
Monadyczny link akceptujący listę list znaków zwracających listę wszystkich ważnych aranżacji w tym samym formacie.
Wypróbuj online! (stopka formatuje wynik jako siatkę, aby uniknąć niejawnego rozbijania wydruku wykonanego przez kod łącza, gdy jest uruchamiany jako pełny program)
Lub zobacz zestaw testowy .
Mam podejrzenie, że inne podejście będzie znacznie bardziej zwięzłe. Będę musiał wrócić do tego wyzwania później!
... hmm, miałem jeszcze jednego poke i mam kolejne 41 bajtów ( test ):
źródło