Dato un elenco di accordi etichettarli come 'Maggiore' o 'Minore'.
Ingresso
L'input sarà un elenco di accordi, uno per riga, composto da 3 note separate da uno spazio. Ogni nota sarà composta dal nome della nota in maiuscolo ( A
- G
) e da un accidentale opzionale ( #
o b
). Gli accordi possono essere in qualsiasi inversione (ovvero le note possono essere in qualsiasi ordine).
Produzione
Se l'accordo è maggiore, produce "Major". Se l'accordo è minore, produce "Minor". Se l'accordo non è né maggiore né minore, genera una riga vuota.
Esempio
Ingresso
C E G
F Ab C
C Eb Gb
E G B
Db F Ab
Bb G D
D A Gb
Produzione
Major
Minor
Minor
Major
Minor
Major
Script di test
Come in alcune delle mie precedenti domande, ho nuovamente macellato alcuni script di test originariamente creati da Joey e Ventero per fornire alcuni casi di test per questa domanda:
Uso: ./test [your program and its arguments]
Rewards
Ogni voce che posso verificare che soddisfa le specifiche, supera i test e ha ovviamente avuto qualche tentativo di giocare a golf riceverà un mio voto (quindi per favore fornisci le istruzioni per l'uso con la tua risposta). La soluzione più breve entro la fine del 13/10/2012 sarà accettata come vincitrice.
Una piccola teoria
Per quelli di voi che non hanno conoscenze di teoria musicale, ecco abbastanza informazioni per essere in grado di competere.
Un accordo maggiore o minore è composto da tre note che sono separate da uno specifico schema di semitoni. Se consideriamo la radice (nota di fondo) dell'accordo 0, allora un accordo maggiore è il pattern 0-4-7 e un accordo minore è il pattern 0-3-7. Le cose sono rese più imbarazzanti dal fatto che alcune note sono un semitono a parte e alcune sono un tono a parte. La diffusione dei semitoni da Ab
- G#
è la seguente:
G#/Ab A A#/Bb B/Cb B#/C C#/Db D D#/Eb E/Fb E#/F F#/Gb G G#/Ab
0 1 2 3 4 5 6 7 8 9 10 11 12
G#/Ab
significa che G#
è la stessa nota di Ab
. Da questo possiamo vedere che l'accordo Ab C Eb
è un accordo maggiore e che Ab Cb Eb
è minore.
A complicare ulteriormente le cose, l'accordo Eb Cb Ab
è considerato essere lo stesso Ab Cb Eb
, Cb Eb Ab
e Cb Ab Eb
, e così via. Ognuna di queste variazioni è ancora un accordo minore.