Di Dungeons & Dragons , hampir semuanya diputuskan dengan menggulung dadu. Biasanya, jika gulungan lebih besar dari atau sama dengan nilai yang ditentukan, upaya Anda untuk melakukan apa pun yang ingin Anda lakukan berhasil, dan gagal jika tidak. Paling umum, dadu 20 sisi (alias d20) digunakan untuk menggulung.
Di lain waktu, sistem tantangan keterampilan digunakan. Ini mirip dengan sistem sederhana yang dijelaskan di atas, tetapi keberhasilan ditentukan oleh apakah pemain berhasil menggulung individu beberapa kali sebelum gagal dalam beberapa kali. Sebagai contoh, pemain mungkin mencoba untuk mengambil beberapa kunci pada pintu dengan jumlah kunci yang terbatas. Masing-masing gulungan yang berhasil mewakili secara sukses memetik salah satu kunci, dan gulungan yang gagal secara individu mewakili pemecahan kunci-t. Keberhasilan keseluruhan berarti berhasil mengambil semua kunci sebelum menghancurkan semua kunci-t.
Selanjutnya, gulungan tertentu bisa menjadi gulungan kritis. Pada d20, menggulirkan 1 adalah kegagalan kritis, yang mengakibatkan kegagalan seluruh tantangan secara langsung (dalam contoh di atas, pemain mungkin secara tidak sengaja memberi tahu penjaga). Menggulirkan 20 adalah keberhasilan yang kritis, menghasilkan segera keberhasilan seluruh tantangan (dalam contoh di atas, pemain mungkin menemukan satu set kunci ke kunci, menghilangkan kebutuhan untuk mengambilnya). Dalam kasus roll kritis, tantangan segera berakhir dan hasilnya diputuskan, terlepas dari jumlah keberhasilan dan kegagalan sebelumnya.
Dalam tantangan ini, Anda akan diberikan kesulitan, jumlah keberhasilan yang dibutuhkan, dan jumlah kegagalan di mana tantangan itu gagal. Anda harus mensimulasikan pemain yang mencoba tantangan, dan mengeluarkan hasilnya.
Memasukkan
3 bilangan bulat, mewakili nilai yang harus dipenuhi atau dilampaui untuk berhasil pada roll individu, jumlah keberhasilan yang dibutuhkan untuk berhasil pada tantangan, dan jumlah kegagalan di mana tantangan itu gagal. Urutan dan format input tidak masalah, selama Anda menentukan urutan apa yang akan Anda gunakan. Kesulitannya adalah antara 1 dan 20, inklusif, dan jumlah keberhasilan dan kegagalan keduanya antara 1 dan 100, inklusif.
Keluaran
Hasil masing-masing gulungan d20 (bilangan bulat, berurutan), dan hasil keseluruhan dari tantangan (nilai kebenaran / falsey). Formatnya tidak masalah, selama masing-masing hasil diurutkan, hasil keseluruhan datang sebelum atau setelah semua gulungan individu (Anda tidak dapat menampilkan hasil keseluruhan di tengah gulungan, misalnya), dan Anda menentukan format output apa yang Anda gunakan dan menggunakannya secara konsisten.
Contoh (nilai dalam tanda kurung adalah untuk penjelasan dan tidak perlu disertakan):
Memasukkan:
12 5 3 (difficulty successes failures)
Keluaran:
15 (success, 1-0)
10 (failure, 1-1)
5 (failure, 1-2)
16 (success, 2-2)
12 (success, 3-2)
15 (success, 4-2)
19 (success, 5-2)
True (overall success)
Memasukkan:
15 2 3 (difficulty failures successes)
Keluaran:
0 (overall failure)
15 (success, 1-0)
12 (failure, 1-1)
13 (failure, 1-2)
Memasukkan:
5 5 10 (successes failures difficulty)
Keluaran:
11 (success, 1-0)
5 (failure, 1-1)
20 (critical success)
1 (overall success)
Memasukkan:
3 10 3 (failures difficulty successes)
Keluaran:
12 (success, 1-0)
11 (success, 2-0)
1 (critical failure)
False (overall failure)
Aturan
- Ini adalah kode-golf , jadi kode terpendek dalam byte menang
- Anda harus secara acak memilih nilai integer antara 1 dan 20 (inklusif) untuk setiap roll. Setiap nilai harus memiliki probabilitas yang sama untuk dipilih (atau sedekat mungkin dengan yang sama).
the number of successes and failures will both be between 1 and 100, inclusive.
Jadi, ya, ada kemungkinan bahwa satu kegagalan menghasilkan kegagalan seluruh tantangan.Jawaban:
JavaScript,
83787675 byteKode ini menghitung secara rekursi keberhasilan dan kegagalan saat terjadi. Ketika salah satu berhasil (
s
) atau kegagalan (f
) telah dihitung ke0
, kami menyelesaikan dengantrue
nilai!s
saats
ini0
atau dengan nilai falsy darif
saatf
ini0
.Output adalah bentuk ekspresi reguler
/^(-\d{1,2})+(0|true)$/
(atau, lebih tepatnya,/^(-[1-9]|-1[0-9]|-20)+(0|true)$/
). Yaitu, input memiliki tanda hubung utama, kemudian nilai roll digambarkan dengan tanda hubung, dan akhirnya hasil akhir (0
atautrue
), yang tidak digambarkan dari roll akhir. Namun, ini masih merupakan tata bahasa yang tidak ambigu karena hasil akhir dan roll akhir selalu dapat dibedakan: karakter terakhir dari output (baik0
ataue
) selalu menunjukkan hasil, dan final0
selalu dibaca secara terpisah dari nomor (s) dari roll terakhir.Output sampel untuk
F(11,3,4)
:Penjelasan:
Kode ini bekerja dengan menggulirkan negatif d20 dan (ab) menggunakan tanda-tanda negatif sebagai pembatas.
Ekspresi angka -minus-boolean bekerja karena
true
danfalse
dilemparkan ke1
dan0
dalam konteks numerik. Dalam hal ini,d>-r
akan terjadi1
jika gulungan gagal dan0
apakah itu berhasil.sumber
Python, 134 byte
Terima kasih Pietu1998 untuk byte yang disimpan
Cukup sederhana, mungkin bisa bermain golf sedikit lebih, tetapi kami membutuhkan sesuatu untuk memulai ini. Cobalah online .
sumber
from random import*
dan jatuhkanrandom.
, gunakanrandint(1,20)
alih-alihrandrange(20)+1
, gantiand
dengan*
. Anda juga diperbolehkan untuk menempatkan hasil akhir di awal output, menghemat ruang.Python 2,
123121 byte(Jawaban ini menggabungkan spasi dan tab , jadi level indentasi pertama adalah spasi tunggal, sedangkan yang kedua adalah tab tunggal.)
Fungsinya
f
mengambil argumen berikut:a
, ambang batas untuk setiap die roll dihitung sebagai keberhasilan,b
, jumlah keberhasilan yang dibutuhkan untuk kesuksesan secara keseluruhan,c
, jumlah kegagalan yang dibutuhkan untuk kegagalan keseluruhan.Pada setiap roll mati
b
atauc
dikurangi (tetapi tidak keduanya). Selama keduanya positif, itu akan berulang lagi, kecuali dalam kasus kegagalan kritis atau keberhasilan kritis.Dengan asumsi tidak ada keberhasilan atau kegagalan kritis, ketika loop selesai
b
atauc
akan menjadi nol, tetapi tidak keduanya. Dalam hal ini fungsi hanya mengembalikan nilai saat ini daric
, yaitu nol (Falsey) jika kita kehabisan semua kegagalan kita, dan positif (Kebenaran) jika kita berhasil.Sebagai bonus, hasilnya memberitahu Anda berapa banyak kegagalan yang tersisa, yang bagus jika ada (katakanlah) lebih banyak kunci untuk dipilih nanti. (Kecuali jika diakhiri pada kegagalan atau kesuksesan yang kritis, dalam hal ini hasilnya akan menjadi boolean bukan int.)
sumber
Pip , 39 byte
Seseorang berkata mereka ingin melihat solusi dalam bahasa golf.
Saya cukup yakin ini tidak menggunakan fitur bahasa yang lebih baru dari pertanyaan. Mengambil input sebagai argumen baris perintah dalam urutan ini: kesulitan, keberhasilan diperlukan, kegagalan diperlukan. Output 0 untuk kegagalan keseluruhan atau bukan nol untuk kesuksesan keseluruhan.Cobalah online!
Pendekatan ini adalah strategi while-loop yang cukup mudah, dengan satu atau dua trik diambil dari solusi lain. Inilah versi dengan komentar, spasi putih, dan beberapa output tambahan:
sumber
Ruby 2.2, 75 byte
Solusi iteratif dasar. Contoh dijalankan:
Mungkin keluaran:
Anda dapat melihatnya berjalan di IDEONE di sini .
sumber
VBA 180 Bytes
Contoh Output
Digit terakhir dari output akan menjadi
0
untukFalse
atau1
untukTrue
. Setiap Roll dipisahkan oleh baris baru. Ini menggunakan VBA built in RNGrnd()
yang dikenal sebagai Not So Random , Tapi ini harus memenuhi persyaratan sebaik mungkin.sumber
SpecBAS - 165 byte
Input harus dimasukkan dalam tingkat kesulitan, keberhasilan, kegagalan.
Rilis baru SpecBAS sekarang memungkinkan "?" bukannya
PRINT
dan menghilangkan kebutuhanLET
di depan penugasan variabel, jadi ini adalah cara yang bagus untuk mencobanya.Karena array berbasis 1 secara default, baris 6 mengembalikan 0/1 jika roll mengalahkan kesulitan dan menambahkan 1 untuk memperbarui indeks yang tepat.
sumber
Perl 6 ,
10199 byteInput adalah array yang dapat berubah yang berisi kesulitan, keberhasilan, kegagalan
Output adalah daftar dua elemen, elemen pertama adalah daftar nilai yang digulung, elemen kedua adalah jumlah kegagalan yang tersisa.
Pemakaian:
sumber