Blackjack , znany również jako dwadzieścia jeden, to gra karciana polegająca na porównywaniu siebie z krupierem, w której każdy gracz z kolei rywalizuje z krupierem, ale gracze nie grają przeciwko sobie.
Gra przebiega w następujący sposób, krupier rozdaje ci kartę. Następnie krupier rozdaje kartę zakrytą kartą. Następnie rozdaje ci kolejną kartę. W końcu krupier rozdaje kartę odkrytą.
Wyzwanie
Twoim wyzwaniem jest napisanie programu (lub funkcji), który po uruchomieniu (lub wywołaniu) generuje (lub zwraca) prawdopodobieństwo, że następna karta, którą da ci dealer, sprawi, że odpadniesz, co oznacza łączny wynik kart w twojej ręce po krupier daje ci kolejną kartę powyżej 21 lat.
Wejście
Trzy widoczne karty w grze. Są to dwie karty, które masz w ręce, i jedna karta, którą możesz zobaczyć w ręce rozdającego. Może być w dowolnym formacie odpowiednim dla twojej aplikacji.
W talii znajduje się 52 karty (4 z każdej z poniższych kart). Wartości kart są następujące:
Symbol(Case Insensitive) Name Value
2 Two 2
3 Three 3
4 Four 4
5 Five 5
6 Six 6
7 Seven 7
8 Eight 8
9 Nine 9
T Ten 10
J Jack 10
Q Queen 10
K King 10
A or 1 Ace 1
W blackjacku as może liczyć się jako 1 lub 11. W naszym wyzwaniu liczymy go tylko jako 1
Wynik
Prawdopodobieństwo, w formacie proporcji lub procentu, że następna karta, którą wyciągniemy, nas rozbije.
Możesz podać procent, ułamek lub tylko licznik ułamka.
Przykłady
W tym przykładzie pierwsze dwie karty są w naszej ręce, trzecia karta jest widoczną kartą rozdającego
Input -> Output
A 2 Q -> 0.00% or 0/49 or 0
A 2 3 -> 0.00% or 0/49 or 0
T T T -> 91.84% or 45/49 or 91.84
T J K -> 91.84% or 45/49 or 45
9 7 3 -> 61.22% or 30/49 ...
9 7 Q -> 59.18% or 29/49 ...
Zasady
Standardowe luki są niedozwolone.
To jest golf golfowy , więc wygrywa najkrótszy kod w bajtach dla każdego języka!
źródło
Odpowiedzi:
Galaretka ,
2624 bajtówMonadycznego związek przyjmowania listę znaków (stosując albo małą lub opcji górna skrzynka Z
1
naA
), które zwraca licznik (liczba 49 p y) w[0,49]
.Wypróbuj online! Lub zobacz pakiet testowy
W jaki sposób?
Zauważ, że używając małej litery minimum 10, a liczba rzędnych modulo 48 daje wartości karty. To samo dotyczy wielkich liter
T
,J
,Q
,K
i1
dla asa, jak pokazano po prawej stronie (ale wielkimi literamiA
nie działa):źródło
JavaScript (ES6),
7362 bajtówPobiera dane jako tablicę 3 znaków z
1
asami. Zwraca liczbę całkowitą X reprezentującą prawdopodobieństwo odpadnięcia X / 49 .Wypróbuj online!
Wyczerpujący test
Gra w golfa nie jest zbyt intuicyjna. Zatem najłatwiejszym sposobem udowodnienia jego spójności jest prawdopodobnie porównanie wszystkich możliwych wyników z wynikami dostarczonymi przez podstawową niestosowną implementację:
Wypróbuj online!
źródło
.map(n=>b-=n+b>52,b+=c-32)
ogólnie? Nie jestem zbyt zaznajomiony z JS.map
i próbuję zrozumieć, co robi przecinek tutaj. Początkowo myślałem, że jest to krótszy wariant.map(n=>{b-=n+b>52;b+=c-32})
lub coś .. Wiem, żea=>([b,c]=a.map(v=>v*4||40))
konwertuje['1','2','Q']
na[ 4, 8, 40 ]
, a następnie zapętla się nad tymi trzema wartościami, gdzieb
jest pierwsza wartość ic
jest drugim (jeśli dobrze rozumiem). Ale jestem trochę zdezorientowany.map(n=>b+=(n+b<53)-1,b+=c-32)
(jeśli pierwszyb-=
zmieniono nab+=
) vs.map(n=>b+=(n+b<53)-33+c)
..b
= pierwsza wartość,c
= druga wartość w[4, 8, 40]
, a takżeb-=n+b>52
zmienia się,c
jeśli jest to druga iteracja? W takim przypadku połączenie obub-=
ib+=
do jednegob+=
(lubb-=
) nie będzie działać z tego powodu?b+=c-32
jest (nieużywanym) parametremmap()
i jest oceniany tylko raz przed pierwszą iteracją.n=>b-=n+b>52
jest funkcją wywołania zwrotnego (pierwszy parametrmap()
) i jest wywoływana przy każdej iteracji. Techniczniemap()
akceptuje drugi parametr (zwany thisArg ), ale tutaj nie ma to znaczenia: chcemy, aby ten fragment kodu został wykonany przed rozpoczęciem pętli.Pyth, 35 bajtów
Pobiera dane wejściowe jako listę znaków (lub ciąg znaków).
Wypróbuj tutaj
Wyjaśnienie
źródło
Perl 5 , 115 bajtów
Wypróbuj online!
źródło
Python 2 ,
9796 bajtówWypróbuj online!
Pobiera 3-znakowy ciąg znaków jako wejście, a „1” jest używane jako as. Zwraca licznik.
źródło
Java 8, 109 bajtów
Port odpowiedzi JavaScript (ES6) @Arnauld .
Wprowadź jako tablicę znaków z trzema wartościami, Aces as
'1'
; wyjście jest prawdopodobieństwemp
wp/49
.Wypróbuj online.
Wyjaśnienie:
źródło
05AB1E , 46 bajtów
Wypróbuj online!
Można to zrobić lepiej, pracując nad tym.
źródło
05AB1E ,
232221 bajtówWypróbuj online!
źródło