421 to dość popularna gra w kości we Francji i niektórych innych krajach europejskich. Najczęściej gra się w barach i pubach, aby ustalić, kto kupi kolejną rundę drinków. Pełna gra jest zwykle rozgrywana w dwóch rundach, z tokenami, których każdy gracz próbuje się pozbyć, ale tutaj nie ma to znaczenia. ( Strona Wikipedii w języku francuskim.)
W grę wchodzą 3 standardowe kostki kostki.
Zadanie
Twoim zadaniem jest posortowanie niepustej listy odrębnych rzutów 3-kostkami [X, Y, Z] od najwyższej do najniższej, stosując zasady punktacji w tej grze.
Podstawowa punktacja
- 4,2,1 to najwyższa możliwa kombinacja. W zależności od zasad może zdobyć 8, 10 lub 11 punktów. Ponieważ sortujemy rzuty, a nie liczymy punkty, dokładna wartość nie ma znaczenia.
- Three Aces: 1,1,1 jest drugą najwyższą kombinacją i zdobywa 7 punktów.
- Dwa asy: X, 1,1 (gdzie X wynosi od 2 do 6) zdobywa X punktów.
- Trójka: X, X, X (gdzie X wynosi od 2 do 6) zdobywa X punktów.
- Prostych: x, x + 1, x + 2 zdobywa 2 punkty.
- Wszystkie pozostałe rzuty dają 1 punkt.
Rozstrzyganie więzi
Ilekroć dwa rzuty dają tę samą liczbę punktów, obowiązują następujące zasady:
- Dwa asy są lepsze niż trójka. Przykład: 5,1,1 bije 5,5,5 .
- Trójka 2,2,2 jest lepsza niż strit. Przykład: 2,2,2 uderzenia 4,5,6 .
- Proste są uporządkowane od najniższej do najwyższej. Przykład: 4,5,6 bije 2,3,4 .
- Wszystkie pozostałe rzuty są rozstrzygane przez sortowanie kości od najwyższej do najniższej. Przykład: 6,5,2 uderzeń 6,4,3 . (Dlatego najniższa możliwa kombinacja w grze to 2,2,1 .)
Poniżej znajduje się 56 możliwych różnych rzutów uporządkowanych od najwyższej do najniższej:
421 111 611 666 511 555 411 444 311 333 211 222 654 543 432 321
665 664 663 662 661 655 653 652 651 644 643 642 641 633 632 631
622 621 554 553 552 551 544 542 541 533 532 531 522 521 443 442
441 433 431 422 332 331 322 221
Zasady wyzwania
- Możesz wziąć rzuty w dowolnym rozsądnym formacie, takim jak lista list
[[3,2,1],[4,2,1]]
, lista ciągów["321","421"]
, lista liczb całkowitych[321,421]
itp. Jednak każda kość musi być wyraźnie identyfikowalna o wartości od 1 do 6 . - Dla każdego rzutu można założyć, że kości są sortowane od najniższej do najwyższej lub od najwyższej do najniższej, o ile jest ona spójna. Podaj w swojej odpowiedzi, jakiej kolejności się spodziewasz.
- Najkrótsza odpowiedź w bajtach wygrywa!
Przypadki testowe
Używając list ciągów z kostkami posortowanymi od najwyższej do najniższej:
Wejścia
[ "321", "654" ]
[ "222", "321", "211" ]
[ "333", "311", "331", "111" ]
[ "111", "222", "333", "444" ]
[ "321", "421", "521", "621" ]
[ "422", "221", "442", "421", "222" ]
[ "222", "111", "421", "211", "651", "652", "543" ]
Oczekiwane wyniki
[ "654", "321" ]
[ "211", "222", "321" ]
[ "111", "311", "333", "331" ]
[ "111", "444", "333", "222" ]
[ "421", "321", "621", "521" ]
[ "421", "222", "442", "422", "221" ]
[ "421", "111", "211", "222", "543", "652", "651" ]
012
Zamiast123
)?Odpowiedzi:
Python , 93 bajty
Wypróbuj online!
źródło
sort
metodyRetina 0.8.2 , 67 bajtów
Wypróbuj online! Link zawiera przypadki testowe. Objaśnienie: Numeryczny klucz sortowania jest generowany w następujący sposób:
źródło
Galaretka ,
3734 bajtówMonadyczny link akceptujący listę list rzutów kostką (każda posortowana malejąco), która daje posortowane wyniki malejące.
Wypróbuj online! Lub zobacz zestaw testowy ... lub wypróbuj wszystkie rolki posortowane leksykograficznie
W jaki sposób?
Metoda ta opiera się wszystkie rolki z najwyższej do najniższej *, zastępując
[4,2,1]
w0
(nieprawidłowej wałka wejściowego), aby przy pomocy stopnia każda rolka Jelly pierwszej Indeksu z atomui
.* Lista obejmuje również powtórzenia i zbędne wpisy, które nie wpływają na zachowanie:
źródło
R , 73 bajty
Wypróbuj online!
421 ... 221
)x % 37
zamiast reszty dzielenia111
Objaśnienie:
Dla każdej z liczb 5 kluczy jest obliczanych i używanych hierarchicznie do sortowania tablicy:
źródło
05AB1E ,
764845 bajtówOkazało się to o wiele dłużej niż oczekiwano, ale przynajmniej jest łatwe do wdrożenia. Zobaczę, czy uda mi się znaleźć lepsze rozwiązanie.Teraz sporządziłem listę ręcznie, ale wciąż trochę.Wypróbuj online lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie:
Oto faktyczna lista, którą generuje pierwsza część kodu:
Wypróbuj online.
Jak widać, zawiera puste przedmioty; liczby takie jak
765
lub210
; i liczby w zakresie[216, 112]
. Ale wszyscy możemy je zignorować, ponieważ przedmioty, które chcemy sortować, są w odpowiedniej kolejności.Oryginalne rozwiązanie o wielkości 76 bajtów:
Wypróbuj online
lub sprawdź wszystkie przypadki testowe(brak zestawu testów, ponieważ nadal występuje błąd z sortowaniem według skompresowanych liczb, które nie widzą nawiasu zamykającego, aby zatrzymać sortowanie ).Wyjaśnienie:
Objaśnienie
•X˜„Éε´õñ€9Ú ù?ä0₅9úd5àPÎøŒccuĆYÑ,o¾eíË¿¼À8@gID=vÆOΣxjF¨O‡J₃^εR™\èv•667в
:Wszystko między nimi
•
jest liczbą skompresowaną, która jest generowana za pomocą następującego programu:Wypróbuj online.
Z>
: Weź maksimum z listy + 1 (667
w tym przypadku)β
: Konwertuj listę z Base-667
na pojedynczy numer255B
: I przekonwertuj ten pojedynczy numer na bazowy255
(używając strony kodowej 05AB1E), więc mamy nasz skompresowany numer .Za pomocą
667в
tego konwertuje ten skompresowany numer z powrotem do oryginalnej listy.źródło
JavaScript (ES7), 96 bajtów
Sortuje rzuty, ściśle przestrzegając zasad punktacji. Oczekuje tablicy ciągów z pojedynczymi rolkami w malejącej kolejności wartości, np
["654"]
Wypróbuj online!
Wyjaśnienie
Kategorie rzutów są podnoszone do następujących wykładników:
Nie golfił
Umysłowe rozpakowanie czeków warunkowych wywołuje u mnie ból głowy i jestem pewien, że można w jakiś sposób pograć w golfa ...
źródło
JavaScript, 101 znaków, 116 bajtów (UTF-8)
Pobiera tablicę liczb reprezentujących rolki
[ 321, 654 ]
.Wypróbuj online!
Wyjaśnienie:
Wzięłam pierwszą 16 56 możliwych różnych rolkach (te, które naprawdę nie następują dowolnej kolejności), a ja je zakodowane jako ciąg:
"ƥoɣʚǿȫƛƼķōÓÞʎȟưŁ"
. Każdy znak tego ciągu odpowiada pierwszym 16 możliwym rolkom (ƥ
jest421
,o
jest111
, ...). Teraz dla każdego z dwóch elementówa
ib
tablicy po prostu sprawdzamy ich indeks z ciągu, jeśli są uwzględnione, indeks jest używany, w przeciwnym razie (indeks to-1
) używamy samego numeru rzutu (odejmujemy go,700
aby odwrócić kolejność te nie są uwzględnione, tzn. posortować je w malejącej kolejności).źródło
Czysty ,
169102 bajtówWszystkie znaki ósemkowe są liczone jako jeden bajt, ponieważ kompilator Clean z radością je zabierze w ten sposób, ale TIO i SE nie zrobią tego, ponieważ nie są dobrze uformowanym UTF-8.
Wypróbuj online!
Wykorzystuje fakt, że wszystkie rzuty kostkami, jako liczby całkowite modulo 256, są unikalne.
Dogodnie
Char
jest traktowane (głównie) jako liczba całkowita modulo 256.źródło
Pyth , 48 bajtów
Oczekuje danych wejściowych jako zagnieżdżonej tablicy, a każdy element uporządkowany malejąco. Spróbuj go online tutaj , lub sprawdzić wszystkie przypadki testowe od razu tutaj .
źródło
05AB1E , 24 bajty
Wypróbuj online!
Ogólny algorytm:
Detale:
źródło