Diberi dua daftar gulungan dadu untuk pertempuran di Risiko, program atau fungsi Anda harus menampilkan berapa banyak pasukan yang hilang setiap pemain.
Latar Belakang
Anda tidak harus membaca ini, karena itu hanya latar belakang. Lewati ke "Tugas" subjudul untuk melanjutkan tanpa henti.
Dalam permainan Risiko , satu pemain dapat menyerang pemain lain (pada kenyataannya, ini diperlukan untuk menang). Hasil pertempuran ditentukan oleh lemparan dadu. Setiap pertempuran terjadi sebagai suksesi dari sub-pertempuran di mana setiap pemain dapat kehilangan 2
bagian pasukannya.
Dalam sub-pertempuran, bek dan penyerang masing-masing melempar beberapa dadu yang jumlahnya mungkin bervariasi berdasarkan keadaan yang tidak relevan dengan tantangan ini. Mati penyerang bernilai tertinggi dibandingkan dengan mati bek yang bernilai tertinggi. Jika mati penyerang lebih tinggi dari mati bek, bek kehilangan satu bagian. Jika tidak, penyerang kehilangan satu potong.
Kemudian, jika kedua pemain memiliki setidaknya dua dadu, dadu bernilai tertinggi kedua dari kedua pemain dibandingkan. Sekali lagi, jika mati penyerang lebih tinggi dari mati bek, bek kehilangan satu bagian. Jika tidak, penyerang kehilangan satu potong.
(Defender menang ikatan. Jika bek dan penyerang melempar 4
, maka penyerang kehilangan sepotong.)
Dalam sub-pertempuran dari artikel Wikipedia ini, dadu penyerang berwarna merah dan dadu pembela putih. Dadu penyerang tertinggi adalah 4
dan dadu pembela tertinggi adalah 3
. Karena penyerang lebih tinggi, bek kehilangan sepotong. Tertinggi kedua adalah 3
untuk penyerang dan 2
untuk bek. Karena penyerang sekali lagi lebih tinggi, bek kehilangan bagian lain. Jadi dalam sub-pertempuran ini, penyerang tidak kehilangan bagian dan bek kalah2
bagian.
Perhatikan bahwa potongan tertinggi ketiga tidak dibandingkan. Ini karena bek tidak memiliki lebih dari dua dadu dalam satu sub-pertempuran, sehingga tidak ada potongan tertinggi ketiga yang bisa dibandingkan.
Tugas
Mengingat gulungan dadu yang tidak disortir (bilangan bulat dalam kisaran 1 hingga 6 inklusif) dari penyerang dan pembela sub-pertempuran Risiko dalam bentuk apa pun yang mudah, mengeluarkan jumlah bidak tentara yang hilang setiap pemain. Outputnya mungkin dalam bentuk apa pun, asalkan memiliki output yang berbeda untuk menunjukkan lima kemungkinan. Anda harus menunjukkan apa output yang berbeda dalam pertanyaan Anda.
Output ditentukan sebagai berikut: Mulai dengan def=0
dan atk=0
. Jika nilai terbesar dari daftar gulungan dadu penyerang lebih besar dari nilai terbesar dari daftar gulungan dadu dari pembela, maka kenaikan def
. Kalau tidak, increment atk
.
Jika kedua daftar gulungan dadu memiliki panjang setidaknya 2
, maka: jika nilai terbesar kedua dari daftar gulungan dadu penyerang lebih besar dari nilai terbesar kedua dari daftar, maka kenaikan def
dan penambahan atk
.
Akhirnya, program atau fungsi harus menampilkan pengidentifikasi unik untuk masing-masing dari 5 kemungkinan keluaran berikut:
╔═══╦═══╗
║atk║def║
╠═══╬═══╣
║ 1 ║ 0 ║
║ 0 ║ 1 ║
║ 2 ║ 0 ║
║ 1 ║ 1 ║
║ 0 ║ 2 ║
╚═══╩═══╝
Contoh
Defender: [3, 2]
Penyerang: [2, 4, 1]
Maksimal bek 3
dan maks penyerang adalah 4
. 4>3
, jadi def=1
Bek 2
kedua adalah dan penyerang kedua adalah 2
. Not(2>2)
, Jadi atk=1
. Outputnya kemudian bisa [1,1]
.
Uji Kasus
Defender
Attacker
Output (as [def,atk])
-----
[1]
[1]
[0,1]
-----
[6,6]
[1,1,1]
[0,2]
-----
[1,2]
[5,2,3]
[2,0]
-----
[5]
[3,4]
[0,1]
-----
[4]
[4,5]
[1,0]
-----
[1,3]
[1,2,3]
[1,1]
-----
[4]
[4,5,6]
[1,0]
-----
[4,5]
[6,2]
[1,1]
-----
[5]
[6,1,3]
[1,0]
-----
[5,5]
[4,4,1]
[0,2]
-----
[2,5]
[2,2]
[0,2]
-----
[6,6]
[4,4,3]
[0,2]
-----
[2,1]
[4,3]
[2,0]
-----
[4]
[1,5]
[1,0]
-----
[1]
[5,2]
[1,0]
-----
[6,2]
[4]
[0,1]
-----
[4,2]
[2,5,5]
[2,0]
-----
[2]
[6,6,2]
[1,0]
-----
[6]
[2,6]
[0,1]
-----
[3,1]
[1]
[0,1]
-----
[6,2]
[3,5,2]
[1,1]
-----
[4,2]
[1,1]
[0,2]
-----
[4,3]
[5,4,1]
[2,0]
-----
[5,6]
[1,2]
[0,2]
-----
[3,2]
[4,4]
[2,0]
-----
[2]
[6,3,4]
[1,0]
-----
[1,4]
[6,2,4]
[2,0]
-----
[4,2]
[2,5,4]
[2,0]
-----
[5]
[6,2,1]
[1,0]
-----
[3]
[2,5,4]
[1,0]
-----
[5,4]
[2]
[0,1]
-----
[6,3]
[2,6,5]
[1,1]
-----
[3,1]
[4]
[1,0]
-----
[4]
[6,6,5]
[1,0]
-----
[6,3]
[4,2]
[0,2]
-----
[1,6]
[5,4]
[1,1]
-----
[3,6]
[4,4]
[1,1]
-----
[5,4]
[5,1,1]
[0,2]
-----
[6,3]
[5,4]
[1,1]
-----
[2,6]
[1,2]
[0,2]
-----
[4,2]
[3,5,5]
[2,0]
-----
[1]
[1,2,1]
[1,0]
-----
[4,5]
[1,6]
[1,1]
-----
[1]
[3,5,1]
[1,0]
-----
[6,2]
[6,2]
[0,2]
Implementasi sampel
Python 2 atau 3
def risk(atk_rolls,def_rolls):
# set the rolls in descending order, e.g. [5,3,2]
atk_rolls = sorted(atk_rolls,reverse = True)
def_rolls = sorted(def_rolls,reverse = True)
# minimum length.
minlen = min(len(atk_rolls),len(def_rolls))
atk_lost = 0
def_lost = 0
# compare the highest-valued rolls
if atk_rolls[0]>def_rolls[0]:
def_lost += 1
else:
atk_lost += 1
if minlen == 2:
# compare the second-highest-valued rolls
if atk_rolls[1] > def_rolls[1]:
def_lost += 1
else:
atk_lost += 1
return [def_lost, atk_lost]
Spesifikasi
- Input dapat diambil sebagai bentuk apa pun yang hanya mengkodekan dengan jelas gulungan pembela dan gulungan penyerang.
- Output mungkin dalam bentuk apa pun yang menyediakan output unik untuk masing-masing dari lima kemungkinan yang tercantum di atas.
- Gulungan bek adalah daftar
1
atau2
bilangan bulat di set[1,2,3,4,5,6]
. Gulungan penyerang adalah daftar1
untuk3
bilangan bulat di set[1,2,3,4,5,6]
. - Karena ini adalah kode-golf , kode terpendek di setiap bahasa menang! Jangan tidak membiarkan jawaban dalam bahasa golf mencegah Anda dari jawaban postingan dalam bahasa lain.