Tugas Anda adalah menemukan berapa banyak urutan Blackjack yang berbeda dapat ditemukan dalam daftar 12 kartu yang dipesan.
Urutan Blackjack didefinisikan sebagai urutan kartu berturut-turut yang jumlah poinnya persis 21. Poin dihitung berdasarkan tabel berikut:
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
Memasukkan
String 12 karakter, menggunakan simbol yang dijelaskan di atas. Kami tidak peduli dengan warna kartu, jadi tidak disediakan.
Contoh:
K6K6JA3Q4389
Keluaran
Jumlah urutan Blackjack yang berbeda yang dapat ditemukan dalam string input.
Contoh:
K6K6JA3Q4389
termasuk dua urutan Blackjack yang berbeda:
JA
, dengan Ace dihitung sebagai 11 poin (10 + 11 = 21)A3Q43
, dengan Ace dihitung sebagai 1 poin (1 + 3 + 10 + 4 + 3 = 21)
Jadi jawabannya 2
.
Aturan
- Dua urutan Blackjack dianggap berbeda jika mengandung kartu yang berbeda atau kartu yang sama dalam urutan yang berbeda. Jika urutan yang sama persis muncul di posisi yang berbeda dalam daftar input, itu harus dihitung hanya sekali.
- Urutan Blackjack mungkin tumpang tindih satu sama lain.
- Setiap jenis kartu dapat muncul hingga 12 kali berturut-turut. (Kami berasumsi bahwa kartu diambil dari setidaknya 3 deck yang berbeda.)
- Jika tidak ada urutan Blackjack dalam string input, Anda harus mengembalikan
0
atau nilai falsy lainnya. - Ini adalah kode-golf, jadi jawaban tersingkat dalam byte menang. Celah standar dilarang.
Uji kasus
Urutan disediakan untuk tujuan informasi, tetapi Anda hanya diminta untuk menampilkan jumlah mereka.
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
sumber
sumber
Jawaban:
Jelly ,
3029 byteCobalah secara Online! atau periksa suite tes
Bagaimana?
Perhatikan bahwa, jika kita selalu menilai kartu as sebagai 1 maka jumlah yang valid hanya 21 dan 11 , yang terakhir dapat diterima jika ace muncul dalam urutan.
sumber
Python 2, 215 byte
Komentar ditambahkan:
sumber
Python ,
134130 byteCobalah online!
Bagaimana?
Fungsi yang tidak disebutkan namanya, mengambil string dengan panjang 12 sebagai
x
.x[i:j]
adalah sepotong string dari i + 1 th ke j th karakter.Irisan diambil sedemikian rupa sehingga kita memiliki semua sublist dengan melintasi dari
i=0
kei=11
denganfor i in range(12)
, untuk masing-masing kita berpindah darij=0
kej=12
denganfor j in range(13)
.(Kita hanya perlu
j=i+1
dan ke atas, tetapi irisan denganj<=i
hanya string kosong, sehingga kita dapat bermain golf 4 byte darifor j in range(i+1,13)
)Ini difilter untuk mereka dengan jumlah yang benar ...
Jumlah yang valid adalah 11 dan 21 jika ada kartu as dalam slice, atau hanya 21 jika tidak.
'A'in x[i:j]
memberi kami informasi ini dan~(v)
melakukan-1-v
, yang kami gunakan untuk mengiris[11,21]
- sehingga jika ace berada dalam urutan yang kami dapatkan[11,21][-2:]
dan jika tidak kami dapatkan[11,21][-1:]
, menghasilkan[11,21]
dan[21]
masing - masing.Jumlah itu sendiri perlu memperlakukan
A
sebagai 1, angka sebagai nilai-nilai mereka, danT
,J
,Q
, danK
sebagai 10. pemetaan ini dicapai dengan pengecoran pertama yang ordinals:" 2 3 4 5 6 7 8 9 T J Q K A"
(tanpa spasi) menjadi[50, 51, 52, 53, 54, 55, 56, 57, 84, 74, 81, 75, 65]
, mengurangkan 48 untuk mendapatkan[ 2, 3, 4, 5, 6, 7, 8, 9, 36, 26, 33, 27, 17]
, mengambilmin
dengan 26 hasil[ 2, 3, 4, 5, 6, 7, 8, 9, 26, 26, 26, 26, 17]
, dan mod (%
) enam belas[ 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10, 1]
, seperti yang dipersyaratkan untuk penjumlahansum(...)
,.Hasil yang disaring ditempatkan ke dalam satu set dengan
{...}
, jadi hanya hasil unik yang tersisa dan panjangnya,len(...)
yang dihitungsumber
05AB1E ,
393837 byteCobalah online!
Penjelasan
sumber
JavaScript (ES6), 123 byte
sumber
0
untukAAAAAAAAAAAA
bukan1
. (A
secara bersamaan dapat 1 dan 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 byteJavaScript (ES6),
144138129128126124 byteUpaya lama di 128:
sumber
s.search`A`>-1
bisa jadi~s.search`A`
-2
, dan1&-2 == 0
t
ke0
dalam.slice(0,-1)
panggilan (menghemat 2B)?t
variabel global dan itu akan diatur ulang karena panggilan kef(s.slice(0,-1))
. Tapi saya menemukan jalan sekitars.search`A`>-1
:-)JavaScript (ES6), 112 byte
Logika kode ini sangat mirip dengan yang digunakan dalam jawaban JS yang ada dari ETHproduksi dan Neil . Tapi itu menggunakan array dasar untuk melacak urutan Blackjack yang ditemui daripada a
Set
.Diformat dan dikomentari
Uji kasus
Tampilkan cuplikan kode
sumber
05AB1E ,
40 39 38 3736 byte-4 Terima kasih kepada Emigna
Cobalah online!
Kita perlu melakukan decrement -> substring -> increment thing sehingga face card diwakili oleh satu digit angka.
sumber
S
sebagaiÇ
mengubah string menjadi daftar kode karakter."SIPJ"
bisa jadi„èµJu
„
dalam dokumentasi.Ç<çJŒÙ'@0:)vy„èµJuS9:S>D1å2‚T*>sOå}O
Kemudian Anda 1 byte lebih pendek dari jawaban saya :)Utilitas Bash + Unix,
145142141 byteCobalah online!
Tes berjalan:
sumber
PHP, 240 byte
Tidak Disatukan:
Coba di sini!
sumber
$i
tidak dinyatakan. Menambahkan 4 byte dan berfungsi dengan baik.