標準のピアノには88個のキーがあり、印刷可能なASCII文字は95 個あります(16進コード20〜7E):
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
(「文字」とは、これから印刷可能なASCII文字を指します)
で、このJSFiddle Iというの利点を取られ、使用したピアノ曲を生成する単純な構文行ったAudioSynthを。(リンク可能な本物のピアノの音のセットに誰かが私を導くことができれば、私は感謝します。)
入力文字列の各文字は、() 01+-ピアノキーに対応しています。
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
したがって、JSFiddleで確認できるプリセットのタイミングパラメーターを使用して、Mary Had a Little LambRPNPRRRの最初の7つのノートを再生します。
スペース()は、1つの音程の間続く休憩を表します。したがってRPNPRRR PPP RUU、メアリーの最初の13音を適切な場所に休符を付けて再生します。
以外の文字の()01前に0'と1'の[01]+シーケンス(regex )が付いている場合、そのシーケンスは2進数bとして読み取られ、文字はそれ自体のb個のコピーに置き換えられます。そう101A11 10+1-0B01CなるAAAAA ++-Cため101= 5、11= 3、等(のシーケンス0「Sはと1」文字列の末尾のSは効果がありません。)
一致した括弧(())は2つの目的を果たします。
- その内容は、場合しないの順序で終わる
0のと1の、すべてのノートが(それ以外のノートよりも違いはありません)和音と同時に再生されます。だから、(NQU)あるCのマイナー弦オクターブ4には、
重複したノートは彼らのサウンドにも重複して存在している場合。だから(NN)、(NNN)異なる音。 - コンテンツが
0'と1'のシーケンスで終了する場合、そのシーケンスは2進数bとして読み取られ、括弧とそのコンテンツはコンテンツのbコピーに置き換えられます。したがって、(NQU11)9つの個別のノートになりますNQUNQUNQU。
括弧の詳細:
- ネスト複製括弧(目的2)は大丈夫です:
(N(QU10)11)→(NQUQU11)→NQUQUNQUQUNQUQU。 - 非複製括弧のネスト(目的1)は問題ありませんが、効果はありません。これ
(A((+)C))はと同じ(A+C)です。 - 両方を組み合わせることもできます:
((N(QU10))11)→(NQUQU)(NQUQU)(NQUQU)。 - 複製しない括弧の前の '
0と1'のシーケンスは、個々の文字が繰り返されるのと同じ方法でそれらを繰り返します。そう10(NQU)なる(NQU)(NQU)。 - 括弧を複製する前
0ののシーケンスとのシーケンスは1効果がありません。 (常に一致する必要がありますが、)その逆ではありませんN)。たとえば、有効です。
プラス(+)およびマイナス(-)は、それぞれ、コンテキストに応じて、音符の持続時間または音符間の時間間隔を増減します。
- ときに内部の非複製括弧、彼らはすぐにミリ秒単位のいくつかのプリセット番号(参照により、音符の長さ変数を増減JSFiddleを)。そのため、通常よりも長い時間
(++)N再生さNれます。 - 場合外部非複製括弧、それらはミリ秒のいくつかのプリセット数で次の音符の開始ノートそれの後(及び後続の各間隔)間隔を増加または減少させます。だから、中
++NP間の間隔NとP通常よりも長くなっています。
音符の持続時間と音符間の時間間隔は0未満にはなりません。
チャレンジ
() 01+-多くのプログラミング言語の多くのコンテキストに無害に配置できるため、私は7つの特殊文字を意図的に選択しました。
あなたの仕事は、コード自体がJSFiddleの入力文字列として使用されたときに最高のサウンドのチューニングを生成する512バイト以下でクインを書くことです。
4つの間隔/期間パラメーターに任意の初期値(非負の整数)を選択できますが、チューニングは10分を超えてはなりません。あなたの曲が特定の楽器で最高に聞こえるかどうかも教えてください。
ルール
- コードではタブ、改行、および印刷可能なASCIIのみが許可されます。印刷できないASCIIはすべて、曲の作成者によって無視されます。
- 出力は、ファイルまたはstdoutまたは最も近い代替(たとえば、JSアラート)に送られます。入力はありません。
- ソースコードの読み取りはありません。それは真の馬でなければなりません。
- 連続する3つのソース文字を削除すると、プログラムはキインとして機能しなくなります。これは、人々が文字列で良い曲を書かないようにし、それを出力するための小さなクイン部分を確保するためです。
- あなたのプログラムだったのであれば
MYCODE、その後MYC、MYE、MDE、およびODEすべてのquines(彼らは何かをエラーまたは出力可能)であってはなりません。
- あなたのプログラムだったのであれば
これは人気のコンテストであり、最も投票数の多い回答が勝ちます。
更新:緩和された最後のルール。