Twoim zadaniem jest ustalenie, ile różnych sekwencji blackjacka można znaleźć na uporządkowanej liście 12 kart.
Sekwencję blackjacka definiuje się jako sekwencję następujących po sobie kart, których suma punktów wynosi dokładnie 21. Punkty są liczone zgodnie z poniższą tabelą:
Symbol | Name | Points Symbol | Name | Points
-------+-------+-------- -------+-------+--------
2 | Two | 2 9 | Nine | 9
3 | Three | 3 T | Ten | 10
4 | Four | 4 J | Jack | 10
5 | Five | 5 Q | Queen | 10
6 | Six | 6 K | King | 10
7 | Seven | 7 A | Ace | 1 or 11
8 | Eight | 8
Wkład
Ciąg 12 znaków, używając symboli opisanych powyżej. Nie dbamy o kolory kart, więc nie są one dostarczane.
Przykład:
K6K6JA3Q4389
Wydajność
Liczba różnych sekwencji blackjacka, które można znaleźć w ciągu wejściowym.
Przykład:
K6K6JA3Q4389
zawiera dwie różne sekwencje blackjacka:
JA
, przy czym as liczony jest jako 11 punktów (10 + 11 = 21)A3Q43
, z asem liczonym jako 1 punkt (1 + 3 + 10 + 4 + 3 = 21)
Tak więc odpowiedź brzmiałaby 2
.
Zasady
- Dwie sekwencje blackjacka są uważane za odrębne, jeśli zawierają różne karty lub te same karty w różnych porządkach. Jeśli dokładnie ta sama sekwencja pojawia się w różnych pozycjach na liście danych wejściowych, należy ją policzyć tylko raz.
- Sekwencje blackjacka mogą się nakładać.
- Każdy rodzaj karty może pojawić się 12 razy w sekwencji. (Zakładamy, że karty są wybierane z co najmniej 3 różnych talii.)
- Jeśli w ciągu wejściowym nie można znaleźć sekwencji Blackjacka, musisz zwrócić
0
lub dowolną inną wartość fałszowania. - To jest golf golfowy, więc wygrywa najkrótsza odpowiedź w bajtach. Standardowe luki są zabronione.
Przypadki testowe
Sekwencje są dostarczane w celach informacyjnych, ale musisz podać tylko ich liczbę.
Input | Output | Distinct sequences
-------------+--------+--------------------------------------------------------
3282486Q3362 | 0 | (none)
58A24JJ6TK67 | 1 | 8A2
Q745Q745Q745 | 1 | Q74
AAAAAAAAAAAA | 1 | AAAAAAAAAAA
T5AQ26T39QK6 | 2 | AQ, 26T3
JQ4A4427464K | 3 | A442, 44274, 7464
Q74Q74Q74Q74 | 3 | Q74, 74Q, 4Q7
37AQKA3A4758 | 7 | 37A, 37AQ, AQ, AQK, QKA, KA, A3A475
TAQA2JA7AJQA | 10 | TA, TAQ, AQ, QA, A2JA7, 2JA7A, JA, AJ, AJQ, JQA
TAJAQAKAT777 | 13 | TA, TAJ, AJ, JA, JAQ, AQ, QA, QAK, AK, KA, KAT, AT, 777
code-golf
subsequence
card-games
Arnauld
źródło
źródło
Odpowiedzi:
Galaretka ,
3029 bajtówWypróbuj online! lub sprawdź pakiet testowy
W jaki sposób?
Zauważ, że jeśli zawsze oceniamy asa na 1, wówczas jedynymi poprawnymi sumami są 21 i 11 , przy czym te ostatnie są dopuszczalne, jeśli as pojawia się w sekwencji.
źródło
Python 2, 215 bajtów
Dodane komentarze:
źródło
Python ,
134130 bajtówWypróbuj online!
W jaki sposób?
Funkcja bez nazwy, przyjmująca ciąg długości 12 jako
x
.x[i:j]
to plasterek ciągu od i + 1- szego do j- tego znaku.Plasterki są pobierane w taki sposób, że wszyscy mamy listy podrzędne, przemierzając od
i=0
doi=11
zfor i in range(12)
, z których każdy przemierzamy odj=0
doj=12
zfor j in range(13)
.(Potrzebujemy tylko
j=i+1
i wyżej, ale plastry zj<=i
są tylko pustymi ciągami, więc możemy grać w golfa z 4 bajtów odfor j in range(i+1,13)
)Są filtrowane według tych z prawidłową sumą ...
Prawidłowe sumy to 11 i 21, jeśli na asie jest as, lub tylko 21, jeśli nie.
'A'in x[i:j]
daje nam tę informację i~(v)
preform-1-v
, których używamy do plasterka[11,21]
- więc jeśli asem w sekwencji otrzymujemy[11,21][-2:]
a jeśli nie mamy[11,21][-1:]
, co skutkuje[11,21]
i[21]
odpowiednio.Suma sam musi traktować
A
jako 1, cyfr, ich wartości iT
,J
,Q
iK
jako 10. Odwzorowanie to osiągnąć przez pierwszy odlewania porządkowych:" 2 3 4 5 6 7 8 9 T J Q K A"
(bez przestrzeni) staje się[50, 51, 52, 53, 54, 55, 56, 57, 84, 74, 81, 75, 65]
, odejmując 48, aby[ 2, 3, 4, 5, 6, 7, 8, 9, 36, 26, 33, 27, 17]
, przyjmującmin
z 26 wydajnością[ 2, 3, 4, 5, 6, 7, 8, 9, 26, 26, 26, 26, 17]
, i mod (%
) na szesnaście te są[ 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10, 1]
, zgodnie z wymaganiami dla sumy,sum(...)
.Przefiltrowane wyniki są umieszczane w zestawie z
{...}
, więc pozostają tylko unikalne wyniki, a długośćlen(...)
jest liczbąźródło
05AB1E ,
393837 bajtówWypróbuj online!
Wyjaśnienie
źródło
JavaScript (ES6), 123 bajty
źródło
0
doAAAAAAAAAAAA
zamiast1
. (A
może być jednocześnie 1 i 11)s=>eval("q=new Set;for(i=0;s[i];i++)for(t=A=0,j=i;c=s[j++];t==21|t==11&A&&q.add(s.slice(i,j)))t+=+c||(c<'B'?A=1:10);q.size")
124 bajtyJavaScript (ES6),
144138129128126124 bajtówStara próba 128:
źródło
s.search`A`>-1
może być~s.search`A`
-2
i1&-2 == 0
t
aby0
w.slice(0,-1)
zaproszeniu (oszczędność 2B)?t
zmienna globalna i zostałaby zresetowana z powodu wywołaniaf(s.slice(0,-1))
. Ale znalazłem sposób na obejścies.search`A`>-1
:-)JavaScript (ES6), 112 bajtów
Ta logika kodu jest dość podobna do tej używanej w istniejących odpowiedziach JS z ETHproductions i Neila . Ale używa podstawowej tablicy do śledzenia napotkanych sekwencji Blackjacka, a nie a
Set
.Sformatowane i skomentowane
Przypadki testowe
Pokaż fragment kodu
źródło
05AB1E ,
40 39 38 3736 bajtów-4 Dzięki Emignie
Wypróbuj online!
Musimy wykonać dekrementację -> podciąg -> inkrementację, aby karty twarzy były reprezentowane przez jedną cyfrę.
źródło
S
ponieważÇ
zmienia ciąg w listę kodów znaków."SIPJ"
może być„èµJu
„
w dokumentacji tego sposobu.Ç<çJŒÙ'@0:)vy„èµJuS9:S>D1å2‚T*>sOå}O
jesteś o 1 bajt krótszy od mojej odpowiedzi :)Narzędzia Bash + Unix,
145142141 bajtówWypróbuj online!
Przebiegi testowe:
źródło
PHP, 240 bajtów
Nie golfowany:
Wypróbuj tutaj!
źródło
$i
nie został zadeklarowany. Dodano 4 bajty i działa idealnie.