- Alice (A) dan Bob (B) memutuskan untuk bertempur.
- Setiap kombatan memiliki 10 kesehatan.
- Mereka bergiliran menggulung dadu 6 sisi untuk kerusakan.
- Kerusakan itu dihapus dari kesehatan lawan mereka.
- Pada akhirnya Alice atau Bob, akan mengalahkan musuh mereka.
Tunjukkan padaku bagaimana pertempuran berlangsung. Mengeluarkan kode-kode ini untuk tindakan yang telah terjadi.
Menyerang
B a A
^ Combatant
^ Action (attack)
^ Target
Gulungan
B r 4
^ Combatant
^ Action (roll)
^ Value
Perubahan kesehatan
A h 6
^ Combatant
^ Attribute (health)
^ Value
Menang
A w
^ Combatant
^ Action (win)
Contoh output:
A a B
A r 4
B h 6
B a A
B r 6
A h 4
A a B
A r 6
B h 0
A w
Berikut aturannya:
- Tulis dalam bahasa apa pun.
- Gulungan tunggal dadu harus memiliki peluang yang sama untuk menghasilkan salah satu dari angka 1, 2, 3, 4, 5, atau 6.
- Alice selalu dimulai (Bob sopan, dengan cara kuno).
- Keluarkan tindakan untuk setiap belokan.
- Anda harus melaporkan serangan, gulungan, kerusakan, dan menangkan tindakan.
- Kombatan adalah huruf besar, tindakan adalah huruf kecil.
- Itu tidak harus secara konsisten menghasilkan hasil yang sama.
- Harus ada setidaknya satu karakter spasi putih antara kombatan output, aksi dan nilai.
- Tindakan menang terjadi ketika lawan memiliki kesehatan nol atau kurang.
- Semua bagian dari suatu tindakan harus berada pada baris yang sama.
- Seharusnya ada satu tindakan per baris.
- Bytes paling sedikit menang.
Miliki itu!
Jawaban:
05AB1E , 49 byte
Cobalah online!
Penjelasan
sumber
Python 3 , 131 byte
Cobalah online!
-8 Bytes berkat officialaimm
-2 Bytes berkat ChooJeremy
sumber
p=print
akan menghemat sekitar 8 byte.randint(1,6)
dapat diganti denganid(X+Y)//3%6+1
, meskipun distribusinya tidak cukup seragam.C (gcc) ,
146141 byteCobalah online!
De-golf:
sumber
a=65+t,b=66-t
?A*B>0
akan menghemat beberapa byte.A*B
akan menghemat lebih banyak, tapi aku agak terburu-buru atm. Saya akan memperbarui di malam hariPython 3 , 127 byte
Ini merupakan peningkatan pada jawaban @HyperNeutrino yang tidak cocok dengan komentar. Lihat penjelasan di bawah ini.
Cobalah online!
Sebuah pencarian epik untuk roll dadu python yang lebih pendek
TL; DR: Dimungkinkan untuk memotong 4 byte dari roll dadu python standar dengan menggunakan enkripsi RSA.
Saya ingin melihat apakah roll dadu python standar ( 32 byte ) dapat dipersingkat sedikit:
Secara khusus,
id(x)
cukup nyaman untuk membawa beberapa nilai non-deterministik ke dalam program. Ide saya kemudian adalah untuk hash nilai ini untuk menciptakan keacakan yang sebenarnya. Saya mencoba beberapa pendekatan, dan salah satunya terbayar: enkripsi RSA .Enkripsi RSA, karena kesederhanaan, hanya membutuhkan beberapa byte:
m**e%n
. Nilai acak berikutnya kemudian dapat dibuat dengan mengenkripsi yang sebelumnya. Dengan asumsi(e,n)
kunci tersedia, gulungan dadu dapat ditulis dengan 22 byte :Itu berarti kita memiliki sekitar 10 byte untuk mendefinisikan kunci RSA yang valid. Di sini saya beruntung. Selama percobaan saya, saya mulai menggunakan Mersenne prime M67 hanya untuk kemudian menyadari bahwa Mersenne membuat kesalahan termasuk M67 dalam daftar. Ternyata menjadi produk
p=193707721
danq=761838257287
. Saya telah menemukan modulus saya:Sekarang, eksponen dan orang yang pantas menerima Charmichael
(p-1)*(q-1)
harus menjadi koprime. Untungnya lagi, bilangan prima pertama yang tidak membagi jumlah n hanya panjang satu digit: 7. Rol dadu kemudian dapat ditulis menggunakan 28 byte (4 byte kurang dari pendekatan standar):Satu hal yang baik dengan M67 adalah bahwa nilai acak yang dihasilkan memiliki 66 bit, yang lebih dari RNG 64 bit yang biasa. Juga, penggunaan RSA memungkinkan untuk kembali ke waktu dengan mendekripsi nilai saat ini beberapa kali. Berikut adalah kunci enkripsi dan dekripsi:
Saya jelas bukan ahli dalam statistik atau kriptografi, jadi saya tidak bisa memastikan apakah RNG ini memeriksa kriteria untuk "keacakan yang baik". Saya memang menulis patokan kecil yang membandingkan standar deviasi kemunculan gulungan dadu 1 hingga 6 menggunakan RNG yang berbeda. Sepertinya solusi yang diusulkan berfungsi seperti yang lainnya.
sumber
JavaScript (ES6), 122 byte
Cobalah online!
sumber
Java (JDK 10) , 180 byte
Cobalah online!
Kredit
sumber
var
? o.Ô Saya benar-benar perlu untuk menyelidiki beberapa spesifikasi baru segera .. Bagaimanapun, Anda dapat golf 4 byte dengan mengubah char-array ke int-array:v->{var r="";int P[]={65,66},p=0,H[]={10,10},h=0;for(;H[0]*H[1]>0;)r+=r.format("%3$c a %4$c%n%3$c r %d%n%4$c h %d%n",h+=Math.random()*6-h+1,H[p]-=h,P[p],P[p^=1]);return r+=P[p^1]+" w";}
65 w
bukanA w
. Itu sebabnya saya mengekstraknya dariint ...
pernyataan: untuk bermain golf beberapa byte ;-)v->{var r="";int p=0,H[]={10,10},h=0;for(;H[0]*H[1]>0;)r+=r.format("%3$c a %4$c%n%3$c r %d%n%4$c h %d%n",h+=Math.random()*6-h+1,H[p]-=h,p+65,(p^=1)+65);return r+(p<1?"B":"A")+" w";}
( 181 byte )Perl 5 ,
938887 byteCobalah online!
sumber
Ruby ,
122 120 96 9291 byteDisimpan 1 byte berkat Asone Tuhid .
Cobalah online!
sumber
["A", "a", "B"]
? Jika demikian, saya punya ini solusi 96-byte.?(p [x,?w]):
dengan?p([x,?w]):
Java 8, 230 byte
Catatan: sudah ada jawaban Java yang jauh lebih pendek, jadi pastikan untuk membatalkannya ! Saya menggunakan pendekatan yang sama sekali berbeda, jadi saya pikir itu layak untuk diposkan juga.
Penjelasan:
Cobalah online.
sumber
C (gcc) , 142 byte
Cobalah online!
sumber
Batch, 174 byte
Penjelasan:
%
referensi variabel diganti pada waktu parse. Ini memiliki dua manfaat bermanfaat:%d%-=r
kurangir
dari variabel yang dinamai olehd
(yaitu referensi tidak langsung)set c=%d%&set d=%c%
hanyalah swap lurus.sumber
PHP 7.1: 159 byte
Jalankan di browser di sini!
PHP 5.6: 156 byte
Jalankan di browser di sini!
Inilah yang tampak seperti solusi PHP 5.6 dengan pemformatan dan komentar:
sumber
Bash, 178 byte
sumber
F #,
238235 byteSaya pikir saya baik-baik saja, tetapi Anda semua jauh melebihi saya!
Cobalah online!
Terima kasih kepada Rogem atas sarannya yang brilian untuk menggunakan A * B> 0 daripada A> 0 && B> 0 (lepas landas 3 byte).
Terima kasih juga kepada officialaimm, yang petunjuk tentang mendefinisikan printf dalam jawaban Python membantu saya mencukur beberapa byte juga.
sumber
A*B>0
akan menyelamatkan Anda lebih banyak.Haskell , 204 byte
Upaya saya dengan Haskell, sayangnya saya tidak bisa membuatnya lebih kompetitif
Cobalah online!
Penjelasan:
sumber
where m=b-x
dapat dimasukkan ke penjaga:|m<-b-x=
.main=putStr=<<q"A "10"B "10.randomRs(1,6::Int)<$>getStdGen
. Anda juga dapat menggunakan daftar dan menggabungkannya untuk menghilangkan mendefinisikan ulang(++)
. Yang terakhir di mana tampaknya tidak bermanfaat hanya dengan menggunakan dib-x
mana - mana.Julia 0,6 , 175 byte
Cobalah online!
Versi panjang dan tidak diserami:
sumber
VBA,
222185179 BytesSolusi rekursif ini melibatkan 3 subs
p lebih pendek dari Debug.Cetak bila digunakan lebih dari 3 kali (hanya 4 dalam solusi ini)Sunting: Sekarang saya tahu bahwa ituDebug.?
adalah alternatif yang dapat diterimaDebug.Print
,Debug.?x
lebih pendek daripada memanggil Sub untuk dicetak.Ini adalah tantangan yang menyenangkan. Jika Anda mengetahui juru bahasa online seperti TIO untuk VB6 / VBScript / VBA, silakan tinggalkan komentar. Kemudian saya dapat memposting tautan ke solusi yang berfungsi.
Jika Anda ingin menguji kode ini dan menginstal Microsoft Excel, Word, Access, atau Outlook (hanya Windows), tekan Alt + F11 untuk membuka VBA IDE. Masukkan modul kode baru (Alt + I, M) dan kosongkan Option Explicit. Kemudian rekatkan kode dan tekan F5 untuk menjalankannya. Hasilnya akan muncul di Jendela Segera (tekan Ctrl + G jika Anda tidak melihatnya).
Sunting 1: Menghapus spasi putih yang editor VBA akan secara otomatis menambahkan kembali. Dikurangi oleh 37 byte
Edit 2: Dihapus Sub p () * untuk menyimpan 6 byte setelah belajar
Debug.?
adalah alternatif yang dapat diterimaDebug.Print
. Memanggil Sub untuk menanganiDebug.?
hanya menghemat byte setelah lebih dari enam panggilan.sumber