Dati due nomi di nota, devi scrivere un programma che determina se l'intervallo formato da queste due note è consonante o dissonante.
introduzione
Nella musica occidentale, ci sono solo 12 toni "diversi". I loro nomi, in ordine dal più basso al più alto, sono le seguenti: C, C#, D, D#, E, F, F#, G, G#, A, A#, B
. La sequenza è ciclica, cioè continua con un'altra C
dopo l' B
infinito.
La distanza tra due toni è chiamata intervallo . L'intervallo tra due note qualsiasi che sono adiacenti nella serie sopra (es. C — C#
O E — F
) è chiamato semitono . L'intervallo tra le note più distanti è definito come il numero di passi di semitono necessari per passare dal primo al secondo (possibilmente avvolgendo la sequenza). Alcuni esempi: D to E
= 2 semitoni, C to G
= 7 semitoni, B to D#
= 4 semitoni (questo avvolge la sequenza). 1
Ora, questi intervalli sono divisi in due categorie: consonante (che suona piacevolmente se suoni le due note contemporaneamente) e dissonante (non così tanto).
Definiamo gli intervalli di consonanti come: 0, 3, 4, 5, 7, 8 e 9 semitoni.
Il resto è dissonante, vale a dire: 1, 2, 6, 10 e 11 semitoni.
La sfida
Scrivi un "programma" (nel solito senso della parola: una funzione è perfettamente OK) per fare quanto segue:
Prendi due nomi di nota (stringhe della sequenza sopra) come input. Puoi prenderli come preferisci (da stdin, come argomenti, separati da qualsiasi cosa tu voglia, anche sentirti libero di prenderli come un elenco di caratteri (es
["C","#"]
.). Tuttavia, non puoi assegnare nessun altro nome alle note (specialmente tu non possono numerarli da 0 a 11 e usare i numeri).Per i fanatici della musica, le note verranno specificate senza l'ottava. In questo caso, anche non importa in quale ordine arrivano le note e quale è più basso e quale è più alto. Infine, non è necessario gestire alcun nome non presente nell'elenco precedente. Nessun altro enharmonics piace
E#
, nessun appartamento, doppie alterazioni e così via.Scegli due valori diversi. Il tuo programma deve emetterne uno ogni volta che l'intervallo formato dalle due note nell'input è consonante e l'altro se non lo sono. (Potrebbe essere
True
eFalse
, ma anche π ed e se vuoi :))Questo è un codice-golf. Vince il programma più breve in byte in ogni lingua. Divertiti!
Esempi e casi di test
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
Non ne aggiungo altri poiché non ci sono casi particolarmente insidiosi in questo.
Questa è una mia prima sfida, quindi ogni critica costruttiva è calorosamente benvenuta: -. Se trovi la spiegazione della teoria sciatta, sentiti libero di porre domande. Infine, per favore, non dirmi che questo è un aspetto negativo di questo o questo . Mi sono assicurato che non lo fosse. (Quest'ultima è abbastanza simile ma più complessa. Ho pensato che affrontare una sfida un po 'più semplice rendesse più facile la partecipazione delle persone.)
1 : ho cercato di semplificare al massimo questa spiegazione. C'è molta più teoria sugli intervalli. Per favore, non mi colpire per averlo lasciato fuori.