Este es el reverso de la música: ¿qué hay en este acorde? , que es imprimir las notas en un acorde dado. Esta vez, la entrada es una lista de notas en un acorde, y su tarea es dar salida a ese acorde.
Su programa debe admitir los siguientes acordes triádicos. Se dan ejemplos con la raíz C. Los acordes con otras raíces son los mismos acordes con todas las notas giradas para que C se convierta en esa nota raíz, por ejemplo, Dmaj consiste en D, F # y 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
Tenga en cuenta que Caug es lo mismo que Eaug y G # aug, y Csus4 es lo mismo que Fsus2. Puede generar cualquiera de los dos, pero hay una bonificación si los genera a todos.
Y los séptimos acordes para la bonificación se enumeran en la siguiente tabla:
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
Reglas
- Puede escribir un programa completo o una función.
- La entrada es una lista de notas, separadas por un espacio u otro carácter conveniente. También puede ser una matriz de cadenas (si toma información del argumento de la función) o la representación de cadena de dicha matriz.
- La entrada no tiene que estar en un orden específico.
- Puede haber notas duplicadas en la entrada. Deben ser tratados de la misma manera, ya que solo hay uno de ellos.
- La salida es el nombre del acorde. En caso de que genere varios nombres, se aplica la misma regla para la entrada.
- Si la entrada no es un acorde compatible, debe imprimir las notas tal cual. Su programa también puede admitir otros acordes que no figuran en las tablas anteriores (que es válido pero no tiene bonificación).
- Puede usar otras anotaciones enumeradas en el artículo de Wikipedia . Pero si elige
C
para Do mayor, debe agregar un prefijo legible para humanos en cualquier caso para distinguir un acorde con una sola nota. - No puede usar funciones integradas para esta tarea (si hay alguna).
- Este es el código de golf. El código más corto en bytes gana.
Ejemplos
- Entrada:
C D# G
Salida:Cm
. - Entrada:
C Eb G
Salida:Cm
. - Entrada:
C Eb F#
Salida:Cdim
. - Entrada:
F A C#
Salida:Faug
,Aaug
,C#aug
,Dbaug
oFaug Aaug C#aug
,Faug Aaug Dbaug
en cualquier orden. - Entrada:
F D F F F F A A F
Salida:Dm
. - Entrada:
C D
Salida:C D
.
Bonos
- -30 si los imprime a todos si hay más de una interpretación (para aug, sus4 / sus2 y dim7).
- -70 si también admite séptimos acordes.
- -200 si acepta entrada MIDI e imprime cada acorde que ha recibido. Tenga en cuenta que las notas no tienen que comenzar o finalizar al mismo tiempo. Usted decide qué sucede en los estados intermedios (siempre que no se bloquee o deje de funcionar). Puede suponer que no hay notas en los canales de percusión (o solo hay un canal si es conveniente). Se recomienda también proporcionar una versión de texto (o matriz) para la prueba, especialmente si depende de la plataforma.
B#
,Cb
etc.Csus4 is the same as Gsus2
. Creo que quieres decir,Csus2 is the same as Gsus4
¿no?Respuestas:
Pyth 190 carácter - 30 - 70 = 90
No muy contento con eso. Utiliza acordes codificados.
Uso:
Pruébelo aquí: Pyth Compiler / Executor . Deshabilite el modo de depuración y úselo
"C D# G"
como entrada.Explicación:
Primero algo de preparación:
Luego, una función que convierte notas en enteros
Luego, para cada nota, cambie el coord y búsquelo en una tabla
fuente
Perl 5: 183-100 = 83
Editar: logré cortar algunos caracteres adicionales, así que también modifiqué los nombres de acordes como en la solución Python, por lo que puedo fingir por un momento que estoy liderando.
Ejemplo:
fuente
Python 2, 335 bytes - 30 - 70 = 235
Primer intento en un golf un poco más largo, por lo que me pueden faltar algunos trucos obvios.
Comentarios:
Salida de muestra
fuente