一時フォルダの深さを掘り下げてみると、ピアノの作曲が見つかります。あいにく、これらの楽曲は音名と長さだけで書かれており、テキスト端末にしかアクセスできません。したがって、あなたの仕事は、コンポジションをASCIIアートとして表示するプログラムを書くことです。
入力
プログラムは、入力として2つの文字列を受け入れる必要があります。最初の文字列は、高音部記号(ト音記号付き)の音符を表し、2番目の文字列は、下部の譜表の音符を表します。
メモは科学的なピッチ表記で渡されます。トップスタッフのノートはいつもの間になりますC4
し、C6
包括的。下のスタッフのノートはいつもの間になりますC2
し、C4
包括的。
各ノートには、のいずれかになります期間、付属しています:1
、2
、4
、8
。これらはそれぞれ、音符全体(半音)、半音(最小)、4分音符(かぎ針編み)、および8分音符(四分音符)を表します。
その他の期間のノートは入力に表示されません。
入力内の音符と音符の分離方法、および各音符と他の音符の分離方法は、お客様の裁量によります。以下は、トップスタッフのサンプル入力です。
E4/4 A4/8 C#5/8 E5/2
ここでは、音符はスペースで区切られ、音符は音符とスラッシュで区切られています。これらのデリミタは固定されておらず、変更するか完全に省略するかを選択できます。
各譜表に少なくとも1つのメモがあると想定できます。入力に休符はありません。
出力
あなたのプログラムは、次の説明に従って、スコアをASCIIアートとして出力します。
音部記号は、出力の左側にある最初のものでなければなりません(2つの譜表間の距離は変更しないでください)。
^
| |
------|/----
/
-----/|-----
/ |
---/--__----
| / \
---\-\|-|---
\ | /
------|-----
|
\_/
----___-----
/ \ |
---\---|----
| |
-------/----
/
-----/------
------------
音符が譜表の中央線より下にある場合、音符のステム(円の隣の垂直線)は上を向いている必要があります。音符が譜表の中央線より上にある場合、下を向いている必要があります。音符が中央の行にある場合、ステムはどちらの方向を向いてもかまいません。(これに対する唯一の例外はボーナスであり、後述の8分音符を接続するときに発生します)。幹は円の上下の線から始まり、高さのある線でなければなりません6
。
音符全体を除くすべての種類の音符には語幹があります。8分音符のフラグは、異なる行にある2つのスラッシュで表されます(下の例を参照)。
(4分音符と8分音符の)音符の先頭は、で表され(@)
ます。空の音符の頭(半音と全音)は、( )
ます。
臨時記号(シャープ、フラット、ナチュラル)は、音符の例のように、臨時記号の右側と音符の左側の間に1文字だけ配置する必要があります。
元帳行は必要なときに使用する必要があり、 7
、長さは文字で、音符の頭を中心ます。
各ノートは 12
文字幅にする。
メモの例:
|_
|_| ( )
| |------
|
------------ ---------|-- ------------ ------------ ------------
|
------------ ---------|-- ---|-------- ------------ ------------
(@) _|_|_ | |_
-----|------ _|_|_-( )--- ---|/-(@)--- ------------ ---------|\-
| | | | | \
-----|------ ------------ -----|------ ------------ ---------|--
| | |
-----|------ ------------ -----|------ ------------ ---------|--
| | / |
|/ --(@)--
quarter note half note eighth note whole note eighth note
sharped flatted natural
12文字の音符の後に、音符が4分音符の場合は、2 * 12 - 12 = 12
文字を空白のままにします(どちらか
-
、または行に応じて)。メモが半音の場合は、4 * 12 - 12 = 36
文字を空白のままにします。メモがメモ全体の場合は、そのままにしておきます8 * 12 - 12 = 84
文字を空白のままにします。8分音符に余分な文字を追加しないでください。
各小節の終わり(音部記号または小節線の後に96文字)で、小節線を出力します。これは、最上部と最下部の行(両端を含む)の間のすべての文字を下に移動し
|
、-
with およびwithで置き換えることにより行われ+
ます。(質問の下部にある出力例を参照してください)。
曲の最後で、3行の小節線を1行目と2行目の間にスペースを空けて出力して、音楽の最後を出力します。あれは:
+-++
| ||
+-++
| ||
. ..
. ..
シャープ、フラット、およびナチュラルは、メジャーの終わりまで持続することに注意してください。自然記号は、同じメジャーで以前に使用されたシャープまたはフラットをキャンセルするためにのみ使用する必要があります。
このタスクの目的上、シャープ、フラット、およびナチュラルは1オクターブの音符と1つの音部記号にのみ影響します(A5のシャープはA4をシャープにせず、C4のフラットはトップスタッフを引き起こしませんボトムスタッフのC4をフラットにします)。
ボーナスのみの情報
ボーナスには、8分音符を適切に接続することが含まれます。
4分音符のビートに合わせて2つの連続した8分音符がある場合(つまり、最初の8分音符の前の文字数が24の倍数である場合)、2つの8分音符が接続されます。
音符Aを譜表の中央から最も遠い音符にします。両方の音が中央から同じ距離にある場合、どちらの音も音Aになることがあります。他の音を音Bとするます。
方向の両方がノートの幹の方向でなければなりません茎A。
ノートのいずれかのステムは 6
高線であるあり(一般的な符尾の場合)、他の音符の幹は他の音符の幹の終わりまで延長する必要があります。
茎はに接続する必要があります _
ます。
接続された8分音符の例:
___________
| |
| |
| |
| | --(@)--
| | | |
------------------------ ---|_----|-----------|-- -----|------------------
|/ (@) | | |_
------------------------ ---------------------|-- -----|--------|_|-(@)---
(@) _|_|_ | | ||
-----|------_|_|_-(@)--- ---------------------|-- -----|-----------|------
| | | | | | |
-----|-----------|------ ---------------------|-- -----|-----------|------
| | | | |
-----|-----------|------ ------------------(@)--- -----|___________|------
| |
|___________|
入力と出力の例
入力:
A#4/4 G#4/4 F#4/2 A#4/4 G#4/4 F#4/2 F#4/8 F#4/8 F#4/8 F#4/8 G#4/8 G#4/8 G#4/8 G#4/8 A#4/4 G#4/4 F#4/2
A#3/4 G#3/4 F#3/2 A#3/4 G#3/4 F#3/2 F#3/2 G#3/2 F#3/4 E#3/4 F#3/2
出力:
^
| | | | |
------|/-------------|-----------------------|--------------------------------------------------------------+---------|-----------------------|--------------------------------------------------------------+----------___________-------------___________------------|\----------|\----------|\----------|\-+---------|-----------------------|--------------------------------------------------------------+-++
/ | | | | | | | | | | | | | \ | \ | \ | \| | | | | ||
-----/|--------------|-----------------------|-----------------------|--------------------------------------+---------|-----------------------|-----------------------|--------------------------------------+---------|-----------|-----------|-----------|-----------|-----------|-----------|-----------|--+---------|-----------------------|-----------------------|--------------------------------------+-++
/ | | | | | | | | | | | | | | | | | | | | | | ||
---/--__----_|_|_----|-----------------------|-----------------------|--------------------------------------+_|_|_----|-----------------------|-----------------------|--------------------------------------+---------|-----------|-----------|-----------|-----------|-----------|-----------|-----------|--+_|_|_----|-----------------------|-----------------------|--------------------------------------+-++
| / \ _|_|_ (@) _|_|_ | | |_|_|_ (@) _|_|_ | | | | | | | _|_|_ | | | | |_|_|_ (@) _|_|_ | | | ||
---\-\|-|----|-|--------------------_|_|_-(@)---------------_|_|_----|--------------------------------------+-|-|--------------------_|_|_-(@)---------------_|_|_----|--------------------------------------+_|_|_----|-----------|-----------|-----------|--_|_|_-(@)---------(@)---------(@)---------(@)---+-|-|--------------------_|_|_-(@)---------------_|_|_----|--------------------------------------+-++
\ | / | | _|_|_ ( ) | | | _|_|_ ( ) |_|_|_ (@) (@) (@) (@) | | | | | _|_|_ ( ) | ||
------|------------------------------------------------------|-|--------------------------------------------+-------------------------------------------------|-|--------------------------------------------+-|-|--------------------------------------------------------------------------------------------+-------------------------------------------------|-|--------------------------------------------+-++
| | | | | ||
\_/ | | | | ||
| | | | ||
| | | | ||
| | | | ||
| | | | ||
_|_|_ |_|_|_ | | | ||
----___-----_|_|_-(@)---------------_|_|_-------------------------------------------------------------------+_|_|_-(@)---------------_|_|_-------------------------------------------------------------------+------------------------------------------------_|_|_-------------------------------------------+------------------------------------------------------------------------------------------------+-++
/ \ | | | | _|_|_ (@) _|_|_ | | | | _|_|_ (@) _|_|_ |_|_|_ _|_|_ ( ) |_|_|_ | ||
---\---|---------|-------------------|-|-|------------------_|_|_-( )---------------------------------------+-----|-------------------|-|-|------------------_|_|_-( )---------------------------------------+_|_|_-( )----------------------------------------|-|-|------------------------------------------+_|_|_ (@)---------------_|_|_-------------------------( )---------------------------------------+-++
| | | | | | | | | | | | | | | | | | | | | | _|_|_ (@) | | ||
-------/---------|-----------------------|-----------------------|------------------------------------------+-----|-----------------------|-----------------------|------------------------------------------+-----|-----------------------------------------------|------------------------------------------+-----|-------------------|-|-|-----------------------|------------------------------------------+-++
/ | | | | | | | | | | | | | | | ||
-----/-----------|-----------------------|-----------------------|------------------------------------------+-----|-----------------------|-----------------------|------------------------------------------+-----|-----------------------------------------------|------------------------------------------+-----|-----------------------|-----------------------|------------------------------------------+-++
| | | | | | | | | | | | | ||
-----------------------------------------------------------------|------------------------------------------+-----------------------------------------------------|------------------------------------------+-----|------------------------------------------------------------------------------------------+-----|-----------------------|-----------------------|------------------------------------------+-++
|
デモンストレーションのために、3番目のメジャーではF#
8番目のノートが接続されていますが、G#
ていません。プログラムは、(ボーナスのために)該当する場合は常に8番目のノートを接続するか、すべてを切断したままにしてください。
その他の情報
- 任意の量の末尾の空白/行が許容されます。
- 音部記号の前に余分な空白があってはならず、音符の間に空白があってはなりません。出力の前後に任意の数の空白行が出力される場合があります。
- 8分音符を接続するためのボーナスは0.75 *ソースコードのバイト数です。
- これはcode-golfなので、最短のコードが優先されます。