Pengantar:
Saya pikir semua orang tahu apa itu Lampu Lava, tetapi jika mereka tidak:
Mereka pada dasarnya tabung gelas yang berisi lilin dalam cairan tembus. Bagian bawah dipanaskan ketika lampu dihidupkan, menyebabkan perubahan kepadatan dan dengan demikian lilin mengapung ke atas. Ketika dingin, ia jatuh lagi, menyebabkan efek yang kita lihat di atas.
Biasanya membutuhkan waktu sekitar 45-60 menit untuk alas lampu naik pada suhu yang cukup tinggi untuk mengubah lilin padat menjadi lilin cair (jika lampu terletak di area pada suhu kamar).
Tantangan:
Dengan bilangan bulat positif yang n
menunjukkan jumlah menit yang telah berlalu sejak kami menyalakan Lampu Lava, menghasilkan keadaan acak Lampu Lava berdasarkan bilangan bulat pada lima level.
Untuk tantangan ini, kami akan mengatakan Lampu Lava berisi total 1000 unit lilin, dan kami memiliki lima tingkat di mana lilin itu berada.
1) Jika di n
bawah 45, Lampu Lava masih memanas, sehingga output akan menjadi empat baris kosong dengan 1000
di bagian bawah:
1000
2) Jika n
berada dalam kisaran [45, 60)
Lampu Lava telah meningkat dalam suhu yang cukup untuk lilin untuk bergerak, tetapi belum terlalu tinggi. Lilin dapat mencapai hingga dan termasuk tingkat ketiga.
3) Jika n
adalah 60
atau lebih tinggi, lilin bisa berada di salah satu dari lima tingkat.
Jadi, dengan bilangan bulat positif n
sebagai input, kami akan menampilkan keadaan acak dengan mempertimbangkan tiga aturan di atas.
Berikut adalah beberapa contoh output:
Output yang mungkin untuk semua n
itu adalah >= 45
:
523
106
371
913
87
Output yang mungkin untuk semua n
itu adalah >= 60
:
73
113
312
5
497
284
55
637
24
Output konstan untuk n
itu adalah <= 44
(dan kemungkinan output untuk apa saja n
):
1000
Aturan tantangan:
- Mungkin ada baris kosong, meskipun level di atasnya tidak kosong.
- Tidak
0
diizinkan di jalur apa pun. Seharusnya kosong saja. - Outputnya agak fleksibel. Anda diizinkan untuk mengeluarkan daftar / larik string / objek alih-alih hasil dibatasi baris baru seperti di atas. Alasan saya mengatakan string / objek adalah karena aturan di atas. Baris kosong harus
""
,null
,[]
, dll, tapi tidak bisa0
atau bilangan bulat negatif (juga tidak bisafalse
) (Ie["", "", 913, "", 87]
untukn >= 45
). Anda juga diizinkan untuk membalik output (Yaitu1000\n\n\n\n
bukan\n\n\n\n1000
atau[87, null, 913, null, null]
bukan[null, null, 913, null, 87]
). - Semua angka harus bilangan bulat. Dapat berupa desimal dengan
0
nilai desimal, tetapi tidak ada angka yang harus memiliki angka desimal, dan bilangan bulat harus selalu dijumlahkan dengan tepat1000
. - Semua kemungkinan output acak berdasarkan
n
harus memiliki peluang yang tidak nol terjadi. - Baris baru yang tertinggal (jadi ada enam jalur output) diizinkan.
Aturan umum:
- Ini adalah kode-golf , jadi jawaban tersingkat dalam byte menang.
Jangan biarkan bahasa kode-golf mencegah Anda memposting jawaban dengan bahasa non-codegolf. Cobalah untuk memberikan jawaban sesingkat mungkin untuk bahasa pemrograman 'apa saja'. - Aturan standar berlaku untuk jawaban Anda, jadi Anda diperbolehkan menggunakan STDIN / STDOUT, fungsi / metode dengan parameter yang tepat dan tipe pengembalian, program lengkap. Panggilanmu.
- Celah default tidak diperbolehkan.
- Jika memungkinkan, silakan tambahkan tautan dengan tes untuk kode Anda.
- Juga, menambahkan penjelasan untuk jawaban Anda sangat dianjurkan.
0
, angka negatif, ataufalse
.n < 60
?n < 45
1 level yang diisi (atas atau bawah tergantung pada urutan Anda memasukkannya), yaitu1000
. Dengan45 <= n < 60
tiga dari lima, dan dengann >= 60
lima. Tetapi output akan selalu mengandung lima 'baris'.Jawaban:
MathGolf ,
2120 byteCobalah online!
Ini adalah jawaban pertama saya dalam bahasa baru saya. Saya mendasarkan solusi saya pada solusi 05AB1E Emigna, tetapi menggunakan beberapa fitur MathGolf yang rapi untuk membuatnya sedikit lebih pendek.
Penjelasan
sumber
Python 2 ,
117113108107106105 byteCobalah online!
Mengembalikan daftar terbalik (pertama di bawah)
Versi yang terinspirasi oleh jawaban stackoverflow di komentar (edgecases lebih mungkin):
Python 2 , 129 byte
Cobalah online!
sumber
333
atau200
untuk 3 atau 5 bagian masing-masing. Saya tidak melihat adanya duri / outlier terhadap0
atau1000
. Atau apakah peluang bagi mereka yang secara astronomis kecil (tetapi masih nol) dibandingkan dengan bilangan bulat dekat333
dan200
?0
atau0-2
atau0-4
), dan dihitung. Kemungkinan tidak ada dari keduanya masuk ke sana, tetapi sangat kecil.JavaScript (ES6), 78 byte
Mengembalikan array yang terbalik di mana level kosong diisi dengan spasi.
Cobalah online!
Berkomentar
sumber
R ,
8584 byte-1 byte terima kasih kepada @Giuseppe
Cobalah online!
Penjelasan (ungolfed):
sumber
NA
diizinkan sebagai baris / elemen kosong, inilah solusi 77 byte ( Coba online! ) Atau solusi 80 byte ( Coba online! ) Jika nama elemennya bermasalahC (gcc) ,
131,116,90,89, 87 byteCobalah online!
Pembaruan : Memperbaiki bug dalam aslinya. Menyatu dalam fungsi pembantu, mengurangi 15 byte tambahan.
Perbarui 2 : -25 byte berkat ErikF.
Perbarui 3 : -1 byte berkat ceilingcat.
Degolf
sumber
puts()
dengan menggabungkan pencetakan menjadi satuprintf()
dan menempatkan pengurangan ke ujung lingkaran. Juga, saya pikir Anda diizinkan untuk memasukkansrand()
inisialisasi ke penelepon. Cobalah online!05AB1E ,
272625 byteMenyimpan satu byte, terima kasih kepada Adnan .
Menyimpan byte lain berkat Kevin Cruijssen .
Cobalah online!
Penjelasan
sumber
5Å0
danǝ
, danε0Û
pada akhirnya. Saya mencoba untuk membuat sesuatu yang lebih pendek, tetapi saya tidak bisa. Saya punya perasaan itu entah bagaimana masih bisa golf, tapi saya saat ini tidak melihatnya (mungkin tidak bisa dan itu hanya perasaan acak).•A–•60в
lebih panjang 1 byte daripada44 59‚
bukannya lebih pendek. Danε0Û
untuk mengganti0
s dengan string kosong juga tampaknya menjadi yang sesingkat mungkin, karena0K
cukup menghapus 0-item sepenuhnya dan0м
menghilangkan angka apa pun0
di semua angka.44 59‚
, tetapi saya tidak dapat menemukannya (•H|•2ô
jumlah yang sama). Solusi saya sebelumnya (juga 27 byte) yang digunakan45
dan60
yang lebih mudah untuk menghasilkan dengan cara yang berbeda, tapi saya pikir itu tidak valid karena output level 1 , 3 atau 5 tergantung pada input dan tidak selalu 5 .•H|•2ô
memang juga cara yang cerdas, belum memikirkan hal itu. Dan memang harus menghasilkan 5 baris. Saya melihat jawaban Anda sebelumnya dan akan berkomentar hanya menghasilkan 1 baris untukn < 45
, tetapi kemudian Anda menghapusnya. Senang Anda telah menemukan solusi 27-byte lainnya. :)ŽH|2ô
apa yang Anda cari?JavaScript (Node.js) ,
8786 byteCobalah online!
Solusi 83-byte (
(n/15-2|0)*s<4
) disediakan terlebih dahulu karena saya perlu memeriksa yang lebih besarn
.UPDATE: Ya,
(n/15-2|0)*s<4
tidak berhasil karena untuk yang lebih besarn
karenan
cukup besar membuat jumlah gagal mencapai 1000.sumber
PHP, 92 byte
Jalankan sebagai pipa dengan
-R
atau coba online .sumber
Bersih , 215 byte
Cobalah online!
Jadi saya akhirnya menemukan cara yang lebih pendek untuk mendapatkan benih acak daripada mengimpor
System._Unsafe
,System.Time
dan menggunakantoInt(accUnsafe time)
...Dan anak laki-laki itu benar-benar dalam semangat codegolf - menanamkan panggilan ke C, mengabaikan jenis negara dunia yang biasanya digunakan untuk memastikan evaluasi urutan hal-hal seperti itu.
sumber
Java (JDK 10) ,
121117113111 byteCobalah online!
Itu bias terhadap menempatkan lebih banyak lilin di dekat bagian atas, tetapi secara teori dimungkinkan untuk setiap pengaturan lilin yang legal muncul.
sunting: 4 byte disimpan oleh @KevinCruijssen
Di Java yang dapat dibaca manusia:
sumber
Math.random()*(w+1)
bisaMath.random()*-~w
untuk -2 byte. Berikut tip yang relevan sebagai referensi mengapa. . Jawaban bagus! +1 dari saya. EDIT: Sebenarnya, 2 byte lagi dapat disimpan dengan menggunakanj
variabel sementara sebagai untukw+1
(karena itu akan ditimpa segera setelah di cetak lagi pula) dan gunakanj*=Math.random()
sebagai gantinya sehingga Anda tidak akan memerlukan cetakan untuk(int)
( 117 byte ).&i>2
kondisinya tidak perluPowershell ,
188162 byteCobalah online!
-2 bytes oleh @Kevin Cruijssen
-4 bytes dengan menghapus Get- kata kerja opsional
-20 bytes dengan memperpendek loop dan menghapus spasi
sumber
else{if($t-ne 1e3){Get-Random(1000-$t)}}
keelseif($t-ne 1e3){Get-Random(1000-$t)}
? Saya melihat Anda telah menggunakanelseif
kode sebelumnya, jadi ini akan menghemat 2 byte. Juga, mungkin Tips untuk bermain golf di Powershell atau Tips untuk bermain golf di <semua bahasa> mungkin memberikan inspirasi untuk lebih banyak? Selamat menikmati! :)Pascal (FPC) ,
192190 byteCobalah online!
Menggunakan metode packing ke dalam tong oleh TFeld . Mencetak baris bawah terlebih dahulu dengan baris baru tambahan.
Tampaknya FPC tidak memiliki masalah dengan
random(0)
, jadi saya memiliki beberapa penambahan yang tidak biasa di sana.Kiriman asli saya, golf hingga 209 byte:
Cobalah online!
sumber
Arang , 37 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:
Ulangi dua kali, dua kali. Atau saya bisa integer membagi indeks lingkaran dengan 2 untuk jumlah byte yang sama.
Jika indeks luar ditambah lima belas suhu lebih besar dari tiga ...
... lalu dorong bilangan bulat acak hingga dan termasuk 1000 - jumlahnya sejauh ini. Sayangnya Charcoal tidak dapat menghitung jumlah daftar kosong jadi saya harus mengganti string kosong sebagai gantinya.
Dorong jumlah yang tersisa ke daftar.
Konversikan daftar menjadi string, tetapi gunakan string kosong alih-alih nol.
sumber
Jelly , 28 byte
Program lengkap mencetak hasilnya (terbalik, seperti yang diizinkan).
Cobalah online! - ini diubah untuk digunakann > 59 Daftar 1015 5-tupel dibangun dan kemudian disaring, dari mana untuk memilih)
7
daripadaȷ
(1000) karena implementasinya lambat secara golf! (...untukBagaimana?
sumber
1000\n\n\n\n
bukannya\n\n\n\n1000
atau[87, null, 913, null, null]
bukannya[null, null, 913, null, 87]
). " Jadi ya, Anda diizinkan untuk menggunakan versi 28-byte tanpaṚ
.Ranting , 126 byte
Ini benar-benar tantangan yang menyenangkan!
Kode ini menciptakan makro yang harus diimpor.
Untuk mengimpornya, lakukan saja ini:
Ini harus melakukan trik.
Anda dapat mencobanya di https://twigfiddle.com/t4dfgy
Pemberitahuan : Karena halaman menghapus spasi putih, saya terpaksa menambahkan
-
di akhir baris, untuk membuktikan bahwa itu menghasilkan jumlah baris yang benar.Pada instalasi reguler, Anda hanya akan melihat baris baru tanpa masalah.
sumber
Perl 6 , 62 byte
Cobalah online!
Blok kode anonim yang mengambil string dan mengembalikan daftar bilangan bulat, dengan
Nil
atau daftar kosong ([]
) sebagai ganti0
s.Penjelasan:
sumber
PHP ,
113108999793 byteCobalah online!
-11 byte terima kasih kepada @titus
-9 byte karena semuanya adalah string
sumber
J ,
565554484340 byteCobalah online!
-3 byte terima kasih kepada FrownyFrog
Lain metode konseptual yang bagus yang sedikit lebih lama tapi menjamin distribusi sempurna seragam atas segala kemungkinan, per metode di sini :
J , 53 byte
Cobalah online!
sumber
$!.a:
hanya{.
?PowerShell ,
11510598 byte-17 byte berkat mazzy
Cobalah online!
Sebuah golf jawaban Edwin yang indah . Jika Anda suka ini, pilih dia.
sumber
Ruby ,
6255 byteCobalah online!
Tes terbatas pada 0-99 derajat, karena lampu lava bisa berbahaya pada suhu yang lebih tinggi:
sumber
0
untuk baris kosong. Baris kosong dalam array bisa berupa apa saja kecuali untuk0
,false
atau angka negatif. Jadi bisanull
,""
,[]
, dll, tapi tidak0
. Tidak yakin apakah Ruby memiliki array-array / daftar sehingga Anda dapat mengubah0
s menjadi sesuatu yang lain, tetapi jika tidak, Anda harus mencetaknya alih-alih mengembalikan array / daftar.