두 개의 음표 이름이 주어지면,이 두 음표에 의해 형성된 간격이 자음인지 음소인지를 결정하는 프로그램을 작성해야합니다.
소개
서양 음악에는 12 가지 "다른"톤이 있습니다. 그들의 이름은 가장 낮은 것부터 가장 높은 것까지 다음과 같습니다 C, C#, D, D#, E, F, F#, G, G#, A, A#, B
. 순서는 순환, 그것은 서로 계속 즉, C
애프터 B
무한.
두 톤 사이의 거리를 간격 이라고 합니다 . (예를 들어 위의 일련의 인접한 두 음의 간격 C — C#
또는은 E — F
)을 호출 반음 . 더 먼 음 사이의 간격은 첫 번째부터 두 번째까지 (시퀀스를 감싸는 동안) 필요한 반음 단계의 수로 정의됩니다. 몇 가지 예 : D to E
= 2 개의 반음, C to G
= 7 개의 반음, B to D#
= 4 개의 반음 (이는 시퀀스를 둘러 쌉니다). 1
자,이 간격은 자음 (한 번에 두 음을 연주하면 기분이 좋음)과 불협화음 (별로 많지 않음 )의 두 가지 범주로 구분됩니다 .
자음 간격을 0, 3, 4, 5, 7, 8 및 9 반음으로 정의합시다.
나머지는 불쾌합니다. 즉 1, 2, 6, 10 및 11 반음입니다.
도전
다음을 수행하기 위해 "프로그램"을 작성하십시오 (일반적으로 넓은 의미에서 기능 : 완벽하게 정상입니다).
입력으로 두 개의 메모 이름 (위의 순서에서 나온 문자열)을 사용하십시오. 원하는대로 원하는대로 사용할 수 있습니다 (stdin에서 인수로, 원하는대로 구분하여 문자 목록 (예 :)으로 자유롭게
["C","#"]
사용할 수도 있습니다). 0에서 11까지 번호를 매기 지 않고 숫자를 사용할 수 있습니다).당신이 음악 괴짜를 위해, 음은 옥타브없이 지정됩니다. 이 경우, 음표의 순서와 순서는 중요하지 않습니다. 마지막으로 위 목록에없는 이름을 처리 할 필요가 없습니다.
E#
아파트, 아파트, 이중 개조 등의 다른 어모 니즘은 없습니다.두 가지 다른 값을 선택하십시오. 입력의 두 음표에 의해 형성된 간격이 자음이고 그렇지 않은 경우 다른 하나가 출력되어야합니다. (
True
및 가능False
하지만 원하는 경우 π 및 e도 가능합니다.)이것은 코드 골프입니다. 각 언어에서 가장 짧은 바이트 단위의 프로그램이 승리합니다. 즐기세요!
예 및 테스트 사례
Note 1 Note 2 Output Interval [semitones]
C D Dissonant 2
A# A# Consonant 0
G D Consonant 7 (wraparound)
D# A Dissonant 6
F E Dissonant 11
A C Consonant 3
이것에 특히 위험한 사건이 없기 때문에 더 이상 추가하지 않습니다.
이것은 나의 첫번째 도전이므로, 어떤 건설적인 비판도 따뜻하게 환영합니다 :—). 이론 설명이 조잡하다고 생각되면 언제든지 질문하십시오. 마지막으로 이것이 이것 또는 이것 의 속임수라고 말하지 마십시오 . 나는 그렇지 않다는 것을 확인했다. (후자는 상당히 비슷하지만 더 복잡합니다. 조금 더 간단한 도전을하면 사람들이 더 쉽게 참여할 수 있다고 생각했습니다.)
1 : 가능한 한이 설명을 단순화하려고했습니다. 간격에 대해서는 훨씬 더 많은 이론이 있습니다. 제발 내버려 두지 마