Wprowadzenie
Dice 10,000 to gra w kości, w którą można grać za pomocą 6 kości i czegoś do napisania. Gracze rzucają kostką wiele razy na turę i na końcu zdobywają wynik. Gracz, który jako pierwszy osiągnie 10 000 punktów, wygrywa. Obliczanie wyniku jednego rzutu jest Twoim zadaniem w tym wyzwaniu.
Zajrzyj tutaj, aby zobaczyć pełne zasady.
Należy pamiętać, że zasady (zwłaszcza punktacja) zmieniają się w zależności od regionu, ponieważ gra jest powszechnie znana. Korzystamy z zasad opisanych poniżej.
Wyzwanie
Biorąc pod uwagę listę sześciu liczb od jednego do sześciu reprezentujących rzut kostką, wypisz ich wynik. Wynik obliczany jest w następujący sposób:
- Jeden liczy 100 punktów
- Piątki liczą 50 punktów
- Trojaczki liczą ich liczbę razy 100 punktów. Na przykład trzy dwójki dają 200 punktów. Wyjątkiem są trzy, które liczą 1000 punktów.
- Sześć tej samej liczby liczy się jak dwie trojaczki, jak opisano powyżej. Tak więc sześć trójek daje 600 punktów. To samo dotyczy przypadku na krawędzi: sześć z nich to 2000 punktów.
- Jedna kość nie może być użyta więcej niż raz. Jeśli kość jest częścią trypletu, nie liczy się dla innych wyników. Piątki w trojaczce nie liczą 50 punktów oprócz 500 punktów, które dają.
- Trójki są zawsze liczone jako pierwsze, aby zmaksymalizować wynik. Tak więc trzy piątki nigdy nie są liczone jako 150 punktów. Cztery piątki liczone są jako jedna trojaczka i jedna zwykła pięć, co daje następnie 550 punktów.
Notatki
- Dane wejściowe zawsze będą zawierać sześć liczb od jednego do sześciu. Nie otrzymasz nieprawidłowych danych wejściowych.
- Liczby mogą być w dowolnej kolejności. Nie możesz zakładać żadnego konkretnego zamówienia.
Zasady
- Format wejściowy zależy od Ciebie, o ile nie jest wstępnie przetworzony.
- Dozwolona funkcja lub pełny program.
- Domyślne reguły wejścia / wyjścia.
- Obowiązują standardowe luki .
- To jest golf golfowy , więc wygrywa najmniej bajtów. Tiebreaker to wcześniejsze zgłoszenie.
Przypadki testowe
[1, 2, 3, 4, 5, 6] -> 150 [1, 1, 1, 2, 3, 5] -> 1050 [1, 1, 1, 1, 1, 1] -> 2000 [2, 2, 2, 2, 2, 2] -> 400 [6, 6, 1, 5, 5, 6] -> 800 [2, 3, 4, 6, 2, 4] -> 0 [1, 5, 1, 5, 1, 5] -> 1500 [5, 5, 5, 5, 2, 3] -> 550 [1, 1, 1, 1, 1, 5] -> 1250 [3, 3, 4, 4, 3, 4] -> 700
Odpowiedzi:
05AB1E ,
343130 bajtówWyjaśnienie
Wypróbuj online
źródło
Python 2,
152148125 bajtówCałkiem proste rozwiązanie. Można grać w golfa więcej.
L.count
jest trochę długi, ale nie mogłem usunąć pierwszego połączenia, ponieważ L został zaktualizowany.Wypróbuj online - (wszystkie przypadki testowe)
Nie golfowany:
Trochę kredytu golfowego dla @Copper , korzystając z kilku wskazówek z jego kodu
źródło
PowerShell
v2 +v3 +,147144137133 bajtówPrzekreślony 144 wygląda trochę jak 144?
Pobiera dane wejściowe
$args[0]
isort
zapisuje je w$n
. Następniewhile
pozostały jeszcze elementy, oceniamyif
/else
.Jeśli pierwszy element (temp zapisany w
$x
celu zapisania niektórych bajtów) pasuje do trzeciego elementu, mamy potrójny. Dodaj do$s
um wynik mnożenia100*$x
plus wartość logiczną900
tylko, jeśli$x
jest to-eq
przydatne1
. To zapewnia nam niezbędność1000
trzech. Następnie oderwij pierwsze dwa elementy do$a
, a$b
pozostałe do$n
- usunięcie trzeciego elementu potrójnego zajmie się później.W przeciwnym razie nie mamy potrójnego, więc dodaj do
$s
um wynik innego dodania opartego na logice. Dodajemy,50
jeśli$x
jest albo,1
lub5
dodajemy,50
jeśli jest to-eq
przydatne1
. Ta sekcja wymaga teraz v3 + dla-in
operatora.W obu przypadkach nadal mamy element do usunięcia, więc odklej pierwszy element
$a
i pozostaw resztę w$n
.Na koniec, po zakończeniu pętli, umieść
$s
na rurociągu. Dane wyjściowe są niejawneWrite-Output
na końcu wykonania.Przypadki testowe
źródło
JavaScript (ES6),
8786 bajtówSortuje i uszeregowuje dane wejściowe, dzięki czemu kombinacje oceniania można zidentyfikować za pomocą wyrażenia regularnego. Edycja: Zapisano 1 bajt dzięki @Arnauld.
źródło
s>>7
zamiasts>111
zapisuje jeden bajt w pierwszej wersjiPython 2 lub 3,
123 122 121 116 109 108 104 102 10097 bajtówPython 2, 97 bajtów
Przypadki testowe są na ideone
Python 3, 97 bajtów
źródło
Rubinowy,
8078 bajtówWypróbuj online!
-2 bajt od @ezrast.
źródło
i<2&&i=10
oszczędza 2 bajty.Haskell,
130123 bajtówTo nie jest wyzwanie dla Haskell. Też gram w golfa.
Dzięki @nimi.
źródło
JavaScript (ES6),
8584 bajtówPrzypadki testowe:
źródło
Python 3, 131 bajtów
To jest wyrażenie lambda; aby go użyć, przypisz go, przygotowując
f=
.Najpierw sprawdzamy trzykrotnie dwukrotnie (używając modułu), usuwając je w miarę upływu czasu; następnie po prostu dodajemy liczby
5
i1
do wyniku i go.Wypróbuj na Ideone!(ze wszystkimi przypadkami testowymi)
Oto moje starsze zgłoszenie do Python 2:
Python 2,
176172171145136134133 bajtówOszczędność bajtu w rozwiązaniu Python 2 dzięki @ mbomb007!
źródło
print s
jest krótszy w Pythonie 2.BASH (sed + bc) 161
Chciałem to zrobić w całości, ale dodawanie jest naprawdę trudne ...
Wyjaśnienie:
00
do pierwszego numeru i usuń drugi,np.
1 2 1 3 1 4
->100 2 3 4
10
się1
następnie1
z100
np
100
->10
->1000
lub1
->1
->100
5
nie następuje0
z50
0
+
+
s0
bc
dodać wszystko.źródło
Perl, 69 bajtów
Obejmuje +2 za
-ap
Uruchom z wejściem na STDIN:
dice10000.pl
:źródło
C # (.NET Core) ,
228227 bajtówWypróbuj online!
Czuję się jakbym brakuje wiele, wiele potencjalnych optymalizacje tutaj, ale nie zapisać bajt przez pomnożenie przez 10 na końcu. Dane wejściowe należy przekazywać jako osobne argumenty wiersza poleceń.
źródło
Perl 5
-ap
, 78 bajtówWypróbuj online!
źródło