Wyzwanie
Bar Dice to prosta gra rozgrywana w barze z kostkami (stąd nazwa). Rzucasz 5 sześciościennymi kośćmi i próbujesz stworzyć najlepszą rękę.
Punktacja polega na zebraniu jak największej liczby kości tymi samymi cyframi. Każde rozdanie musi zawierać co najmniej jeden „As” lub jeden, aby być ważnym układem; Asy działają jak „symbole wieloznaczne” i można je sparować z dowolną inną cyfrą. Siła ręki gracza zależy najpierw od liczby cyfr, a następnie od ich wartości. Na przykład ręka (licząc symbole dzikie) z czterema 3's jest lepsza niż ręka z trzema 5, ale nie lepsza niż ręka z pięcioma 2.
Na podstawie artykułu z Wikipedii
Oznacza to, że najwyższa pozycja w rozdaniu składa się w całości z 6 i 1, a najniższa pozycja to dowolna ręka bez 1.
Twoim wyzwaniem jest wzięcie dwóch rąk i zwrócenie zwycięzcy lub remisu.
Wkład
Dwie nieposortowane listy po 5 liczb, od 1 do 6. Każda lista reprezentuje rękę gracza. Format wejściowy jest elastyczny.
Wydajność
Wszelkie trzy wyraźne, ale spójne, statyczne wartości (zakresy są niedozwolone) wskazujące, czy gracz 1 lub gracz 2 wygrał, czy też był to remis. Podaj w swojej odpowiedzi, jakich wartości używasz do czego. Na przykład możesz zwrócić, -1
jeśli P1 wygra, 0
jeśli jest remis, i1
P2 wygra.
Zasady
- Dane wejściowe zawsze będą prawidłowe
- Tylko najlepszy możliwy wynik każdego rozdania jest wykorzystywany do wyłonienia zwycięzcy. Nie ma remisów. Np.
[1,4,4,3,3]
Zawiąże[1,4,4,2,2]
zamiast używać 3 i 2 jako remisu. - Wyjście musi być za każdym razem jedną z 3 wybranych wartości. Po prostu odwzoruj wszystkie liczby ujemne na
P1 Wins
jest niedozwolone i musi zostać znormalizowane. - Nieprawidłowe ręce, tzn. Te bez 1, przegrywają z wszystkimi ważnymi rękami, ale remisują z wszystkimi innymi nieważnymi rękami. Np.
[2,2,2,2,2]
Krawaty[3,3,3,3,3]
. . - Układ
[1,1,1,1,1]
liczy się jako prawidłowy zestaw 6 do celów rankingu. - To jest golf golfowy, więc wygrywa najkrótsza liczba bajtów.
Przykłady
#You guys are pretty good at finding edge-cases that break things. Good job!
Input: [2,1,5,6,6], [6,2,6,6,6]
Output: P1 Wins
Input: [2,4,5,6,6], [6,2,6,6,6]
Output: Tie
Input: [1,2,3,4,5], [5,4,3,2,1]
Output: Tie
Input: [1,5,5,3,2], [5,4,1,6,6]
Output: P2 Wins
Input: [3,2,2,2,1], [4,1,3,6,6]
Output: P1 Wins
Input: [1,1,1,1,1], [6,1,1,6,6]
Output: Tie
Input: [1,3,3,4,4], [1,2,2,5,5]
Output: P2 Wins
Input: [1,3,3,5,5], [1,3,3,2,2]
Output: P1 Wins
Input: [1,3,3,3,4], [1,1,3,3,3]
Output: P2 Wins
Input: [2,2,2,6,1], [5,3,3,1,2]
Output: P1 Wins
Input: [5,5,5,1,5], [1,1,1,1,1]
Output: P2 Wins
Input: [1,1,1,1,1], [1,1,5,1,1]
Output: P1 Wins
źródło
IṠ
zM
i wyjście listy zwycięzcy (S).Ḍ
teraz może być również zbędne, ponieważ listy są sortowane tak samo jak liczby całkowite.R ,
11596 bajtów-6 bajtów dzięki Giuseppe.
-6 bajtów dzięki Aaronowi Haymanowi.
-2 bajty dzięki Arnauldowi, zgodnie z formatem wyjściowym w odpowiedzi na JavaScript .
Wypróbuj online!
Zwraca
Inf
za P1,NaN
za remis,-Inf
za P2.Korzysta z funkcji pomocnika,
f
która oblicza wynik dla każdej ręki. Wynik jest zdefiniowany w następujący sposób: letd
będzie cyfrą, która jest najczęściej powtarzana, in
liczbą powtórzeń. Wynik jest6*n+d
wtedy, gdy jest co najmniej jeden as i0
jeśli nie ma asów. Następnie musimy tylko znaleźć gracza z najwyższym wynikiem.Nie golfowany:
źródło
order(l)[5]
zamiastmax.col(t(l),"l")
96-bajtowego rozwiązania: Wypróbuj online!JavaScript (ES6),
9790 bajtówPobiera dane wejściowe jako
(a)(b)
. Zwraca+Infinity
za P1,-Infinity
za P2 lubNaN
za remis.Wypróbuj online!
Skomentował
źródło
05AB1E ,
1615 bajtów-1 bajt dzięki JonathanAllan
Wypróbuj online!
Zwraca [1, 0] dla zwycięstw P1, [1, 1] dla remisów, [0, 1] dla zwycięstw P2.
Zamiast używać porządku leksykograficznego na 2-krotkach (liczba kości, wartość kości), to oblicza wynik jako 10 ** liczba kości * wartość kości. Ręce bez wyniku 1 5.
źródło
ć+
(teraz, kiedy to widzę, nie mogę uwierzyć, że o tym nie pomyślałem ..)! To o wiele lepsze niż to, co próbowałem… Miałem podobny pomysł°
. :) Tyle, że miałem już 20 bajtów i nadal musiałem naprawić problem z przypadkiem testowym[[1,1,1,1,1],] [6,1,1,6,6]]
.. Dziękuję za oszczędność czasu, dzięki czemu mogę umieścić moją próbę w koszu na śmieci ..; pć+
działa. Mój początkowy pomysł zaczął się odæʒW}ʒ1KË
, ale problem zabija ten[1,1,1,1,1]
problem.ε1¢©Āy{γéθ¬sg®+°P}`.S
, ale to też się nie udało[1,1,1,1,1]
. Cała odpowiedź dostał piękny synergii zWΘ*
,6L¢
,ć+
, i°ƶ
. Zwłaszcza wbudowaneWćƶ
naprawdę pokazują tutaj swoją siłę.W
nie jest tak naprawdę potrzebny,6L¢¬Ā*
ma taką samą liczbę bajtów jakWΘ*6L¢
.W
bez pękania, a następnie*
pokazała swoją siłę, ale¬
bez pękania i wtedy*
jest w zasadzie taka sama. Fakt, że nie wyskakuje, jest siłą, na którą zasugerowałem, oszczędzając bajt. Ale tak naprawdę jest główniećƶ
.Python 2 ,
858180 bajtówWypróbuj online!
Zwraca
1
za P1,0
za remis i-1
za P2.-1 bajt, dzięki kałamarnicy
źródło
1
iin
może przejśćPerl 6 ,
6049 bajtówWypróbuj online!
Powroty
More
,Same
,Less
naP1 Wins
,Tie
,P2 Wins
.Wyjaśnienie
źródło
Zapytanie T-SQL, 148 bajtów
Wykorzystanie zmiennej tabeli jako danych wejściowych
Wypróbuj online
źródło
Galaretka , 21 bajtów
zmiażdżony, zanim nawet opublikowałem go przez Nicka Kennedy'ego :)
Monadyczny link akceptujący listę graczy, który wyświetla listę zwycięzców (zindeksowanych 1).
Więc P1 to
[1]
, P2 to[2]
i remis[1,2]
.Wypróbuj online!
źródło
PowerShell ,
112126123121 bajtówPobiera dane wejściowe jako
(a)(b)
. Zwraca-1
za zwycięstwo P1,1
P2 lub0
remis.Wypróbuj online!
Przypadek testowy
@( @(1,1,5,1,1), @(1,1,1,1,1), 1)
Dodano .Rozwinięty:
źródło
Wolfram Language (Mathematica) ,
787574 bajtów-1 bajt autorstwa Grega Martina
Wypróbuj online!
Zwraca -1, gdy gracz 1 wygrywa, 1, gdy gracz 2 wygrywa, a 0 - remis.
źródło
FreeQ[#,1]
go#~FreeQ~1
.Java 8,
244240236215199 bajtów-4 bajty dzięki @someone .
-21 bajtów dzięki @Neil .
-16 bajtów dzięki @ceilingcat .
Zwraca,
1
jeśli P1 wygra;-1
jeśli P2 wygra;0
jeśli to remis.Wypróbuj online.
Wyjaśnienie:
źródło
...*(c[p][1]>0?1:0)
zc[p][1]>0?...:0
. Nie mogę opublikować linku TIO, ponieważ jest on zbyt długi i nie chcę go skracać. Wersja niegolfowana ma gdzieś tam niezrównoważone nawiasy.c[p][1]>0?
Później dodałem czek jako naprawę błędu, ale najwyraźniej bez zastanowienia. Dzięki za -4. :)*(i<2?6:i)
? Po prostu kopiujesz wysiłek dlai=6
ii=1
. Może to być po prostu*i
(i przestań zapętlać, gdy dojdziesz do 2).9
może to być dowolna liczba magiczna między5
i około32
, prawda? Jeśli używasz,8
to zamiast(int)Math.pow(8,(...)*i)
możesz użyći<<3*(...)
.a->b->{int c[][]=new int[2][7],m[]=new int[2],s,p,i=5;for(;i-->0;c[1][b[i]]++)c[0][a[i]]++;for(i=7;i-->2;)for(p=2;p-->0;m[p]=s>m[p]?s:m[p])s=c[p][1]>0?i+9*(c[p][i]+(i>1?c[p][1]:0)):0;return Long.compare(m[0],m[1]);}
tym, że zdałem wszystkie twoje testy ...Galareta , 27 bajtów
Wypróbuj online!
1 dla P1, -1 dla P2, 0 dla remisu
Wyjaśnienie
źródło
Młot kute 0,4 , 27 bajtów
Dekompresuje się do tej funkcji języka Wolfram:
co okazuje się dokładnie takie samo jak moja odpowiedź Mathematica .
źródło
Węgiel ,
4845 bajtówWypróbuj online! Link jest do pełnej wersji kodu. Pobiera dane wejściowe jako tablicę tablic i wyników,
-1
jeśli gracz 1 wygra,0
remis i1
jeśli gracz 2 wygra. Wyjaśnienie:Zastąp każdą rękę liczeniem, ile razy wartości
6..1
pojawiają się w ręce. Lista jest odwrócona, ponieważ a) ułatwia znalezienie najwyższej wartości o największej liczbie ib) ułatwia usunięcie liczby1
s. Liczba1
s jest podwojona, ponieważ należy ją dwukrotnie usunąć, raz, aby sprawdzić, czy jest ona niezerowa, i raz, aby dodać ją do innych liczników.Dodaj liczbę
1
s do liczby6..2
, ale ustaw wszystkie liczby na zero, jeśli liczba1
s wynosiła zero.Dla każdej ręki znajdź najwyższą liczbę i najwyższą wartość z tą liczbą. (W rzeczywistości znajdujemy wartość minus,
6
ponieważ to jest golfista.)Określ wygraną rękę, odejmując pozycje rąk wygrywających i przegrywających. (Jeśli ręce są remisowane, to pierwsze rozdanie wygrywa i przegrywa, więc wynik jest następujący
0
zgodny z oczekiwaniami.)źródło
C (gcc) / 32 bity, 117 bajtów
Wypróbuj online!
Przyjmuje dwie tablice liczb całkowitych zakończonych zerami. Powroty
1
,0
,-1
naP1 Wins
,P2 Wins
,Tie
.źródło
J ,
4744 bajtówWypróbuj online!
Zainspirowany pomysłem Nicka Kennedy'ego.
bez golfa
źródło
Perl 5
-MList::Util=max -pl
, 80 bajtówWypróbuj online!
Wkład:
Każdy gracz na osobnej linii, bez spacji
Wydajność:
1
Wygrywa linia pierwsza0
Wiązanie-1
Wygrywa druga liniaźródło