バックグラウンド
洋楽では、すべての音符に名前が割り当てられています。各オクターブ内には、「CC#/ Db DD#/ Eb EFF#/ Gb GG#/ Ab AA#/ Bb B C」の順序で12の一意のノートがあり、最後のCは最初の1オクターブ上にあります。
異なるオクターブの音符の違いを伝えるために、数字(このチャレンジでは1桁に制限されています)が音名の最後に追加されます。したがって、C5はC4より1オクターブ高い音です。Bb6はB5の上にあります。
重要な事実は、B5とC6が隣り合っているノートであり、C0とB9が最低と最高のノートであることです。
2つの音符の間には、それらの間の半音の数である距離があります。Bb4はB4の1半音下にあり、それ自体がC5の1半音下にあります。1オクターブには12の半音があるため、Bb4はA#3から12の距離にあります。
チャレンジ
あなたの課題は、STDINから音符のリストを取得し、間隔の変更のリストをSTDOUTに出力できる最短のプログラムを作成することです。
入力は、スペースで区切られた音符のリストです。各メモは、大文字のAG、オプションのbまたは#記号、および1桁の数字で構成されます。E#/ FbまたはB#/ Cbを処理する必要はありません。入力例:
C4 D4 E4 F4 G4 A4 B4 C5 C4
出力は、連続する各ノート間の距離を表す整数のスペースで区切られたリストになります。常に前に+または-が付いて、ノートが前のノートと比較して昇順か降順かを示します。入力されたノートよりも常に1つ少ない数が出力されます。上記の入力の出力例:
+2 +2 +1 +2 +2 +2 +1 -12
さらにいくつかの入力例:
E5 D#5 E5 B4 E5 F#5 E5 B4
C0 B0 Bb1 A2 G#3 G4 F#5 F6
G4 Ab4 Gb4 A4 F4 A#4
そして対応する出力:
-1 +1 -5 +5 +2 -2 -5
+11 +11 +11 +11 +11 +11 +11
+1 -2 +3 -4 +5
ルールと制限
勝者はソースコードの文字数によって決まります
プログラムは、印刷可能なASCII文字のみで構成する必要があります
音楽やサウンドに関連するあらゆる組み込み機能の使用は許可されていません
それ以外には、標準のコードゴルフ規則が適用されます
+0
か-0
、またはそれとも印刷する必要がありますか0
?