Musical Quines di Piano ASCII

22

Ada 88 tombol pada piano standar dan 95 karakter ascii yang dapat dicetak (kode hex 20 hingga 7E):

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~

('karakter' mengacu pada karakter ASCII yang dapat dicetak mulai dari sini)

Dalam JSFiddle ini saya telah mengambil keuntungan dari itu dan membuat sintaks sederhana yang menghasilkan nada piano menggunakan AudioSynth . (Kalau ada yang bisa mengarahkan saya ke set nada piano nyata yang dapat dihubungkan, saya akan berterima kasih.)

Setiap karakter dalam string input selain () 01+-sesuai dengan satu kunci piano:

 CHARACTER:  !   "   #   $   %   &   '   *   ,   .   /   2   3   4   5   6   7   8   9   :   ;   <   =   >   ?   @   A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   R   S   T   U   V   W   X   Y   Z   [   \   ]   ^   _   `   a   b   c   d   e   f   g   h   i   j   k   l   m   n   o   p   q   r   s   t   u   v   w   x   y   z   {   |   }   ~
KEY NUMBER:  1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  30  31  32  33  34  35  36  37  38  39  40  41  42  43  44  45  46  47  48  49  50  51  52  53  54  55  56  57  58  59  60  61  62  63  64  65  66  67  68  69  70  71  72  73  74  75  76  77  78  79  80  81  82  83  84  85  86  87  88
      NOTE:  A  A#   B   C  C#   D  D#   E   F  F#   G  G#   A  A#   B   C  C#   D  D#   E   F  F#   G  G#   A  A#   B   C  C#   D  D#   E   F  F#   G  G#   A  A#   B   C  C#   D  D#   E   F  F#   G  G#   A  A#   B   C  C#   D  D#   E   F  F#   G  G#   A  A#   B   C  C#   D  D#   E   F  F#   G  G#   A  A#   B   C  C#   D  D#   E   F  F#   G  G#   A  A#   B   C
    OCTAVE:  0   0   0   1   1   1   1   1   1   1   1   1   1   1   1   2   2   2   2   2   2   2   2   2   2   2   2   3   3   3   3   3   3   3   3   3   3   3   3   4   4   4   4   4   4   4   4   4   4   4   4   5   5   5   5   5   5   5   5   5   5   5   5   6   6   6   6   6   6   6   6   6   6   6   6   7   7   7   7   7   7   7   7   7   7   7   7   8

Jadi RPNPRRRmainkan 7 catatan pertama Mary Had a Little Lamb menggunakan parameter pengaturan waktu yang dapat Anda lihat di JSFiddle.

Spasi ( ) merepresentasikan istirahat musik yang berlangsung selama satu interval nada. Jadi RPNPRRR PPP RUUmainkan 13 catatan pertama Mary Had a Little Lamb dengan bertumpu di tempat yang seharusnya.

Jika ada karakter selain ()01diawali oleh urutan 0's dan 1' s (regex [01]+), urutan itu dibaca sebagai angka biner b , dan karakter tersebut diganti dengan b salinan itu sendiri. Jadi 101A11 10+1-0B01Cmenjadi AAAAA ++-Ckarena 101= 5, 11= 3, dll. (Urutan 0's dan 1' di akhir string tidak berpengaruh.)

Tanda kurung yang cocok ( ()) melayani dua tujuan:

  1. Jika kontennya tidak diakhiri dengan urutan 0's dan 1' s, semua catatan dimainkan bersamaan dengan akor (yang sebaliknya tidak berbeda dengan catatan). Begitu (NQU)juga dengan akord C minor pada oktaf 4.
    Jika duplikat catatan hadir, suaranya juga digandakan. Begitu (NN)dan (NNN)terdengar berbeda.
  2. Jika konten mereka tidak berakhir dengan urutan 0's dan 1' s, urutan yang dibaca sebagai angka biner b , dan tanda kurung dan konten mereka diganti dengan b salinan konten. Jadi (NQU11)menjadi 9 catatan individu: NQUNQUNQU.

Rincian Kurung:

  • Menarang kurung yang direplikasi (tujuan 2) baik-baik saja: (N(QU10)11)(NQUQU11)NQUQUNQUQUNQUQU.
  • Bersarang kurung non-replikasi (tujuan 1) baik-baik saja tetapi tidak memiliki efek: (A((+)C))sama dengan (A+C).
  • Anda juga dapat menggabungkan keduanya: ((N(QU10))11)(NQUQU)(NQUQU)(NQUQU).
  • Urutan 0's dan 1' sebelum tanda kurung non-replikasi mengulanginya dengan cara yang sama setiap karakter diulang. Jadi 10(NQU)menjadi (NQU)(NQU).
  • Urutan 0's dan 1' sebelum mereplikasi kurung tidak berpengaruh.
  • (harus selalu memiliki kecocokan ), tetapi tidak sebaliknya: misalnya N)valid.

Plus ( +) dan minus ( -) masing-masing meningkatkan dan mengurangi durasi catatan atau interval waktu antara catatan, tergantung pada konteksnya:

  • Ketika di dalam tanda kurung non-replikasi, mereka segera menambah atau mengurangi variabel durasi catatan dengan beberapa jumlah milidetik yang telah ditentukan (lihat JSFiddle ). Jadi (++)Nakan bermain Ndalam durasi yang lebih lama dari biasanya.
  • Ketika di luar tanda kurung non-replikasi, mereka menambah atau mengurangi interval antara awal catatan berikutnya dan catatan setelah itu (dan setiap interval berikutnya) dengan beberapa jumlah milidetik yang telah ditentukan. Jadi dalam ++NPinterval antara Ndan Plebih lama dari biasanya.

Durasi catatan dan interval waktu di antara mereka tidak bisa turun di bawah 0.

Tantangan

Saya sengaja memilih () 01+-menjadi 7 karakter khusus karena mereka dapat ditempatkan secara tidak bersalah dalam banyak konteks dalam banyak bahasa pemrograman.

Tugas Anda adalah menulis quine dalam 512 byte atau kurang yang menghasilkan nada suara terbaik ketika kode itu sendiri digunakan sebagai string input di JSFiddle .

Anda dapat memilih nilai awal apa pun (bilangan bulat non-negatif) untuk parameter 4 interval / durasi, tetapi nada Anda tidak boleh bertahan lebih dari 10 menit. Anda juga harus memberi tahu kami jika nada Anda terdengar terbaik pada instrumen tertentu.

Aturan

  • Hanya tab, baris baru, dan cetak-ASCII yang diizinkan dalam kode Anda. Semua ASCII yang tidak dapat dicetak diabaikan oleh pencipta lagu.
  • Output mungkin pergi ke file atau stdout atau alternatif terdekat (misalnya peringatan JS). Tidak ada input.
  • Tidak membaca kode sumber. Itu pasti quine yang sebenarnya.
  • Penghapusan 3 karakter sumber yang berdekatan harus membuat program tidak lagi berfungsi sebagai quine. Ini untuk memastikan orang tidak menulis lagu yang bagus dalam sebuah string kemudian memiliki bagian quine kecil untuk menghasilkannya.
    • Jadi, jika program anda adalah MYCODEkemudian MYC, MYE, MDE, dan ODEsemua harus tidak quines (mereka mungkin kesalahan atau output sesuatu yang lain).

Ini adalah kontes popularitas, jawaban dengan suara terbanyak menang.

Pembaruan: Aturan terakhir yang santai.

Hobi Calvin
sumber
3
Anda dapat memainkan Mary Had a Little Lamb pada keypad ponsel, juga: 3212333 222 399 (coba, itu keluar dengan sempurna.)
Level River St
Ada banyak soundfonts gratis untuk piano. Juga, JSFiddle yang bagus!
qwr
Saya belum pernah melihat aturan terakhir dalam tantangan apa pun sebelumnya, saya kira cukup efektif seperti yang dimaksudkan.
justhalf
@ qwr Apakah Anda tahu set semua 88 kunci yang dapat dihubungkan secara langsung dengan cara ini ? Saya terlihat sedikit tetapi tidak dapat menemukannya.
Calvin Hobbies

Jawaban:

6

C

Saya memutuskan bahwa saya menyukai suara gemuruh rendah yang dihasilkan oleh string /**/yang tidak-jadi-kebetulan cara untuk membuka dan menutup komentar dalam C. Satu-satunya hal yang menarik di sini adalah bahwa 34untuk "digantikan oleh 35-1(Berakhir dengan 1 sengaja) untuk hindari akord yang mengerikan. Saya juga mencoba membuat akhirannya terdengar dramatis. Saya benar-benar melakukannya. Saya bermaksud mengedit ini nanti untuk membuatnya terdengar sedikit lebih baik.

/**/char*p= "/**/char*p= %c%s%c; int main(){printf(p,34,p,35-1);p++;/**/}/**/";
int main(){printf(p,34,p,35-1);p++;/**/}/**/

Untuk pemahaman saya tentang aturan, bagian yang dikomentari masih melewati aturan terakhir karena penghapusannya menghasilkan quine yang gagal.

BrainSteel
sumber
3
"Saya bermaksud mengedit ini nanti agar terdengar sedikit lebih baik." Sudah hampir satu tahun. Saya mulai berpikir Anda tidak akan mengedit ini nanti untuk membuatnya terdengar lebih baik. : P
Alex A.
@AlexA. Lebih dari setahun sekarang!
wizzwizz4
5

J

Ya, saya pikir Anda bisa menebak bagaimana ini akan berjalan.

Sulit untuk melakukan sesuatu yang keren dalam J tanpa parens, dan karena Anda jarang bisa mengakhirinya dengan 0 dan 1, kebanyakan hal terdengar seperti seseorang yang duduk di bagian atas dan bawah keyboard pada saat yang bersamaan. Saya mencoba yang terbaik, saya ingin Anda tahu.

Inilah garis dasar yang funky untuk piano, saya pikir. Saya benar-benar tidak tahu apa-apa tentang komposisi, saya hanya mengambil quine dan memutar-mutar jumlahnya sedikit.

(23 23,~,~i.124+-100){,'(23 23,~,~i.124+-100){,'''

Dan, hanya untuk bersenang-senang, mainkan ini sebagai EDM. Saya menyebutnya Japhex Twin .

".s=:'''".s=:'',''''''''&,@(,&'''''''')@(#~>:@(=&''''''''))s'

Anda dapat mengkonfirmasi quineiness potongan halus ini kode di tryj.tk .

algoritme hiu
sumber
1
Ini sebenarnya bisa lewat untuk musik. Besar! :)
Emil
4

Beton Musique dengan Python

Saya tidak punya banyak waktu hari ini, tetapi saya ingin mendapatkan jawaban. Genre adalah alasan untuk tidak terdengar seperti apa pun. Mungkin efek suara di video game?

BFIN10=r"print('BFIN10=r\"'+BFIN10+'\"'+'\nexec(BFIN10)')"
exec(BFIN10)
qwr
sumber
Sebenarnya tidak terdengar terlalu buruk!
Claudiu
Setiap album Yoko Ono
William Barbosa
4

C

int(printf)(char*,...); (main)(){char*b=",*",i=(34),*m=("int(printf)(char*,...); (main)(){char*b="),
*z="%s%c%s%c,i=(34),*m=(%c%s%c)%sz=%c%s%c,*B=%c%s%c,*f=(%c%s%c)%s(/*)*/%s/*(*/);}//(+++fim)",*B="(f,
i,m,z),(i,z,m),(m,i),(f,b),(m,i),(m,i),(f,z,m),(m,i),(f,z,b),(m,i),(b,z),(B,i),(38,i),(29,B),(26,i),
(26,i),(B,f),(42,i),(i,m,f),B",*f=(";(printf)");(printf)(/*)*/(f,i,m,z),(i,z,m),(m,i),(f,b),(m,i),(m
,i),(f,z,m),(m,i),(f,z,b),(m,i),(b,z),(B,i),(38,i),(29,B),(26,i),(26,i),(B,f),(42,i),(i,m,f),B/*(*/)
;}//(+++fim)

Dipatahkan dengan jeda baris hanya untuk tujuan presentasi; ini hanya quine (dan hanya memenuhi persyaratan panjang) jika baris baru dihapus.

Deklarasi printf diperlukan untuk dikompilasi (printf). /*(*/dan /*)*/digunakan untuk mencocokkan tanda kurung dalam kode, sementara campuran tanda kurung dan operator koma digunakan untuk membentuk akor dari printfparameter.

Sunting: Dipersingkat agar sesuai dengan persyaratan ukuran serta membuat karya sedikit lebih cepat.

Ini terdengar terbaik di piano.

es1024
sumber
2
Saya suka itu! Itu dimulai agak lambat tetapi segala sesuatu dari token 130 dan seterusnya kuat menghantui. Anda menggunakan screechiness untuk keuntungan Anda.
Calvin Hobbies
Yang ini bisa lolos untuk Fantasy for Orchestra! : P
Soham Chowdhury
2
Saya menyukai versi lama lebih baik tetapi ini masih lagu favorit saya di sini. Saya mencoba memberi Anda hadiah tetapi untuk beberapa alasan itu tidak berhasil. Lihat meta: meta.codegolf.stackexchange.com/questions/2263/…
Calvin Hobbies
3

Skema

Ini mungkin tidak terlalu melodi (sebenarnya terdengar seperti seseorang menjatuhkan babi mati ke dalam baby-grand), tetapi setidaknya itu adalah karya musik pendek. Akan sulit untuk membuat sesuatu yang lebih lama atau kurang mati-terbang-seperti babi dalam skema.

((lambda (x) (list x (list 'quote x))) '(lambda (x) (list x (list 'quote x))))
Penguino
sumber
1
Ow, telingaku ....
Claudiu
2

Für Golfscript

":H;GHGHCFDA;[34]H+2*{-};":H;GHGHCFDA;[34]H+2*{-};

Ini memuaskan surat aturan penghapusan no-tiga-berturut-turut, meskipun bukan maksudnya, saya kumpulkan.

Claudiu
sumber
1

Cobra / Batch

@number float# 2>nul||@echo off
/# 2>nul
for /f "delims=" %%a in (%0) do echo %%a
#/# 2>nul
class P# 2>nul
    def main# 2>nul
        r="# 2>nul"# 2>nul
        s="@number float{3}||@echo off{2}/{3}{2}for /f {1}delims={1} %%a in (%0) do echo %%a{2}#/{3}{2}class P{3}{2}    def main{3}{2}      r={1}{3}{1}{3}{2}       s={1}{0}{1}{3}{2}       Console.write(s,s,34to char,10to char){3}"# 2>nul
        Console.write(s,s,34to char,10to char,r)# 2>nul

Secara teknis bukan quine di Batch (ia membaca sumbernya sendiri). Namun itu adalah quine di Cobra.

Itu terdengar paling baik dengan mode piano, agak seperti musik tingkat hantu dari video game era Super Mario World.

Suram
sumber
1

Pyth

J"+K+N+J+N+\K+N+K+NJ"K"J"+K+N+J+N+\K+N+K+NJ

Paling baik dimainkan dengan pengaturan keempat (jumlah + dan - ubah interval) sekitar 20, sisanya pada pengaturan default. Terdengar terbaik di piano.

isaacg
sumber
0

Haskell

(Saya tidak yakin apakah nama variabel itu melanggar aturan terakhir.)

main=putStr$  jjlmjiebab ++ {--} show jjlmjiebab;jjlmjiebab = "main=putStr$  jjlmjiebab ++ {--} show jjlmjiebab;jjlmjiebab = "

Terbaik dimainkan di piano dengan durasi not 1000 milidetik dan interval not 250 milidetik, dengan nilai + dan - standar.

archaephyrryx
sumber