L'anno è il 930 e la Chiesa Gregoriana sta avendo un problema. Hanno migliaia di pagine di canti musicali, ma il problema è che tutti gli spartiti sono stati semplicemente gettati su una pila invece di avere un vero sistema organizzativo:
Immagine dell'utente gamerprinter alla Cartographers 'Guild .
La Chiesa ha bisogno di organizzare tutti gli spartiti, quindi hanno assunto un ingegnere informatico medievale per scrivere un programma per organizzarlo per loro. Sei l'ingegnere del software che è stato assunto. Tuttavia, il processo di compilazione in epoca medievale prevede che il programma venga scritto su carta da una squadra di lenti scribi biblici. Per ridurre il tempo impiegato dal team di scribi per compilare il codice, è necessario rendere il programma il più piccolo possibile.
La Chiesa vuole che la musica del canto sia organizzata in base alla scala musicale in cui sono scritti. Tutta la musica del canto della Chiesa è scritta in scala dorica . Date le note di un certo brano musicale, il vostro programma produrrà la scala dorica in cui si trova. Qui, spiegherò esattamente cos'è una scala dorica. Se lo sai già, puoi saltare questa sezione.
Vi sono 12 note possibili in qualsiasi melodia. Eccoli in ordine:
C C# D D# E F F# G G# A A# B
Un semitono (rappresentato usando a S
) sta incrementando di un passo verso destra, avvolgendosi (quindi un semitono su da B tornerebbe a C). Un tono (rappresentato usando a T
) è di due semitoni. Ad esempio, un semitono su da F # sarebbe G. Un tono da F # sarebbe G #.
Per creare una scala dorica, partiamo da qualsiasi nota nell'elenco, quindi ci spostiamo verso l'alto nel seguente schema, elencando le note che incontriamo:
T, S, T, T, T, S
Un esempio. Comincio da A. Le note della mia scala dorica diventano:
A
B (up a tone)
C (up a semitone)
D (up a tone)
E (up a tone)
F# (up a tone)
G (up a semitone)
La scala ha le note di A, B, C, D, E, F #, e G. Poiché ho iniziato da A, chiameremo questa la scala Dorian in A . Esistono quindi 12 diverse scale doriche, ognuna delle quali prende il nome dalla nota da cui è partita. Ognuno di essi utilizza lo stesso modello di toni e semitoni, a partire da una posizione diversa. Se la mia spiegazione non è coerente, puoi anche consultare Wikipedia .
L'input del programma può essere dato da qualsiasi cosa sia appropriata per il tuo programma (es. STDIN, argomento della riga di comando, raw_input()
). Potrebbe non essere preinizializzato in una variabile. L'input sarà un elenco di note separate da virgola, che rappresentano la melodia del brano. Potrebbero esserci note ripetute. Ci saranno sempre abbastanza note diverse nell'input per essere in grado di dedurre in modo decisivo la scala del pezzo. Un esempio di input:
B,B,D,E,D,B,A,G#,A,G#,E,D,F#,E,F#,E,F#,G#,A
L'output del programma dovrebbe essere la stringa Dorian scale in X
, dove X è la nota iniziale della scala. L'output dell'input di esempio:
Dorian scale in B
Confrontando questo con la scala dorica in B ( B C# D E F# G# A
) vediamo che tutte le note della melodia sono all'interno di questa scala. La nota C # non è utilizzata in questo caso. Tuttavia, ci sono note sufficienti per identificare senza ambiguità B Dorian come chiave corretta. Nessun'altra scala dorica si adatta, perché qualunque altra scala proviamo, c'è sempre almeno una nota della melodia che non appartiene alla scala.
Questo è il codice golf, quindi vince la voce con il minor numero di caratteri. Chiedi nei commenti se hai domande.