Sunting : Saya belum pernah bermain D & D sebelumnya jadi ketika saya awalnya membuat pertanyaan ini saya tidak benar meneliti itu. Saya minta maaf untuk ini, dan saya membuat beberapa pengeditan yang mungkin membatalkan jawaban untuk tetap setepat mungkin pada aturan 5nd. Maaf.
Penggemar D & D dari Hot Network Question baru-baru ini tampaknya memiliki masalah untuk mengetahui apakah mantra yang dipilih oleh penyihir sejajar dengan kemungkinan - dan saya pikir kita harus membantu!
pengantar
(semua ini sudah dijelaskan dalam pertanyaan yang disebutkan sebelumnya)
Seorang penyihir tahu dua mantra level 1 dari awal (level 1): [1, 1]
Setiap kali penyihir mendapatkan level (kecuali untuk level 12, 14, 16, 18, 19 dan 20) mereka belajar mantra baru (wajib).
Selain itu, ketika naik level seseorang dapat memilih (opsional) untuk mengganti salah satu mantra dengan yang lain.
Mantra yang dipelajari dan diganti haruslah level slot mantera yang valid yang setengah dari level penyihirmu dibulatkan. Lihat tabel ini:
Sorcerer level Highest spell level possible
1 1
2 1
3 2
4 2
5 3
6 3
7 4
8 4
9 5
10 5
11 6
12 6
13 7
14 7
15 8
16 8
17 9
18 9
19 9
20 9
Ini berarti pada level 3 seseorang dapat memiliki level mantra [1, 1, 2, 2]
seperti ini:
Level 1: [1, 1] (initial)
Level 2: [1, 1, 1 (new)]
Level 3: [1, 1, 2 (replaced), 2 (new)]
Tidak perlu memilih mantra level tertinggi yang bisa Anda akses.
Level mantra [1, 1, 1, 1]
sangat valid untuk level 3.
Terakhir, ingat bahwa mengganti mantra adalah opsi opsional untuk setiap level . Ini berarti bahwa beberapa level dapat melewati penggantian, sementara yang lain memanfaatkannya.
Tantangan
Buat program atau fungsi yang membutuhkan bilangan bulat (level) antara 1 dan 20.
Itu juga harus mengambil array bilangan bulat (level mantra) dengan nilai mulai dari 1 hingga 9 dalam urutan apa pun (9 adalah level mantra maksimum).
Output dari program harus berupa nilai kebenaran / kepalsuan yang memvalidasi jika level mantra yang dipilih valid untuk penyihir dari level yang diberikan.
Uji kasus
Level: 1
Spells: [1, 1]
Output: true
Level: 8
Spells: [1, 1, 2, 3, 3, 5]
Ouput: false
Reason: A level 8 can't ever have access to a level 5 spell.
Level: 5
Spells: [1, 1, 1, 2, 2, 2, 3]
Output: false
Reason: A level 5 can't have access to 7 spells
Level: 11
Spells: [3, 4, 4, 4, 4, 5, 5, 5, 5, 5, 6, 6]
Output: false
Reason: Too many spell upgrades.
The highest valid selection for level 11 is
[3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6]
Ini adalah kode-golf - byte terkecil menang!
sumber
[2,2,3,3]
tidak akan mungkin terjadi karena membutuhkan lebih banyak penggantian daripada penyihir level itu yang akan memiliki akses." - bukankah fakta bahwa daftar itu panjangnya 4 daripada alasan yang lebih mendasar di sini? (Saya berasumsi[1,3,2,2,3]
mungkin untuk level 4 dengan pergi dari level 3[1,1,2(replaced),2(new)]
ke[1,3(replaced),2,2,3(new)]
?)Jawaban:
Java (JDK 10) , 191 byte
Cobalah online!
Penjelasan
Tabel 1: Distribusi mantra dimaksimalkan untuk setiap tingkat penyihir, digunakan dari jawaban Axoren pada pertanyaan terkait .
Kredit
sumber
return l<1&java.util.Arrays.equals(m,new int[9]);
bisaz=0;for(int i:m)z+=i;return l+z==0;
sebaliknya. Atau jika nilai-nilai dim
tidak pernah bisa negatif pada akhirnya,==0
bisa jadi<1
.for(int i:m)l|=i;
bahkan lebih pintar! Bagusnew int[]{5,6,6,6,7,7,7,8,8,8,9,9,9,9,9}
). Jika saya masukan mereka turun (new int[]{9,9,9,9,9,8,8,8,7,7,7,6,6,6,5}
, seperti yang tertulis dalam persyaratan input yang saya tulis di bawah golf), itu berhasil. Saya menambahkan test case untuk menunjukkan bahwa itu memang berhasil.Python 3 , 98 byte
Cobalah secara Online!
Tidak Disatukan:
sunting: solusi yang diperbaiki untuk menggunakan aturan D & D yang benar
sumber
print(v(20, [6,6,6,6,7,7,7,8,8,8,9,9,9,9,9])) # False
cetakan benar. Itu harus mencetak salah.min(9,n-1)
.Arang , 51 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Mengambil level mantra dalam urutan naik sebagai string. Penjelasan:
Masukkan level.
Lakukan decoding run-length pada string yang
0544443335
menghasilkan string11111222233334444555566677788899999
. String ini kemudian diiris mulai dari level (1-diindeks) dan berakhir di level dua kali lipat (jika kurang dari 12) atau 6 + 1,5 *, dibulatkan ke atas, kecuali untuk level 19, yang dibulatkan ke bawah. A0
diberi sufiks untuk memastikan tidak ada terlalu banyak mantra.Bandingkan level mantra dengan substring dan cetak a
-
jika tidak ada yang berlebihan.sumber
11113
pada level4
yang merupakan hasil dari tidak ada upgrade opsional, mengambil1
di level 2,1
di level 3 dan3
, di level 4.JavaScript (ES6), 79 byte
(level)(array)
Cobalah online!
Kode uji
Di bawah ini adalah tautan ke beberapa kode uji yang mengambil tingkat penyihir sebagai input dan mengembalikan array level mantra maksimum, menggunakan logika yang sama dengan fungsi di atas.
Cobalah online!
Bagaimana?
Tabel referensi
Jumlah mantra
Level mantra maksimum
sumber
Groovy , 155 byte
Menghasilkan spellbook terbaik, lalu memeriksa apakah spellbook yang masuk ke metode tidak lebih baik.
Tidak disatukan, dengan tipe implisit yang dibuat eksplisit:
Cobalah online!
sumber