Golf golf!
Ini adalah tantangan pertama saya, jadi harap lembut! Tantangannya adalah untuk menulis program yang akan menghasilkan skor yang benar untuk tata letak dalam permainan kartu "Golf."
Permainan kartu Golf memiliki banyak variasi. Aturan rumah yang saya gunakan mengikuti aturan standar untuk Six-Card Golf yang diberikan oleh Pagat, dengan satu perbedaan kecil. Sudah ada tantangan serupa di sini, tetapi saya pikir yang ini lebih menarik karena mengharuskan Anda untuk mempertimbangkan orientasi kartu.
Setiap pemain memiliki tata letak kartu 2x3. Pada akhir setiap putaran semua kartu menghadap ke atas dan diberi skor sebagai berikut:
- Setiap ace menghitung 1 poin.
- Masing-masing dua jumlah dikurangi dua poin.
- Setiap kartu angka dari 3 hingga 10 nilai nominal.
- Setiap Jack atau Queen mencetak 10 poin.
- Setiap Raja mencetak poin nol.
- Sepasang kartu yang sama dalam kolom yang sama mencetak poin nol untuk kolom (bahkan jika kartu yang sama berpasangan).
- Seperangkat tiga kartu yang sama dalam baris yang sama skor poin nol untuk baris (bahkan jika kartu yang sama adalah dua).
Memasukkan
Input dapat berupa string atau larik apa pun.
Keluaran
Integer mewakili skor tangan Golf.
Contohnya
Contoh-contoh ini menggunakan notasi A23456789TJQK
tetapi Anda tidak perlu menggunakan notasi itu dalam jawaban Anda.
Layout
AK3
J23
Score
9
-----------------------
Layout
25Q
25J
Score
20
-----------------------
Layout
T82
T8A
Score
-1
-----------------------
Layout
QQQ
234
Score
5
-----------------------
Layout
TJQ
QTJ
Score
60
-----------------------
Layout
888
382
Score
1
-----------------------
Layout
888
888
Score
0
Ini kode golf, jadi jawaban tersingkat dalam byte menang!
sumber
A23456789TJQK
tetapi Anda tidak perlu menggunakan notasi itu dalam jawaban Anda."JJJ 2J2
->-4
.Jawaban:
Jelly , 9 byte
Cobalah online!
-1 terima kasih kepada Jonathan Allan .
[[A, B, C], [D, E, F]]
A
F
sumber
Haskell ,
10710398 byteCobalah online!
Mengambil keuntungan dari kenyataan hanya ada dua baris. Kami menggandakan iterate atas baris mengambil satu baris
r
dan satu bariso
. Ketika mereka berada di baris yang sama hasilnya akan selalu nol (karena pencocokan "kolom") jadi kami hanya akan mempertimbangkan dua iterasi di manar
dano
merujuk ke baris yang berbeda. Saya nol baris dengan terlebih dahulu memeriksa apakah ada entri di baris tidak sama dengan yang pertama. Jika semua baris sama, ini akan salah dan daftar ini akan kosong, dengan jumlah 0. Kalau tidak, saya zip baris ini dengan yang lain dan beralih ke pasangan yang tidak sama (ini nol kolom yang sama di sama cara). Akhirnya saya mengindeks daftar peringkat kartu yang dimulai dengan -2 padding dengan spasi yang diperlukan untuk memetakan setiap peringkat ke nilainya. Saya hanya harus menggunakanmin 10
untuk menjepit indeks itu untuk membuat jack dan ratu berharga 10 daripada 11 dan 12.EDIT: terima kasih kepada @xnor karena telah melepas 4 byte! Saya tidak tahu Anda bisa meletakkan pengidentifikasi langsung setelah literal angka yang benar-benar keren!
EDIT2: Sekali lagi terima kasih kepada @xnor untuk 5 byte lainnya! Ide bagus untuk beralih pada baris seperti itu
sumber
10
, dan lebih pendek untuk menghilangkan@(a:_)
dan bukannya menulisr!!0
untuka
.a%a
danb%b
nol, sepertinya Anda dapat menentukanf
secara langsung dengan mengulangi beberapa baris seperti ini .Arang , 50 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:
Baca tata letak menjadi array.
Inisialisasi skor menjadi nol.
Saring pada input, hapus karakter yang sama dengan semua karakter di baris atau kolomnya.
Ganti setiap karakter yang tersisa.
2
skor-2
.A
skor1
. (4 byte ini dapat dihapus jika1
digunakan untuk menunjukkan1
, tapi IMHO itu penyalahgunaan format input.)Jangan lakukan apa pun untuk
K
.Jika tidak, angka akan mendapatkan nilainya dan huruf lainnya akan mendapat nilai
10
.Keluarkan jumlah ke string untuk cetakan implisit.
sumber
J ,
3928 byteCobalah online!
Penghargaan untuk Erik the Outgolfer dan Jonathan Allen untuk ide input encoding.
penjelasan
Solusi yang sangat "J". Saya akan menjelaskan dengan contoh ...
Mari kita masukan:
dan terapkan pengodean ini:
yang menghasilkan:
Mari kita lihat bagian pertama dari solusinya, pilih beberapa detail untuk memulai:
Kata ini, ambil input
]
dan transposnya,|:
lalu buat "tabel perkalian" dari semua kombinasi, kecuali alih-alih perkalian, kita akan menggunakan kata kerja dalam tanda kurung. Penentu peringkat"1
memastikan bahwa kita mengambil semua kombinasi baris dari kedua argumen, tetapi karena baris transpos adalah kolom dari matriks asli, ini berarti kita akan mengambil semua kombinasi baris dan kolom. Artinya, kami akan melakukan:Sekarang
verb
kita berlaku untuk masing-masing kombo ini+:&(1=#@~.)
dan kata kerja ini mengembalikan false jika "salah satu argumen terdiri dari satu item berulang" dan benar sebaliknya. Ini melakukan ini dengan mengambil nub, atau uniq~.
, menanyakan apakah panjangnya satu1=#
, dan mengambil hasil juga+:
.Artinya, ini akan mengembalikan topeng boolean dengan bentuk yang sama dengan matriks input, tetapi dengan nol untuk setiap item dalam baris atau kolom dari semua item yang sama.
Sekarang kita cukup menggandakan matriks asli oleh topeng ini dan mengambil lantai
]<.@*
:dan kemudian ratakan dan jumlah hasil itu:
+/@,
sumber
JavaScript (ES6),
97 9593 byteMengambil input sebagai larik 2 array 3 karakter.
Cobalah online!
Berkomentar
sumber
Japt , 22 byte
Cobalah
sumber
PHP ,
145109 byteSetelah menggunakan
A23456789TJQK
pengkodean default untuk input dan tidak mendapatkan hasil yang baik, saya beralih menggunakan pengkodean ini mirip dengan jawaban lain:Input adalah array dua dimensi dalam format ini:
[[1,0,3],[10.1,-2,3]]
. Pada dasarnya memeriksa baris (menggunakanmin
danmax
) dan kolom untuk setiap kartu untuk tidak mengandung nilai yang sama dan kemudian menambahkan nilai kartu ke skor total dan pada akhirnya mencetak bagian bilangan bulat dari skor total.Cobalah online! (Catatan: TIO untuk PHP rusak saat ini, karena peningkatan versi yang salah, tetapi harus kembali OK)
sumber
Python 3 , 79 byte
Cobalah online!
Menggunakan format input yang sama dengan beberapa jawaban dan nilai lainnya1 , - 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 10.1 , 10.2 , 0 untuk kartu.
Python 3 , 118 byte
Format input lebih mudah dibaca
Cobalah online!
sumber
Kotlin , 159 byte
Lambda mengambil 1,3456789TJQ0 sebagai input. Kode luar mengambil A23456789TJQK sebagai input, mengubah kartu as, dua, dan raja sehingga matematika berhasil, dan menampilkan kartu & skor.
Cobalah online!
sumber