많은 사람들이 재미와 오락을 위해 음악을 좋아합니다. 불행히도 때때로 음악은 꽤 어렵습니다. 그래서 여기에 있습니다!
직무
어려움을 겪고있는 사람들이 음악을 훨씬 쉽게 읽을 수 있도록하는 것이 당신의 일입니다. 뮤지컬 스태프를 입력으로 사용하고 해당 스태프에 작성된 노트의 이름을 출력하는 프로그램 또는 기능을 작성해야합니다.
직원, 음자리표 및 메모
뮤지컬 직원 , 또는 지팡이는 4 개의 공백이있는 inbetween 다섯 개 수평 라인이다. 각 선 또는 공간은 음자리표에 따라 다른 음표 (피치)를 나타냅니다.
몇 가지 뮤지컬 음자리표 중에서 선택할 수 있지만 현재는 고음 음자리표 만 다루고 있습니다 . 고음 음자리표에서 메모는 다음과 같이 직원에게 표시됩니다.
윤곽 F ---------- D ---------- B ---------- G ---------- E ----------
공백 ---------- 이자형 ---------- 씨 ---------- ㅏ ---------- 에프 ----------
입력 형식
입력은 다음과 같이 단일 문자열로 제공됩니다.
--------------- --------------- --------------- --------------- ---------------
직원의 5 줄과 4 줄은 9 줄의 문자로 구성됩니다. 직원의 줄은 -
(하이픈) 문자로 구성되고 공백은 (공백)으로 구성됩니다. 각 행은 다음과 같이 하나의 줄 바꿈
-----\n \n-----\n \n-----\n \n-----\n \n-----\n
문자로 구분됩니다. 또한 행의 길이는 항상 3으로 나눌 수 있습니다 (한 음표의 패턴 다음에 음표가없는 두 열).
해당 직원 -
또는 문자를 로 대체하여이 직원에게 메모 를
o
합니다. 음은 반음 (음과 음과 인접한 음의 주파수 차이의 약 절반)만큼 음높이를 높이거나 (날카롭게) 낮추거나 (플랫) 낮출 수 있습니다. 이것은 대신에 #
및 로 표시됩니다 . 각 노트는 정확히 두 문자로 다음 노트와 분리되며 첫 번째 노트는 항상 첫 번째 "열" 및 (공백) 문자에서 발생합니다. b
o
-
-
메모 이름을 출력 할 때 프로그램은 항상 A B C D E F G
직원에게 주어진 메모에 해당하는 대문자 ( )를 사용해야합니다 . 샤프 ( #
) 및 플랫 ( b
) 노트의 경우 프로그램 에서 노트에 해당하는 문자에 각각 #
및 을 추가해야합니다 b
. 날카 롭거나 평평하지 않은 자연 노트의 경우 (공백)을 대신 추가해야합니다.
예
입력:
---------------------영형-- 영형 ---------------영형-------- 영형 ---------비-------------- 영형 ---영형-------------------- 영형 ------------------------
*이 예에서 모든 "빈 공간"은 실제로 (공백 문자)입니다.
이 경우 (단순 F 메이저 스케일) 프로그램에서 다음을 출력해야합니다.
FGA Bb CDEF
출력 문자 사이의 간격은 위의 그림과 정확하게 일치해야 직원의 메모에 정확하게 맞습니다. 모든 음표 이름 사이에는
Bb
및 사이를 제외하고 두 개의 공백 문자가 C
있습니다. 는 b
여기에 하나 대체 (공백) 문자.
다른
입력 예 :
------------------------ 영형 ------------------ # ----- # ------------영형----------- 영형 ------ # ----------------- # 영형-----------------------
산출:
E F# G# A B C# D# E
행운을위한 또 하나의 예
입력 :
--------------------- oooo --------------------- 영형 --------------------- --------------- o--o-- ---------------------
산출:
E E E C E G G
규칙
- 참고 사항은 E 선의 최대 5 개 직원 범위에서 최대 F까지 선명하게 표시됩니다 (문제는 제외하고 아래 참조).
- 음악에서 흔히 볼 수있는 음표뿐만 아니라 모든 음표가 날카 로워 지거나 평평 할 수 있습니다 (예 : 실제로 B #이 실제로 C로 연주되고 있음에도 불구하고 B #은 여전히 입력에서 발생할 수 있음)
- 3 열 당 정확히 하나의 음표가 있다고 가정 할 수 있습니다 (따라서 화음이나 그와 같은 것이 없으며 나머지도 없습니다)
- 마지막 메모 다음에 메모가없는 두 개의 열이 있다고 가정 할 수 있습니다
- 직원의 마지막 줄조차도 줄 바꿈 문자 하나가 뒤따를 것이라고 가정 할 수 있습니다
- 입력은 STDIN (또는 동등한 언어) 또는 함수 매개 변수에서 가져와야합니다.
- 프로그램이 함수 인 경우 출력은 STDOUT (또는 동등한 언어) 또는 리턴 결과 여야합니다.
- 표준 허점과 내장이 허용됩니다! 음악은 실험하고 놀기위한 것입니다. 어리석은 언어를 사용하는 것이 가장 흥미로운 프로그램을 만들지 못할 수도 있음을 알고 있지만
- 이것은 code-golf 이므로 바이트 단위의 가장 짧은 프로그램이 승리합니다.
보너스 도전
- 프로그램이 직원의 최상위 라인 (G, G #, Gb) 위의 공간을 성공적으로 처리 할 수있는 경우 -10 %
- 프로그램이 직원의 최종선 아래 공간을 성공적으로 처리 할 수있는 경우 -10 % (D, D #, Db)
- 이 경우 프로그램은 시작과 끝에 추가 행을 입력으로 사용합니다. 이 행은 다른 9 개의 행과 동일하게 취급해야합니다.