Pengantar:
Karena hampir Halloween, saya hanya memikirkan beberapa tantangan bertema Halloween yang acak. Akhirnya saya membaca halaman wikipedia Frankenstein , dan menemukan teks berikut:
Makhluk itu
Bagian dari penolakan Frankenstein terhadap ciptaannya adalah fakta bahwa ia tidak memberikan nama, yang menyebabkan kurangnya identitas. Sebaliknya itu disebut dengan kata-kata seperti "celaka", "monster", "makhluk", "setan", "iblis", "iblis", "iblis", dan "itu". Ketika Frankenstein bercakap-cakap dengan makhluk itu di Bab 10, ia menyebutnya sebagai "serangga jahat", "monster yang dibenci", "iblis", "iblis celaka", dan "iblis yang dibenci".
Tantangan:
Diberikan dua bilangan bulat (tahun dan bab), menghasilkan string berdasarkan aturan berikut:
- Jika tahun ini kurang dari 1818: menghasilkan string kosong †
- Jika tahun ini tepat tahun 1818 dan bab di bawah 10: mengeluarkan string acak dari daftar
["wretch", "monster", "creature", "demon", "devil", "fiend", "it"]
- Jika tahun tepat 1818 dan bab 10 atau lebih tinggi: output secara acak string dari daftar
["vile insect", "abhorred monster", "fiend", "wretched devil", "abhorred devil"]
- Adalah tahun di atas 1818 (dan dengan demikian buku itu diterbitkan), kembali
"Frankenstein's Monster"
.
Aturan tantangan:
- Anda dapat memilih apakah akan menghasilkan huruf kecil, huruf besar, atau kombinasi.
- Tahun akan selalu di kisaran
1500-2017
- Bab ini akan selalu berada dalam jangkauan
1-24
(jika saya googled dengan benar, buku ini memiliki 24 bab) - † Alih-alih keluaran string kosong untuk opsi 1, Anda juga diperbolehkan untuk output
null
,undefined
,false
,0
, atau nilai lain pilihan Anda bukan bagian dari tiga pilihan lain (sebutkan apa yang telah Anda digunakan dalam jawaban Anda). - Output mungkin tidak mengandung spasi / tab spasi tambahan, atau baris baru terkemuka. Ini mungkin mengandung satu baris tambahan opsional.
Aturan umum:
- Ini adalah kode-golf , jadi jawaban tersingkat dalam byte menang.
Jangan biarkan bahasa kode-golf mencegah Anda memposting jawaban dengan bahasa yang bukan kode. Cobalah untuk memberikan jawaban sesingkat mungkin untuk bahasa pemrograman 'apa pun'. - Aturan standar berlaku untuk jawaban Anda, jadi Anda diperbolehkan menggunakan STDIN / STDOUT, fungsi / metode dengan parameter yang tepat, program lengkap. Panggilanmu.
- Celah default dilarang (terutama 'Angka acak palsu' ).
- Jika memungkinkan, silakan tambahkan tautan dengan tes untuk kode Anda.
- Juga, silakan tambahkan penjelasan jika perlu.
Kasus uji:
year,chapter possible outputs:
1700,1 ""; null; undefined; false; 0; etc.
1700,12 ""; null; undefined; false; 0; etc.
1817,10 ""; null; undefined; false; 0; etc.
1818,1 "wretch"; "monster"; "creature"; "demon"; "devil"; "fiend"; "it"
1818,9 "wretch"; "monster"; "creature"; "demon"; "devil"; "fiend"; "it"
1818,10 "vile insect"; "abhorred monster"; "fiend"; "wretched devil"; "abhorred devil"
1818,11 "vile insect"; "abhorred monster"; "fiend"; "wretched devil"; "abhorred devil"
1818,18 "vile insect"; "abhorred monster"; "fiend"; "wretched devil"; "abhorred devil"
1819,1 "Frankenstein's Monster"; "frankenstein's monster"; "FRANKENSTEIN'S MONSTER"
1819,18 "Frankenstein's Monster"; "frankenstein's monster"; "FRANKENSTEIN'S MONSTER"
2017,24 "Frankenstein's Monster"; "frankenstein's monster"; "FRANKENSTEIN'S MONSTER"
<...>
menganggap gumpalan?Python 2 ,
227220214 byteCobalah online!
sumber
'abhorred '
ke daftar di bagian bawah juga, karena sudah digunakan dua kali. ('wretch'
juga dimungkinkan, tetapi byte-count tetap sama.)Perl 5 , 172 byte
Kode 171 byte +1 untuk
-p
.Cobalah online!
Penjelasan
Cukup standar, hanya hal yang sedikit tidak biasa adalah menggunakan 'operator pesawat ruang angkasa' (
<=>
) dengan1818
untuk mengembalikan-1
,,0
atau1
, jika input$_
kurang dari, sama dengan, atau lebih besar daripada1818
mengembalikan indeks data sumber terakhir, pertama, atau kedua . Juga, saya suka operator ikan !sumber
$F=fiend
, tetapi setelah pengujian itu berakhir menjadi panjang yang sama untuk melakukannya.$
sigil :($}
nama variabel apa ...$W
saya harus menggunakan${W}
karena itu di sebelah surat lain.C # (Visual C # Compiler) ,
225209 byteCobalah online!
-16 Terima kasih kepada Kevin Cruijssen
Tidak terlalu ringkas, tapi saya berharap C # mengambil lebih banyak ruang untuk menyatakan dan menggunakan string berulang seperti cara jawaban Python daripada hanya mengulanginya. Pelari uji yang disertakan memiliki bagian
Thread.Sleep(1)
dalam penghitungan kasus uji karena penyemaian default untukRandom()
menggunakan waktu saat ini dan fungsi sebenarnya berjalan cukup cepat untuk berakhir dengan seed yang sama pada putaran berikutnya tanpa penundaan.Panggilan ke func menggunakan sintaks currying,
f(year)(chapter)
(atau apa pun nama fungsi disimpan bukan f)sumber
fiend
di tengah-tengah string-array tunggal, karena itu hadir di kedua daftar. Anda dapat menyimpan beberapa byte dengan menggantinew[]{"wretch","monster","creature","demon","devil","it","fiend","vile insect","abhorred monster","wretched devil","abhorred devil"}
dengan"wretch,monster,creature,demon,devil,it,fiend,vile insect,abhorred monster,wretched devil,abhorred devil".Split(',')
(-16 bytes)","
hanya,
membuat lebih lama.Split(',')
dibandingkannew[]{}
dengan lebih dari beberapa item.Bash,
229,206,197, 179 bytepenjelasan tentang ekspansi brace / variabel
pertama kali diperluas ke
maka variabel m diperluas
Namun berikut ini tidak berfungsi karena
$w
akan pertama kali bergabung denganed
danwed
tidak didefinisikan dan akan diperluas ke string kosong.itu bisa dilakukan dengan menambahkan kurung kurawal di sekelilingnya tetapi akan lebih lama
TIO
sumber
wretch
danmonster
( 225 byte ).APL (Dyalog Unicode) , 189 byte
Cobalah online!
Untuk menguji, tambahkan saja test case ke braket keriting terakhir seperti:
Terima kasih banyak kepada @ngn untuk membantu mengatasi masalah spasi putih terkemuka.
Bagaimana itu bekerja:
Perlu dicatat bahwa APL mengartikan string sebagai array ( vektor ) karakter, sehingga
'wretch' 'creature'
akan ditafsirkan dalam bahasa lain sebagai[[w,r,e,t,c,h],[c,r,e,a,t,u,r,e]]
Ini adalah fungsi pembantu:
Ini adalah fungsi utama, yang akan dipecah menjadi 3 bagian untuk pemahaman yang lebih baik:
Bagian 1:
Bagian 2:
Bagian 3:
sumber
Java (OpenJDK 8) ,
275269255207203 byteCobalah online!
sumber
Object
alih - alih mencetak langsung:y->c->y<1818?0:y>1818?"Frankenstein's monster":"wretch,monster,creature,demon,devil,fiend,it,vile insect,abhorred monster,fiend,wretched devil,abhorred devil".split(",")[(int)(Math.random()*(c<9?7:5))+(c<9?0:7)]
fiend
(yang ada di kedua daftar) di tengah:y->c->y<1818?0:y>1818?"Frankenstein's monster":"wretch;monster;creature;demon;devil;it;fiend;vile insect;abhorred monster;wretched devil;abhorred devil".split(";")[(int)(Math.random()*(c<10?7:5))+(c<10?0:6)]
( 207 byte )IntFunction
s instead ofFunction<Integer>
to get it working.PHP,
184176 bytesRun with
-n
and give year and chapter as command line arguments or try it online.index and thus result evaluate to
NULL
for year<1818, leading to empty output.sumber
$argv[1]<=>1818
do? I've never ever seen that.Javascript (ES6), 205 bytes
Returns
0
if the year is less than 1818Show code snippet
sumber
Javascript 199 bytes
sumber
C, 380 BYTES
sumber
"Frankenstein's Monster"
directly instead of making a variable for it. Also, where is theyear
andchapter
coming from now? I don't see it as parameters of the method. Tips for golfing in <all languages> and Tips for golfing in C might be useful. Enjoy your stay! :)void o(int y,int c){char*b[]={"wretch","monster","creature","demon","devil","fiend","it"},*a[]={"vile insect","abhorred monster","fiend","wretched devil","abhorred devil"};printf("%s",y<1818?0:y==1818?c>9?a[rand()%6]:b[rand()%7]:"Frankenstein's Monster");}
256 bytes Try it here! (I removed all unnecessary spaces, renamed method/variables/parameters to single letter; removed some unnecessary parenthesis at the ternary-if; singleprintf
; changed<10
to>9
; etc.) Not sure whyrand()
isn't working in TIO.. :SMBASIC, 288 bytes
sumber
05AB1E,
114110 bytesOutputs
0
when the year is below1818
.Try it online or verify all test cases.
Explanation:
See this 05AB1E tip of mine (sections How to use the dictionary?; How to compress strings not part of the dictionary?; How to compress large integers?; and How to compress integer lists?) to understand why:
…뢼–±¹
is"creature devil monster"
;.•ʒ¦Ë"ìËM₂G¶тá≠•
is"demon fiend it wretch "
;.•1ÏiT¥Ƶʒ“T¡Äg… 5ÀΘO¼™Ãí?ιË%4₄‡‡λYιi¾н•
is"abhorred devilabhorred monsterfiendvile insectwretched devil"
;•Jtm•
is1249548
and•Jtm•17в
is[14,16,5,11,14]
;'ì³
is"liechtenstein "
;’¡¬ÿÿ±¹’
is"frankÿÿmonster"
;Ž7X
is1818
.sumber
JavaScript, 194 B
sumber