Questo è il contrario di Music: cosa c'è in questo accordo? , ovvero stampare le note in un determinato accordo. Questa volta l'input è un elenco di note in un accordo e il tuo compito è quello di produrre quale accordo è.
Il tuo programma dovrebbe supportare i seguenti accordi triadici. Esempi sono dati con la radice C. Gli accordi con altre radici sono gli stessi accordi con tutte le note ruotate in modo che C diventerà quella nota di radice, ad esempio Dmaj è composta da D, F # e A.
C C#D D#E F F#G G#A A#B
Db Eb Gb Ab Bb
Cmaj C E G
Cm C D# G
Caug C E G#
Cdim C D# F#
Csus4 C F G
Csus2 C D G
Nota che Caug è uguale a Eaug e G # ago e Csus4 è lo stesso di Fsus2. Puoi produrne uno ma c'è un bonus se li produci tutti.
E i settimi accordi per il bonus sono elencati nella seguente tabella:
C C#D D#E F F#G G#A A#B
Db Eb Gb Ab Bb
C7 C E G A#
Cm7 C D# G A#
Cmmaj7 C D# G B
Cmaj7 C E G B
Caug7 C E G# A#
Cdim7 C D# F# A
Regole
- È possibile scrivere un programma completo o una funzione.
- L'input è un elenco di note, separate da uno spazio o un altro carattere conveniente. Può anche essere una matrice di stringhe (se accetta input dall'argomento della funzione) o la rappresentazione di stringhe di tale matrice.
- L'input non deve essere nell'ordine specifico.
- Potrebbero essere presenti note duplicate nell'input. Devono essere trattati nello stesso modo in cui ne esiste solo uno.
- L'output è il nome dell'accordo. Nel caso in cui vengano generati più nomi, si applica la stessa regola per l'input.
- Se l'input non è un accordo supportato, è necessario stampare le note così come sono. Il tuo programma può supportare anche altri accordi non elencati nelle tabelle sopra (che è valido ma non ha bonus).
- Puoi usare altre notazioni elencate nell'articolo di Wikipedia . Ma se scegli
C
per do maggiore, dovresti aggiungere in entrambi i casi un prefisso leggibile per distinguere un accordo con una singola nota. - Non è possibile utilizzare le funzioni integrate per questa attività (se presente).
- Questo è code-golf. Vince il codice più breve in byte.
Esempi
- Ingresso:
C D# G
Uscita:Cm
. - Ingresso:
C Eb G
Uscita:Cm
. - Ingresso:
C Eb F#
Uscita:Cdim
. - Ingresso:
F A C#
Uscita:Faug
,Aaug
,C#aug
,Dbaug
oFaug Aaug C#aug
,Faug Aaug Dbaug
in qualsiasi ordine. - Ingresso:
F D F F F F A A F
Uscita:Dm
. - Ingresso:
C D
Uscita:C D
.
bonus
- -30 se li stampa tutti se ci sono più interpretazioni (per aug, sus4 / sus2 e dim7).
- -70 se supporta anche gli accordi del settimo.
- -200 se accetta input MIDI e stampa tutti gli accordi che ha ricevuto. Nota che le note non devono iniziare o finire contemporaneamente. Decidi tu cosa succede negli stati intermedi (purché non si blocchi o smetta di funzionare). Puoi presumere che non ci siano note nei canali di percussione (o c'è solo un canale se è conveniente). Si consiglia di fornire anche una versione testuale (o array) per i test, soprattutto se dipende dalla piattaforma.
B#
, Cb
e così via
Csus4 is the same as Gsus2
. Penso che intendi Csus2 is the same as Gsus4
vero?