Biorąc pod uwagę dwie nazwy nut, masz napisać program, który określa, czy interwał utworzony przez te dwie nuty jest spółgłoskowy czy dysonansowy.
Wprowadzenie
W muzyce zachodniej jest tylko 12 „różnych” dźwięków. Ich nazwiska, sortowane od najniższego do najwyższego, są następujące: C, C#, D, D#, E, F, F#, G, G#, A, A#, B
. Sekwencja jest cykliczna, tzn. Kontynuowana jest następna C
po B
nieskończoności.
Odległość między dwoma tonami nazywana jest interwałem . Odstęp między dowolnymi dwiema nutami sąsiadującymi z powyższą serią (np. C — C#
Lub E — F
) nazywa się półtonem . Przerwa między bardziej odległymi nutami jest zdefiniowana jako liczba kroków półtonowych potrzebnych do przejścia od pierwszego do drugiego (przy możliwym owinięciu wokół sekwencji). Kilka przykładów: D to E
= 2 półtonów, C to G
= 7 półtonów, B to D#
= 4 półtonów (dotyczy to sekwencji). 1
Teraz te interwały są podzielone na dwie kategorie: spółgłoska (brzmi przyjemnie, jeśli grasz dwie nuty jednocześnie) i dysonans (nie tak bardzo).
Zdefiniujmy przedziały spółgłosek: 0, 3, 4, 5, 7, 8 i 9 półtonów.
Reszta jest dysonansowa, a mianowicie: 1, 2, 6, 10 i 11 półtonów.
Wyzwanie
Napisz „program” (w szerokim znaczeniu tego słowa: funkcja jest całkowicie OK), aby wykonać następujące czynności:
Weź jako nazwę dwie nazwy nut (ciągi z powyższej sekwencji). Możesz wziąć je w dowolny sposób (od standardowego, jako argumenty, oddzielone czymkolwiek chcesz, możesz nawet wziąć je jako listę znaków (np
["C","#"]
.). Jednak nie możesz przypisywać żadnych innych nazw notatkom (szczególnie ty nie może ich numerować od 0 do 11 i używać liczb).Dla waszych maniaków muzycznych nuty zostaną określone bez oktawy. W tym przypadku nie ma również znaczenia, w jakiej kolejności przychodzą nuty, a która jest niższa, a która wyższa. Wreszcie, nie musisz obsługiwać żadnych nazw, których nie ma na powyższej liście. Żadnych innych ulepszeń, takich jak
E#
mieszkania, podwójnych przeróbek i tak dalej.Wybierz dowolne dwie różne wartości. Twój program musi wypisać jeden z nich, ilekroć interwał utworzony przez dwie nuty na wejściu jest spójny, a drugi, jeśli tak nie jest. (Może być
True
iFalse
, ale nawet gatunku i e jeśli chcesz :))To jest golf golfowy. Wygrywa najkrótszy program w bajtach w każdym języku. Baw się dobrze!
Przykłady i przypadki testowe
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
Nie dodam ich więcej, ponieważ nie ma w tym szczególnie zdradliwych przypadków.
To moje pierwsze wyzwanie, więc wszelka konstruktywna krytyka jest mile widziana :—). Jeśli uważasz, że wyjaśnienie teorii jest niechlujne, możesz zadawać pytania. Na koniec, proszę nie mów mi, że jest to dupe od tego czy tego . Upewniłem się, że tak nie jest. (Ta ostatnia jest dość podobna, ale bardziej złożona. Myślałem, że postawienie nieco prostszego wyzwania ułatwi ludziom przyłączenie się.)
1 : Starałem się maksymalnie uprościć to wyjaśnienie. Istnieje wiele teorii dotyczących interwałów. Proszę nie bić mnie za to, że to pominęłem.