El año es 930, y la Iglesia Gregoriana está teniendo un problema. Tienen miles de páginas de música de canto, pero el problema es que todas las partituras simplemente se arrojaron a una pila en lugar de tener un sistema de organización real:
Imagen del usuario gamerprinter en el Gremio de Cartógrafos .
La Iglesia necesita organizar todas las partituras, por lo que han contratado a un ingeniero de software medieval para escribir un programa para organizarlo para ellos. Usted es el ingeniero de software que ha sido contratado. Sin embargo, el proceso de compilación en la época medieval implica que el programa está escrito en papel por un equipo de escribas bíblicos lentos. Para disminuir el tiempo que le toma al equipo de escribanos compilar su código, debe hacer que el programa sea lo más pequeño posible.
La Iglesia quiere que la música del canto se organice en función de la escala musical en la que están escritos. Toda la música del canto de la Iglesia está escrita en escalas dorias . Dadas las notas de cierta pieza musical, su programa generará la escala Dorian en la que se encuentra. Aquí, explicaré exactamente qué es una escala Dorian. Si ya lo sabe, puede omitir esta sección.
Hay 12 notas posibles en cualquier melodía. Aquí están en orden:
C C# D D# E F F# G G# A A# B
Un semitono (representado mediante a S
) está incrementando un paso hacia la derecha, envolviéndose (de modo que un semitono desde B volvería a C). Un tono (representado con a T
) son dos semitonos. Por ejemplo, un semitono desde F # sería G. Un tono desde F # sería G #.
Para crear una escala Dorian, comenzamos desde cualquier nota en la lista, y luego avanzamos en el siguiente patrón, enumerando las notas que encontramos:
T, S, T, T, T, S
Un ejemplo. Comienzo de A. Las notas de mi escala Dorian se convierten en:
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 escala tiene las notas A, B, C, D, E, F #, y G. porque empecé desde A, vamos a llamar a esta la escala de Dorian en A . Por lo tanto, hay 12 escalas dorias diferentes, cada una de las cuales lleva el nombre de la nota desde la que comenzaron. Cada uno de ellos usa el mismo patrón de tonos y semitonos, comenzando desde una posición diferente. Si mi explicación no es coherente, también puede consultar Wikipedia .
La entrada del programa se puede dar desde lo que sea apropiado para su programa (por ejemplo, STDIN, argumento de línea de comando, raw_input()
). Puede no estar preinicializado en una variable. La entrada será una lista de notas separadas por comas, que representa la melodía de la pieza. Puede haber notas repetidas. Siempre habrá suficientes notas diferentes en la entrada para poder deducir decisivamente la escala de la pieza. Un ejemplo de entrada:
B,B,D,E,D,B,A,G#,A,G#,E,D,F#,E,F#,E,F#,G#,A
La salida del programa debe ser la cadena Dorian scale in X
, donde X es la nota inicial de la escala. La salida de la entrada de ejemplo:
Dorian scale in B
Comparando esto con la escala Dorian en B ( B C# D E F# G# A
), vemos que todas las notas de la melodía están dentro de esta escala. La nota C # no se usa en este caso. Sin embargo, hay suficientes notas para identificar inequívocamente a B Dorian como la clave correcta. Ninguna otra escala Dorian encaja, porque cualquiera que sea la otra escala que intentemos, siempre hay al menos una nota de la melodía que no pertenece a la escala.
Este es el código de golf, por lo que gana la entrada con el menor número de caracteres. Pregunte en los comentarios si tiene preguntas.