注:Anders Kaseorgは、これは別の以前の質問と重複する可能性があると警告しています。そう思われますが、この質問を投稿する前にその質問を見つけられなかったのが残念です。それにもかかわらず、その質問は1つの答えしか受け取っておらず、この質問は皆さんが今回試してみたい場合に備えて、より簡単です。ただし、この質問が重複としてマークされてしまうかどうかは理解できます。
チャレンジ
次のような入力が与えられた場合:
8g 8Df 4cs 2C 1A
次のような出力を生成する最短のプログラム/関数を作成します。
/\ -o-
| |
---|-|---------------------------------------------------|-|
|/ | |
---/|--------|\----b-*-----------------------------------|-|
/ | | | | o | |
-|--|--------|------|-----------------|------------------|-|
| (| \ | | | | | |
-|--|--)----*-------|/---------|------|------------------|-|
\ | / | | | |
-----|-------------------------|-------------------------|-|
| |
*_/ #-*-
ルール
出力は、上記のとおり正確にG音部記号の描画で始まる5行の譜表で構成され、譜表の左側に揃えられ、譜表の開始後に単一の列が残されている必要があります。
/\
| |
---|-|--
|/
---/|---
/ |
-|--|---
| (| \
-|--|--)
\ | /
-----|--
|
*_/
^
Single column
ノートは、タイプに応じて*
またはで始まる必要がありますo
。
すべて*
またはo
文字ごとに正確に8列の分離が必要です。
/\ -o-
| |
---|-|---------------------------------------------------|-|
|/ | |
---/|--------|\----b-*-----------------------------------|-|
/ | | | | o | |
-|--|--------|------|-----------------|------------------|-|
| (| \ | | | | | |
-|--|--)----*-------|/---------|------|------------------|-|
\ | / | | | |
-----|-------------------------|-------------------------|-|
| |
*_/ #-*-
↑ ↑ ↑ ↑ ↑ ↑ ↑
8 columns of separation
譜表は、例に示されているように、ターミネーターを右に揃えて終了する必要があります。ターミネーターの左のバーは、最後の音から8列離れている必要があります。
入力は、空白で区切られたノート(少なくとも1つ、空の入力なし)を含む単一の文字列になります(すべてのノートが適切なものであると見なすことができるため、エラーをチェックする必要はありません)。入力を文字列の配列として受け取ることもでき、配列の要素ごとにメモがあります。各ノートのために、最初の文字は、音符の長さ(の分母になる1
ための全音符/ semibreve、との開始o
; 2
のために半分ノート/ミニム、との開始o
; 4
のために四分音符/音符で始まり*
、と8
のために第八note / quaverで始まります*
)。2番目の文字は音符(次の表を参照)、および第三の、任意の文字であろうとなりf
又はF
フラット音符およびs
またはS
シャープなメモ。
--- A (ledger line)
G
-------- F
E
-------- D
C
-------- b
a
-------- g
f
-------- e
d
--- c (ledger line)
明らかに、入力では音符の大文字と小文字を区別する必要がありますがf
、s
修飾子の。
メモc
をA
追加し-
、スタッフを延長する必要があるため、各側に1つずつ、2つ(元帳行)を追加する必要があります。メモd
とG
スタッフはなくなりましたが、元帳行は必要ありません。
平坦化またはシャープ化されたノートは、追加b
または#
は、ノートの左側に1つ 2つの位置をます。
ステム(ある場合)は、4本の垂直バーで描画する必要があります。音符のb
上と音符は、音符の左下にステムを描画する必要があります。a
上下の音符は、音符の上側で音符の右側にステムを描画する必要があります。四分音符は、常に右方向に表示されているとおりにフラグを追加する必要があります。また、列に複数のフラグがある場合は、ビームする必要はありません。
--------------------------
-----|\----b-*------------
| | |
-----|------|-------------
| | |
----*-------|/---------|--
↑↑ |
----||------↑↑---------|--
|| || |
|| || #-*-
|\ |\ ↑↑
| Stem | Note | Stem
Note Stem Note
通常どおり、プログラム/関数は出力を直接描画したり、文字列、文字列の配列、文字のマトリックス、またはその他の適切な形式を返すことができます。
便利なリンク
これはコードゴルフですなので、各言語の最短のプログラム/機能が勝つかもしれません!
おまけ:有名なメロディーを使って例を書いてみて、誰もがそれがどのメロディーであるかを推測できるようにしてください!