temp 폴더의 깊이를 파고 들면 피아노를위한 작곡이 있습니다. 불행히도, 이러한 작곡은 음표 이름과 지속 시간으로 만 작성되었으며 텍스트 터미널에만 액세스 할 수 있습니다. 따라서 당신의 임무는 작곡을 ASCII 아트로 표시하는 프로그램을 작성하는 것입니다.
입력
프로그램은 두 개의 문자열을 입력으로 받아 들여야합니다. 첫 번째 줄은 최고 직원의 음표 (고음 음자리표 포함)를 나타내고 두 번째 줄은 하단 직원의 음표를 나타냅니다.
노트는 과학적인 피치 표기법 으로 전달 됩니다 . 최고 직원의 메모는 항상 사이 C4
에 C6
포함됩니다. 하단 직원의 메모는 항상 사이 C2
에 C4
포함됩니다.
각 주 중 하나가 될 것입니다 기간, 함께 올 것이다 : 1
, 2
, 4
, 8
. 이들은 각각 음표 (반 음표), 반 음표 (최소), 1/4 음표 (크로 셰) 및 8 분 음표 (사분면)를 나타냅니다.
다른 지속 시간의 메모는 입력에 나타나지 않습니다.
음표와 지속 시간이 분리되는 방법 및 입력에서 각 음표가 다른 음표와 분리되는 방법은 사용자의 재량에 달려 있습니다. 다음은 최고 직원을위한 샘플 입력입니다.
E4/4 A4/8 C#5/8 E5/2
여기에서 음표는 공백으로 분리되고 지속 시간은 슬래시로 음표와 분리됩니다. 이 삼각근은 고정되어 있지 않으므로 변경하거나 완전히 생략 할 수 있습니다.
각 직원마다 하나 이상의 메모가 있다고 가정 할 수 있습니다. 입력에 휴식이 없습니다.
산출
프로그램은 다음 설명에 따라 점수를 ASCII 아트로 출력합니다.
음자리표는 출력 왼쪽의 첫 번째 항목이어야합니다 (두 스태프 사이의 거리는 변경하지 않아야 함).
^
| |
------|/----
/
-----/|-----
/ |
---/--__----
| / \
---\-\|-|---
\ | /
------|-----
|
\_/
----___-----
/ \ |
---\---|----
| |
-------/----
/
-----/------
------------
메모가 직원의 중간 선 아래에있는 경우 메모의 줄기 (원 옆에있는 세로선)가 위쪽을 가리켜 야합니다. 메모가 직원의 중간 선 위에 있으면 아래쪽을 향해야합니다. 메모가 가운데 선에 있으면 줄기가 어느 방향을 가리킬 수 있습니다. (이것에 대한 유일한 예외는 보너스에 대한 것이며, 나중에 설명 할 여덟 번째 음표를 연결할 때 발생합니다). 줄기는 원 위 / 아래의 선에서 시작해야하며 6
키가 큰 선 이어야 합니다.
전체 노트를 제외한 모든 유형의 노트에는 줄기가 있습니다. 여덟 번째 음표의 플래그는 서로 다른 줄에 두 개의 슬래시로 표시됩니다 (아래 예제 메모 참조).
채워진 메모 헤드 (4 분의 1 및 8 분 음표)는로 표시됩니다 (@)
. 빈 메모 헤드 (반음 및 전체 음표)는로 표시됩니다 ( )
.
실수 (예리한 부분, 평평한 부분, 자연스러운 부분)는 예제 노트에 표시된대로 실수의 오른쪽과 노트 헤드의 왼쪽 사이에 정확히 하나의 문자를 배치해야합니다.
원장 줄은 필요한 경우 사용되어야하며 7
메모 헤드를 중심으로 한 문자 길이 여야합니다 .
각 노트는 12
문자 너비 여야합니다 .
예제 노트 :
|_
|_| ( )
| |------
|
------------ ---------|-- ------------ ------------ ------------
|
------------ ---------|-- ---|-------- ------------ ------------
(@) _|_|_ | |_
-----|------ _|_|_-( )--- ---|/-(@)--- ------------ ---------|\-
| | | | | \
-----|------ ------------ -----|------ ------------ ---------|--
| | |
-----|------ ------------ -----|------ ------------ ---------|--
| | / |
|/ --(@)--
quarter note half note eighth note whole note eighth note
sharped flatted natural
12 문자 참고 한 후, 떠날 2 * 12 - 12 = 12
문자를 공백 (하나 또는
-
라인에 따라) 메모가 분 음표 인 경우. 메모가 반음이면 4 * 12 - 12 = 36
문자를 비워 두십시오. 메모가 전체 메모 인 경우 8 * 12 - 12 = 84
문자를 비워 두십시오. 여덟 번째 음표에 문자를 추가하지 마십시오.
각 소절의 끝 (음자리표 또는 막대 줄 뒤에 96 자)이 막대 줄을 출력합니다. 이것은 맨과 가장 아래 라인 (포함) 사이의 모든 문자를 추락, 및 교체에 의해 이루어집니다 로
|
와 -
함께 +
. (질문 하단의 출력 예 참조).
작품의 끝에서 3 개의 줄을 연속으로 출력하여 첫 번째와 두 번째 사이에 공백을 두어 음악 끝을 출력합니다. 그건:
+-++
| ||
+-++
| ||
. ..
. ..
샤프, 플랫 및 내추럴은 측정이 끝날 때까지 지속됩니다. 자연 표시는 동일한 측정에서 이전에 사용한 샤프 또는 플랫을 취소하는 데만 사용해야합니다.
이 작업을 위해 샤프, 플랫 및 내추럴은 한 옥타브 및 한 음자리표의 음표에만 영향을 미칩니다 (A5의 샤프는 A4가 샤프되지 않으며 상단 직원의 C4의 플랫은 원인이되지 않습니다. 바닥 직원의 C4).
보너스 정보
보너스는 8 분 음표를 올바르게 연결하는 것입니다.
4 분 음표 비트에 맞춰 연속 된 8 분 음표가 2 개 있으면 (즉, 첫 번째 8 분 음표 앞의 문자 수는 24의 배수 임), 2 분의 8 분 음표가 연결됩니다.
직원 A 에서 가장 먼 메모 A를 참고하십시오. 두 음표가 중간에서 동일한 거리 인 경우 두 음표는 모두 음표 A 가 될 수 있습니다 . 다른 쪽지를 B 쪽이라고하자 .
의 방향 모두 노트의 줄기의 방향이어야한다 줄기 .
음표 중 하나의 줄기는 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
출력 :
^
| | | | |
------|/-------------|-----------------------|--------------------------------------------------------------+---------|-----------------------|--------------------------------------------------------------+----------___________-------------___________------------|\----------|\----------|\----------|\-+---------|-----------------------|--------------------------------------------------------------+-++
/ | | | | | | | | | | | | | \ | \ | \ | \| | | | | ||
-----/|--------------|-----------------------|-----------------------|--------------------------------------+---------|-----------------------|-----------------------|--------------------------------------+---------|-----------|-----------|-----------|-----------|-----------|-----------|-----------|--+---------|-----------------------|-----------------------|--------------------------------------+-++
/ | | | | | | | | | | | | | | | | | | | | | | ||
---/--__----_|_|_----|-----------------------|-----------------------|--------------------------------------+_|_|_----|-----------------------|-----------------------|--------------------------------------+---------|-----------|-----------|-----------|-----------|-----------|-----------|-----------|--+_|_|_----|-----------------------|-----------------------|--------------------------------------+-++
| / \ _|_|_ (@) _|_|_ | | |_|_|_ (@) _|_|_ | | | | | | | _|_|_ | | | | |_|_|_ (@) _|_|_ | | | ||
---\-\|-|----|-|--------------------_|_|_-(@)---------------_|_|_----|--------------------------------------+-|-|--------------------_|_|_-(@)---------------_|_|_----|--------------------------------------+_|_|_----|-----------|-----------|-----------|--_|_|_-(@)---------(@)---------(@)---------(@)---+-|-|--------------------_|_|_-(@)---------------_|_|_----|--------------------------------------+-++
\ | / | | _|_|_ ( ) | | | _|_|_ ( ) |_|_|_ (@) (@) (@) (@) | | | | | _|_|_ ( ) | ||
------|------------------------------------------------------|-|--------------------------------------------+-------------------------------------------------|-|--------------------------------------------+-|-|--------------------------------------------------------------------------------------------+-------------------------------------------------|-|--------------------------------------------+-++
| | | | | ||
\_/ | | | | ||
| | | | ||
| | | | ||
| | | | ||
| | | | ||
_|_|_ |_|_|_ | | | ||
----___-----_|_|_-(@)---------------_|_|_-------------------------------------------------------------------+_|_|_-(@)---------------_|_|_-------------------------------------------------------------------+------------------------------------------------_|_|_-------------------------------------------+------------------------------------------------------------------------------------------------+-++
/ \ | | | | _|_|_ (@) _|_|_ | | | | _|_|_ (@) _|_|_ |_|_|_ _|_|_ ( ) |_|_|_ | ||
---\---|---------|-------------------|-|-|------------------_|_|_-( )---------------------------------------+-----|-------------------|-|-|------------------_|_|_-( )---------------------------------------+_|_|_-( )----------------------------------------|-|-|------------------------------------------+_|_|_ (@)---------------_|_|_-------------------------( )---------------------------------------+-++
| | | | | | | | | | | | | | | | | | | | | | _|_|_ (@) | | ||
-------/---------|-----------------------|-----------------------|------------------------------------------+-----|-----------------------|-----------------------|------------------------------------------+-----|-----------------------------------------------|------------------------------------------+-----|-------------------|-|-|-----------------------|------------------------------------------+-++
/ | | | | | | | | | | | | | | | ||
-----/-----------|-----------------------|-----------------------|------------------------------------------+-----|-----------------------|-----------------------|------------------------------------------+-----|-----------------------------------------------|------------------------------------------+-----|-----------------------|-----------------------|------------------------------------------+-++
| | | | | | | | | | | | | ||
-----------------------------------------------------------------|------------------------------------------+-----------------------------------------------------|------------------------------------------+-----|------------------------------------------------------------------------------------------+-----|-----------------------|-----------------------|------------------------------------------+-++
|
시연을 위해 세 번째 측정에서는 F#
8 분 음표가 연결되어 있지만 8 분 음표는 연결되어 G#
있지 않습니다. 프로그램은 해당 될 때마다 (여분의 경우) 여덟 번째 음표를 연결하거나 모두 분리 된 상태로 두어야합니다.
기타 정보
- 임의의 양의 후행 공백 / 줄이 허용됩니다.
- 음자리표 앞에 공백이 없어야하고 음표 사이에 공백이 없어야합니다. 출력 전 / 후에 임의 개수의 빈 줄이 방출 될 수 있습니다.
- 여덟 번째 노트를 연결하면 보너스 는 소스 코드의 0.75 * 바이트 수입니다 .
- 이것은 code-golf 이므로 가장 짧은 코드가 승리합니다.