관련 : 음악 :이 화음에는 무엇이 있습니까? , Tablature 에 대한 메모 , 기타 탭 생성? , 숫자 쌍을 기타 노트로 번역
기타 핑거링이 주어지면 그것이 나타내는 코드를 출력합니다. 표준 입력 및 출력을 사용하거나 문자열을 반환하는 함수를 작성할 수 있습니다.
입력 핑거링은 다음 코드 중 하나로 분류 할 수 있으며 다음과 같이 표현됩니다 (근음이 C 인 경우).
- 주요 트라이어드 :
C
- 작은 트라이어드 :
Cm
- (주) 일곱째 :
C7
- 미성년자 일곱째 :
Cm7
화음이 거꾸로 될 수 있으므로 가장 낮은 음을 근음으로 사용할 수 없습니다. 또한 현실 세계에서 이것이 쉽고 일반적인 핑거링에 의존 할 수도 없습니다. 보다 일반적으로 프로그램의 출력은 피치의 옥타브를 무시하고 동일한 음표 (예 :)에 해당하는 모든 피치를 A
동일하게 취급해야합니다.
이것은 code-golf 이므로 바이트 단위의 가장 짧은 코드가 이깁니다.
입력 형식
입력은 표준 튜닝 (EADGBE) 에서 6 줄 기타의 각 줄에 대해 해당 줄이 연주되는 프렛을 나타내는 일련의 6 개의 값입니다 . 또한 현이 전혀 연주되지 않음을 나타낼 수도 있습니다. "제로"프렛은 개방 위치라고도하며 프렛 번호는 거기에서 계산됩니다. 기타에 프렛 위치가 21 개라고 가정하면 가장 높은 프렛 위치는 20 번입니다.
예를 들어, 입력 X 3 2 0 1 0
은 손가락을 기타 목 상단의 다음 위치에 배치하는 것을 의미합니다.
(6th) |---|---|---|---|---
|-X-|---|---|---|---
|---|---|---|---|---
|---|-X-|---|---|---
|---|---|-X-|---|---
(1st) |---|---|---|---|---
두 번째 줄부터 여섯 번째 줄까지 골라냅니다. 이 ASCII 탭에 해당합니다 .
e |-0-|
B |-1-|
G |-0-|
D |-2-|
A |-3-|
E |---|
원하는 종류의 입력을 선택할 때 약간의 유연성이 있습니다. 각 프렛 위치는 문자열 또는 숫자로 표현할 수 있습니다. 연주되지 않는 기타 줄은 일반적으로로 표시 X
되지만 -1
숫자를 사용하는 경우 와 같이 더 쉬운 경우 다른 센티넬 값을 선택할 수 있습니다 . 일련의 6 개 프렛 위치는 목록, 배열 또는 시퀀스 유형, 공백으로 구분 된 단일 문자열 또는 표준 입력으로 다시 입력 할 수 있습니다.
위에서 언급 한 4 가지 코드 형식 중 하나에 해당하는 입력에 의존 할 수 있습니다.
솔루션에 어떤 형태의 입력이 필요한지 게시물에 설명하십시오.
출력 형식
운지법이 적용되는 코드를 설명하는 문자열을 표준 출력으로 반환하거나 인쇄해야합니다. 이 줄은 서로 연결된 두 부분으로 구성됩니다. 총액 사항. 후행 공백이 허용됩니다.
첫 번째 부분은 표시 근음 중 하나를 A
, A#
/ Bb
, B
, C
, C#
/ Db
, D
, D#
/ Eb
, E
, F
, F#
/ Gb
, G
또는 G#
/ Ab
. (내가 사용하고 #
대신 ♯
하고, b
대신 ♭
유니 코드를 필요로하는 피하기 위해.) 그들없이 표현되어야 날카로운 또는 평면없이 표현 될 수있는 루트 메모를 (절대 출력 B#
, Fb
또는 Dbb
); 단일의 날카 롭거나 평평한 기호로 표현할 수없는 것 (즉, C#
또는 Db
, 그러나 절대로 B##
). 즉, 노트 이름에서 우연한 수 (날카 롭거나 평평한) 수를 최소화해야합니다.
두 번째 부분은 메이저 트라이어드, m
마이너 트라이어드, 7
지배적 인 일곱 번째 또는 m7
마이너 일곱 번째에 대해 비어있는 코드 유형을 나타냅니다 . 따라서 G 메이저는 단순히로 출력 G
되는 반면 D♯ 마이너 7은 D#m7
또는 로 출력 될 수 있습니다 Ebm7
. 테스트 사례에서 더 많은 예제를 찾을 수 있습니다.
이론 및 힌트
뮤지컬 악보
반음계는 옥타브 당 12 개의 피치를가집니다. 같은 기질로 조율 될 때, 이들 피치 각각은 그 이웃들 ( 1) 로부터 동등하게 떨어져있다 . 12 반음 (옥타브) 간격의 피치 는 동일한 음표로 간주됩니다. 이는 우리가 0에서 11까지의 정수 모듈로 12와 같은 음표를 취급 할 수 있음을 의미합니다.이 중 7 개 는 A에서 G까지의 문자 이름으로 2 를 부여 합니다. 12 개의 피치를 모두 명명하기에는 충분하지 않지만 실수로 추가하면 다음과 같이 수정됩니다. 날카롭게) 음표에 반음이 높아지고 flat (평평)을 추가하면 반음이 낮아집니다.
화음
화음은 함께 연주되는 2 개 이상의 음표입니다. 코드 유형은 음표 간의 관계에 따라 달라지며 음표 간의 거리에 따라 결정됩니다. 앞에서 언급했듯이 코드에는 근음이 있습니다. 이 예제에서는 근음을 0으로 취급하지만, 이것은 임의적이며,이 문제에서 중요한 것은 모듈로 산술에서 음 사이의 거리입니다. 해답을 위해 항상 3 가지 코드 또는 7 번째 코드 중 하나의 고유 한 코드 형식이 있습니다. 근음이 항상 최저 주파수 피치는 아닙니다. 다음 4 가지 코드 형식 중 하나로 코드를 설명 할 수 있도록 근음을 선택하십시오.
- 메이저 3 화음은 음표와 화음입니다
0 4 7
. - 사소한 화음은 음표와 화음입니다
0 3 7
. - 지배적 (또는 주 / 부) 일곱 번째 코드는 노트가 있습니다
0 4 7 10
. - 작은 (또는 미성년자 / 마이너) 일곱 번째의 화음 노트가 있습니다
0 3 7 10
. 삼
기타 튜닝
6 현 기타의 표준 조율은 가장 낮은 현에서 E로 시작하여 5, 5, 5, 4 및 5 반음 간격으로 음을칩니다. 가장 낮은 E를 0으로 사용한다는 것은 기타의 모든 현을 묶는 것은 숫자 0 5 10 15 19 24
로 된 음높이 , 모듈로 12와 같은 0 5 10 3 7 0
음표를 E A D G B E
줍니다.
작동 예
입력 값 0 2 2 0 0 0
이 음인 경우 음표에 해당 E B E G B E
하므로 E, B 및 G 만 해당됩니다.이 음표 Em
는 근음으로 E로 번호를 매기면 알 수 있습니다 0 3 7
. (결과에 대해 동일한 것이 X 2 X 0 X 0
거나 12 14 14 12 12 12
).
입력 값이 4 4 6 4 6 4
이면 근음 C♯로 번호를 매기 7 0 7 10 4 7
면 또는 0 4 7 10
이므로 답은 C#7
(또는 Db7
)입니다. 대신 4 4 6 4 5 4
에 번호를 매기면 7 0 7 10 3 7
, 또는 0 3 7 10
, 즉 C#m7
(또는 Dbm7
)가됩니다.
테스트 사례
X 3 2 0 1 0 ---> C
0 2 2 0 0 0 ---> Em
X 2 X 0 X 0 ---> Em
4 4 6 4 6 4 ---> C#7 (or Db7)
4 4 6 4 5 4 ---> C#m7 (or Dbm7)
0 2 2 1 0 0 ---> E
0 0 2 2 2 0 ---> A
X X 4 3 2 2 ---> F# (or Gb)
3 2 0 0 0 1 ---> G7
X X 0 2 1 1 ---> Dm7
3 3 5 5 5 3 ---> C
4 6 6 5 4 4 ---> G# (or Ab)
2 2 4 4 4 5 ---> B7
0 7 5 5 5 5 ---> Am7
7 6 4 4 X X ---> B
8 6 1 X 1 3 ---> Cm
8 8 10 10 9 8 --> Fm
0 19 5 16 8 7 --> Em
6 20 0 3 11 6 --> A# (or Bb)
X 14 9 1 16 X --> G#m (or Abm)
12 14 14 12 12 12 --> Em
15 14 12 12 12 15 --> G
20 X 20 20 20 20 --> Cm7
X 13 18 10 11 10 --> A#7 (or Bb7)
주파수의 로그에 의해 1
2 또는 solfège 에서 do, re, mi 와 같은 이름 입니다. 이 도전에서는 문자 이름을 사용하십시오.
3 이것은 또한 근음의 다른 선택과 함께 주요 여섯 번째 화음이라고 할 수 있습니다. 이 도전에서는 그것을 작은 일곱 번째 이름으로 부르십시오.