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 RPNPRRR
mainkan 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 RUU
mainkan 13 catatan pertama Mary Had a Little Lamb dengan bertumpu di tempat yang seharusnya.
Jika ada karakter selain ()01
diawali 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-0B01C
menjadi AAAAA ++-C
karena 101
= 5, 11
= 3, dll. (Urutan 0
's dan 1
' di akhir string tidak berpengaruh.)
Tanda kurung yang cocok ( ()
) melayani dua tujuan:
- Jika kontennya tidak diakhiri dengan urutan
0
's dan1
' 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. - Jika konten mereka tidak berakhir dengan urutan
0
's dan1
' 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 dan1
' sebelum tanda kurung non-replikasi mengulanginya dengan cara yang sama setiap karakter diulang. Jadi10(NQU)
menjadi(NQU)(NQU)
. - Urutan
0
's dan1
' sebelum mereplikasi kurung tidak berpengaruh. (
harus selalu memiliki kecocokan)
, tetapi tidak sebaliknya: misalnyaN)
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
(++)N
akan bermainN
dalam 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
++NP
interval antaraN
danP
lebih 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
MYCODE
kemudianMYC
,MYE
,MDE
, danODE
semua harus tidak quines (mereka mungkin kesalahan atau output sesuatu yang lain).
- Jadi, jika program anda adalah
Ini adalah kontes popularitas, jawaban dengan suara terbanyak menang.
Pembaruan: Aturan terakhir yang santai.