Anda tahu — mereka terlihat seperti ini:
Tujuannya adalah untuk menggambar ilustrasi ketukan musik seperti berikut:
= = =
= = = = =
== = == = == = ====
== ==== == === = = =======
======== == ==== = ========= =
=================================
Aturannya adalah:
- Lebar ilustrasi adalah 33 simbol, tetapi jika Anda perlu — setiap spasi tambahan yang melebihi lebar ini diperbolehkan.
- Setiap kolom terbuat dari tanda sama dengan (
=
). - Setiap kolom memiliki tinggi acak (tinggi kolom berikutnya tidak boleh tergantung pada ketinggian kolom sebelumnya), bervariasi dari 1 hingga 6. Ini juga baik jika setidaknya mungkin untuk mendapatkan beberapa input tanpa ketat probabilitas matematika (yaitu beberapa input dapat muncul lebih jarang daripada yang lain).
- Kolom tidak bisa mengapung di atas bagian bawah dan ada celah di dalamnya.
- Karena setiap kolom memiliki tinggi minimal 1, baris terakhir juga tidak memiliki celah — selalu terdiri dari 33 tanda sama dengan.
- Karena dimungkinkan untuk tidak memiliki kolom dengan ketinggian 6 (semuanya acak setelah semua): dalam hal ini Anda tidak perlu memiliki garis atas yang terbuat dari spasi. Berlaku untuk setiap tepi kasus seperti ini: jika tiba-tiba kode Anda tidak memberikan kolom dengan ketinggian lebih dari 1, Anda tidak perlu memiliki garis tambahan yang terbuat dari spasi di atas garis bawah.
- Anda tidak mengambil input apa pun .
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
)Math.random()
langsung dapat dihitung dari panggilan sebelumnya jika parameter generator kongruensial linier diketahui, yang berarti Anda harus memodifikasi sebagian besar fungsi acak bawaan untuk memenuhi kriteria ini. Saya menyarankan agar ini lebih baik.Jawaban:
Pyth , 13 byte
Dan aku mengalahkan Jelly .
Cobalah online!
sumber
Dyalog APL , 14 byte
Penjelasan
33⍴6
33 pengulangan 6?
bilangan bulat acak dalam rentang [1, n ] untuk masing-masing 33 6s'='⍴¨⍨
Simbol kesetaraan mengulangi setiap kali itu↑
konversi daftar daftar ke daftar baris⍉
transpos baris menjadi kolom, kolom menjadi baris⊖
terbalik terbalikContoh berjalan
Input diberi indentasi enam spasi:
sumber
Jelly, 14 byte
Coba di sini.
sumber
6ṗ33X
berfungsi juga.JavaScript (ES6), 116 byte
Lihat di cuplikan animasi di bawah ini:
sumber
C, 87 byte
Sebut sebagai
f();
. Jawaban ini bergantung pada kenyataan bahwa enam panggilan berurutan untuktime(0)
mengembalikan hasil yang sama (dalam detik). Ini sebenarnya selalu benar, tetapi mungkin perlu disebutkan.sumber
x
dany
menghindari untuk menyatakannya sebagaiint
. Karena tidak ada input, apakah ini diizinkan? Jika ya, itu ide yang bagus!f();
Thats bagus! Saya tidak tahu bahwa C bisa melakukan itu.Cheddar,
6865 byte (tidak bersaing)O_O Cheddar sebenarnya baik-baik saja! Penggunaan
sprintf
danturn
melakukan sebagian besar pekerjaan.vfuse
adalah vertikal-fuse artinya bergabung dengan array tetapi secara vertikal. Ini sangat golf tetapi juga agak cepat. Versi prerelease v 1.0.0-beta.10 , yang mengunggah tanggal tantangan.Penjelasan
Beberapa contoh berjalan:
sumber
05AB1E , 22 byte
Tidak ada penggabungan otomatis, tidak ada pengisian otomatis saat mentransposisi, osabie akan mengalami kegagalan dalam hal ini. Kode:
Menggunakan pengkodean CP-1252 . Cobalah online! .
sumber
Python 2, 95 byte
sumber
Python 3, 115 byte
Python bahkan tidak pernah punya kesempatan ...
Bagaimana itu bekerja
Cobalah di Ideone
sumber
MATL,
20191817 byte1 byte disimpan berkat @Luis
Cobalah secara Online
sumber
SpecaBAS - 76 byte
Mencetak tanda sama dengan pada koordinat layar yang relevan.
dengan bintik warna dan
GOTO
lingkaran itu menjadisumber
K4, 18 byte
Pada dasarnya sebuah port dari solusi APL (tidak mengejutkan).
sumber
C #,
200117 byteSaya pindah ke algoritma @ Lynn dan menghemat 83 byte!
C # lambda tanpa input dan di mana output adalah sebuah string. Cobalah online .
Kode:
sumber
Haskell, 164 Bytes
Menjadi bahasa yang murni fungsional, Haskell dikutuk sejak awal. Saya tetap melakukannya dan ternyata, overhead yang diperlukan sebenarnya tidak sebesar itu.
Pemakaian:
Penjelasan:
untuk dapat menggunakan
newStdGen
danrandoms
untuk dapat digunakan
transpose
mendefinisikan fungsi yang mencetak spasi jika argumen pertama lebih besar dari argumen kedua dan
=
sebaliknya. Itu disebut denganmap (f m) [0..5]
nomorm
dan daftar yang diberikan[0,1,2,3,4,5]
. (Lihat di bawah)Membuat generator nomor acak standar baru
membutuhkan 33 bilangan bulat acak.
Menghitung
m = n % 6
dan memetakan(f m)
ke daftar[0,1,2,3,4,5]
, yang menghasilkan salah satu dari"======", " =====", ..., " ="
. Garis-garis ini dipetakan ke daftar 33 bilangan bulat acak yang menghasilkan tabel. (Tabel di Haskell adalah daftar daftar)mengganti kolom dan baris tabel
mencetak setiap baris dalam tabel
sumber
CJam, 19 byte
Cobalah online!
Penjelasan
sumber
Mathematica, 78 byte
Fungsi anonim. Tidak mengambil input dan mengembalikan string sebagai output. Karakter Unicode adalah U + F3C7, mewakili
\[Transpose]
.sumber
R, 102 byte
Penjelasan
m=rep(" ",33)
init vektor kosong untuk loop yang akan datangn=ifelse(m=="=",m,sample(c(" ","="),33,T,c(6-i,i)))
Jika ada=
baris di atas, maka pastikan tempat di bawahnya juga memiliki=
; jika tidak pilih secara acak. Pilihan acak ditimbang untuk memastikan bahwa a) baris paling bawah adalah semua=
dan b) Anda mendapatkan bentuk yang rapi untuk semuanya.cat(n,"\n",sep="")
Keluarkan baris itu ke konsol dengan baris baru di bagian akhir dan tidak ada spasi di antara elemen!sumber
PHP,
959289 byteCukup senang dengan yang ini sebenarnya. Untuk sementara saya memiliki versi yang secara teori dapat menghasilkan input apa pun tetapi dalam praktiknya hanya akan menghasilkan blok =, tetapi ini lebih pendek dan sama-sama terdistribusi!
Menghasilkan 7 pemberitahuan sesuatu yang tidak terdefinisi setiap kali Anda menjalankannya, tetapi itu tidak masalah.
sunting: baik saya baru tahu bahwa bergabung adalah alias implode, jadi itu bagus.
sumber
J, 18 byte
Hal yang sangat sederhana. Dengan perbaikan bug dari mil!
sumber
>:?33#6
untuk mendapatkan bilangan bulat acak dalam rentang [1, 6]. Juga, salinan peringkat 0 akan lebih pendek menggunakan'='#~"0
. Ini menghasilkan|.|:'='#~"0>:?33#6
tetapi sayangnya, penghematan 2 byte akhirnya dimitigasi dengan dimasukkannya operator increment.Perl, 64 byte
Pemakaian
Perl, 68 byte
Versi alternatif yang bergantung pada kode pelarian ANSI untuk menggerakkan kursor, pertama-tama menjatuhkan 6 baris, kemudian menulis garis asli (semua huruf
=
), memindahkan garis dan mencetak string yang diganti (s/=/rand>.4?$&:$"/ge
) berulang kali hingga tidak ada lagi penggantian. Ini akhirnya bisa menulis lebih dari enam baris, tetapi akhirnya diganti dengan baris kosong.Catatan:
\x1b
s sebenarnya adalah Esckarakter ASCII .sumber
Rubi,
102998483 bytePendekatan baru dan jauh lebih singkat, di mana saya mulai dengan string yang penuh dengan baris baru.
Versi lebih lama ...
... memberikan output dengan memimpin baris baru. Kiriman pertama saya di Ruby, menggunakan pendekatan yang mirip dengan @ Barbarossa, tetapi dalam satu lingkaran.
Apa yang saya sukai di Ruby saat mengerjakan program ini:
.times
lingkaranrand()
yang cukup singkatSaya tidak suka (terutama dalam hal bermain golf):
wajibtidak begitu wajib dalam$
untuk variabel global.times
lingkaranyang bisa diganti dengan blok single-linedo
danend
kata kunci0
tidak palsusumber
JavaScript, 179 byte
Masih berusaha sedikit bermain golf. Saya suka ini karena mudah.
Pemakaian:
sumber
.map(n=>{return Math.floor(Math.random() * 6)+1})
dengan.map(n=>Math.floor(Math.random()*6)+1)
. Lambda adalah hebat :)if (n<=m+1){r[m]+="="}else
mungkinif(n<=m+1)r[m]+="=" else
Keempat, 190 byte
Saya harus membuat PRNG saya sendiri , sebuah xor-shift yang diambil dari sini . Kata itu
f
adalah kata yang akan Anda panggil beberapa kali untuk melihat hasilnya.Coba online - Perhatikan bahwa waktu sistem adalah salah satu dari dua nilai berdasarkan server mana (atau sesuatu) yang menjalankan kode. Selain itu, mereka tidak berubah dalam IDE online karena beberapa alasan. Jadi Anda hanya akan melihat dua kemungkinan output. Anda dapat secara manual mengatur seed dengan mengubah
utime
ke integer.Tidak disatukan
Tidak online
sumber
JavaScript, 165 Bytes
Baris baru tidak perlu tetapi mereka membuatnya lebih mudah untuk melihat apa yang terjadi. Bukan solusi yang paling optimal, tetapi setidaknya masuk akal bagi saya.
sumber