Yup, Anda membaca judulnya dengan benar. mainkan suara pi.
Lebih khusus lagi, untuk setiap digit pi dalam 1000 pertama, petakan ke not musik dan output melodi yang dihasilkan ke file.
Pada dasarnya, setiap digit berubah menjadi catatan pada skala C Major (pada dasarnya skala normal). jadi 1 berbelok ke Middle C, 2 berbelok ke D4, 3 berbelok ke E4, 9 berbelok ke D5 dan seterusnya.
Aturan
- Setiap nada harus tepat 0,5 detik.
- Melodi harus berisi 1000 digit pi pertama, termasuk 3 awal.
- 1 hingga 7 mewakili C Tengah ke B4, 8 adalah C5, 9 adalah D5 dan 0 adalah E5
- Semua format file yang didukung dengan baik diizinkan, asalkan dibuat sebelum tantangan ini.
- Mungkin tidak ada jeda di mana pun dalam file, termasuk awal dan akhir.
- Instrumen yang dimainkan tidak masalah. Itu bisa berupa piano, gelombang sinus, apa saja, asalkan suara yang benar mudah didengar.
- Ini tidak boleh mengambil input dan tidak menghasilkan output kecuali untuk file. Membaca dari file lain tidak diizinkan.
- Celah standar dilarang.
Contoh kode mathematica:
(*please forgive me for this horrible, horrible mess of code*)
digits = RealDigits[Pi, 10, 1000][[1]] /. {0 -> 10};
weights = {0, 2, 4, 5, 7, 9, 11, 12, 14, 16};
melody = {};
For[i = 1, i < 1001, i++, melody = {melody , Sound[SoundNote[weights[[digits[[i]]]], 0.5]]}]
final = Sound[Flatten[melody]];
Export["C:\\Mathematica Shenanigans\\pi.wav", final];
Contoh melodi menampilkan 100 digit pertama: http://vocaroo.com/i/s0cfEILwYb8M
Untuk kewarasan Anda, Daftar nada untuk setiap not dan apa not yang mewakili setiap digit:
Digit 1: C: 261.63 Hz
Digit 2: D: 293.66 Hz
Digit 3: E: 329.63 Hz
Digit 4: F: 349.23 Hz
Digit 5: G: 392.00 Hz
Digit 6: A: 440.00 Hz
Digit 7: B: 493.88 Hz
Digit 8: C5: 523.25 Hz
Digit 9: D5: 587.33 Hz
Digit 0: E5: 659.25 Hz
code-golf
kolmogorov-complexity
pi
audio
sagiksp
sumber
sumber
4
oktaf -th. Selain itu, di tabel Anda apakah angka0
datang terakhir (E5
)?Jawaban:
Mathematica,
10787 byteTerima kasih kepada Martin Ender karena telah menghemat 20 byte!
#&@@RealDigits[Pi,10,1000]
memberikan daftar 1000 digit pertama π.SoundNote[⌊12Mod[#,10,1]/7⌋-1
menghasilkan angka pitch yang benar (di mana 0 adalah C tengah secara default) dari angka. KemudianSoundNote[...,.5]&/@
ubah nama nada itu menjadi objek suara berdurasi 1/2 detik, yangSound
dikumpulkan menjadi potongan audio yang sebenarnya. Akhirnya"t.au"~Export~
ekspor ke file Format Audio Unix, sebagian besar karena ekstensi adalah yang paling pendek didukung, tetapi juga karena kita bisa membuat nama file tamparan di wajah untuk π !Pengajuan sebelumnya:
sumber
Python 2, 182 byte
`x`
akan menghasilkan31415926...20198L
. TrailingL
digunakan untuk menghasilkan byte pesan saluran akhir, melalui pemetaan~ord(i)%29
.Menghasilkan satu file Midi Tipe 1 trek, dinamai
p.mid
ke direktori kerja saat ini.sumber
Gores , 530 byte
Terinspirasi oleh jawaban BookOwl .
Peragaan Online . Putar ulang akan segera dimulai, tekan spaceuntuk berhenti dan mengatur ulang. Klik kucing untuk memulai lagi.
Sunting: sedikit turun golf. Saya menemukan beberapa tips bermain golf di wiki resmi .
Grafis:
Menggunakan keran Rabinowitz Wagon untuk menghasilkan 4 digit sekaligus.
sumber
R, 450 byte
Menggunakan paket
Rmpfr
untuk mendapatkan presisi yang benar pada digit pi. Keluaran.wav
file.Lekukan, dengan baris dan komentar baru:
sumber
C (gcc) 572 byte
Versi tidak disatukan:
Penjelasan:
play(float freq)
rutin mengambil frekuensi sebagai parameter dari catatan (hardcoded) yang ingin Anda mainkan dan menyimpan gelombang sinus dalam buffer.f()
, saya menyimpan frekuensi yang terkait dengan catatan mulai dari C4 hingga E5 dalam sebuahnotes
array.pi
nilai diikuti oleh 1000 digit dalam buffer. Untuk melakukan ini, saya menginstalpi
paket pada mesin saya, dan digunakanpopen
untuk membaca outputpi 1000
dan menyimpannya dalamchar
buffer.for
loop danswitch
saya memanggilplay()
fungsi untuk menghasilkan catatan yang sesuai dengan setiap digit tunggal dipi
buffer. ,Penggunaan:
./binary_name.o | aplay
pada distribusi Linux modern, pada distribusi lama Anda akan mengarahkannya kembali/dev/audio
sumber
switch(foo){...}
dengan sesuatu sepertiplay(note[(foo-'1')%10])
. Baca juga tips untuk bermain golf di C