Relacionado: Música: ¿qué hay en este acorde? , Notas a la tablatura , ¿ Generando tablaturas para guitarra? , Traducir pares de números a notas de guitarra
Dada una digitación de guitarra, emite el acorde que representa. Puede usar la entrada y salida estándar, o escribir una función que devuelva una cadena.
Las digitaciones de entrada se clasificarán como uno de los siguientes acordes, que se expresarán de la siguiente manera (si la nota raíz fuera C):
- tríada mayor:
C
- tríada menor:
Cm
- (dominante) séptimo:
C7
- séptimo menor:
Cm7
El acorde puede estar invertido, por lo que no puede confiar en que la nota más baja sea la raíz. Tampoco puedes confiar en que esto sea una digitación fácil o común en el mundo real. En términos más generales, la salida de su programa debe ignorar las octavas de los tonos y tratar todos los tonos que corresponden a la misma nota musical (es decir, A
) como iguales.
Este es el código de golf , por lo que gana el código más corto en bytes.
Formato de entrada
La entrada es una serie de 6 valores que indican, para cada cuerda de una guitarra de 6 cuerdas en afinación estándar (EADGBE), en qué traste se tocará esa cuerda. También podría indicar que la cadena no se reproduce en absoluto. El traste "zeroth" también se conoce como la posición abierta, y los números de traste cuentan desde allí. Suponga que la guitarra tiene 21 posiciones de traste, de modo que la posición más alta de traste es el número 20.
Por ejemplo, la entrada X 3 2 0 1 0
significa colocar los dedos en las siguientes posiciones en la parte superior del cuello de la guitarra:
(6th) |---|---|---|---|---
|-X-|---|---|---|---
|---|---|---|---|---
|---|-X-|---|---|---
|---|---|-X-|---|---
(1st) |---|---|---|---|---
y rasgueando las cuerdas segunda a sexta. Corresponde a esta pestaña ASCII :
e |-0-|
B |-1-|
G |-0-|
D |-2-|
A |-3-|
E |---|
Tiene cierta flexibilidad para elegir el tipo de entrada que desea: cada posición de traste se puede expresar como una cadena o un número. Las cuerdas de guitarra que no se tocan se indican comúnmente con un X
, pero puede elegir un valor centinela diferente si eso lo hace más fácil para usted (como -1
si usa números). La serie de 6 posiciones de traste se puede ingresar como cualquier lista, matriz o tipo de secuencia, una sola cadena separada por espacios o como entrada estándar, una vez más, usted elige.
Puede confiar en la entrada correspondiente a uno de los 4 tipos de acordes mencionados anteriormente.
Explica en tu publicación qué forma de entrada toma tu solución.
Formato de salida
Debe devolver o imprimir en la salida estándar una cadena que describa el acorde para el que es digitación. Esta cadena se compone de dos partes concatenadas juntas. La capitalización importa. Se permite el espacio en blanco al final.
La primera parte indica el nota fundamental , uno de A
, A#
/ Bb
, B
, C
, C#
/ Db
, D
, D#
/ Eb
, E
, F
, F#
/ Gb
, G
o G#
/ Ab
. (Estoy usando en #
lugar de ♯
, y en b
lugar de ♭
, para evitar requerir Unicode.) Las notas de raíz que se pueden expresar sin un agudo o plano deben expresarse sin ellas (nunca emitir B#
,Fb
o Dbb
); los que no pueden expresarse con un solo símbolo agudo o plano (es decir, uno C#
o Db
, pero nunca B##
). En otras palabras, debe minimizar el número de accidentes (objetos punzantes o planos) en el nombre de la nota.
La segunda parte indica el tipo de acorde, ya sea vacío para una tríada mayor, m
para una tríada menor, 7
para la séptima dominante o m7
para la séptima menor. Entonces, un G mayor se emite simplemente como G
, mientras que un séptimo menor D♯ se puede generar como D#m7
o Ebm7
. Se pueden encontrar más ejemplos en los casos de prueba al final.
Teoría y sugerencias
Notas musicales
La escala cromática tiene 12 tonos por octava. Cuando se ajusta a un temperamento igual, cada uno de estos tonos está igualmente distante de sus vecinos 1 . Los tonos que están separados por 12 semitonos (una octava) se consideran la misma nota musical. Esto significa que podemos tratar notas como números enteros módulo 12, de 0 a 11. Siete de ellos reciben nombres de letras 2 de A a G. Esto no es suficiente para nombrar los 12 tonos, pero al agregar correcciones accidentales que: agregar un ♯ ( sostenido) a una nota lo hace un semitono más alto, y agregar un ♭ (plano) lo hace un semitono más bajo.
Acordes
Un acorde son 2 o más notas tocadas juntas. El tipo de acorde depende de las relaciones entre las notas, que pueden determinarse por las distancias entre ellas. Un acorde tiene una nota raíz, como se mencionó anteriormente. Trataremos la nota raíz como 0 en estos ejemplos, pero esto es arbitrario, y todo lo que importa en este desafío es la distancia entre notas en módulo aritmético. Siempre habrá un tipo de acorde único para la respuesta, ya sea una tríada o un séptimo acorde . La nota raíz no siempre será el tono de frecuencia más baja; elija la nota raíz de modo que pueda describir el acorde como uno de los cuatro tipos de acordes siguientes:
- Una tríada importante es un acorde con las notas.
0 4 7
. - Una tríada menor es un acorde con las notas.
0 3 7
. - Un séptimo acorde dominante (o mayor / menor) tiene las notas
0 4 7 10
. - Un séptimo acorde menor (o menor / menor) tiene las notas
0 3 7 10
. 3
Afinación de guitarra
La afinación estándar en una guitarra de 6 cuerdas comienza con E en la cuerda más baja, y luego toca notas a intervalos de 5, 5, 5, 4, luego 5 semitonos subiendo las cuerdas. Tomando la E más baja como 0, esto significa que rasguear todas las cuerdas de la guitarra le da tonos numerados 0 5 10 15 19 24
, que es equivalente al módulo 12 0 5 10 3 7 0
, o las notas E A D G B E
.
Ejemplos trabajados
Si su entrada es 0 2 2 0 0 0
, esto corresponde a las notas E B E G B E
, por lo que solo E, B y G. Estas forman el acorde Em
, que se puede ver al numerarlas con la raíz como E, dándonos 0 3 7
. (El resultado sería el mismo para X 2 X 0 X 0
, o12 14 14 12 12 12
.)
Si su entrada es 4 4 6 4 6 4
, numerarlos con una raíz de C♯ da7 0 7 10 4 7
, o 0 4 7 10
, entonces la respuesta es C#7
(o Db7
). Si fuera así 4 4 6 4 5 4
, la numeración daría 7 0 7 10 3 7
, o 0 3 7 10
, que es C#m7
(o Dbm7
).
Casos de prueba
X 3 2 0 1 0 ---> C
0 2 2 0 0 0 ---> Em
X 2 X 0 X 0 ---> Em
4 4 6 4 6 4 ---> C#7 (or Db7)
4 4 6 4 5 4 ---> C#m7 (or Dbm7)
0 2 2 1 0 0 ---> E
0 0 2 2 2 0 ---> A
X X 4 3 2 2 ---> F# (or Gb)
3 2 0 0 0 1 ---> G7
X X 0 2 1 1 ---> Dm7
3 3 5 5 5 3 ---> C
4 6 6 5 4 4 ---> G# (or Ab)
2 2 4 4 4 5 ---> B7
0 7 5 5 5 5 ---> Am7
7 6 4 4 X X ---> B
8 6 1 X 1 3 ---> Cm
8 8 10 10 9 8 --> Fm
0 19 5 16 8 7 --> Em
6 20 0 3 11 6 --> A# (or Bb)
X 14 9 1 16 X --> G#m (or Abm)
12 14 14 12 12 12 --> Em
15 14 12 12 12 15 --> G
20 X 20 20 20 20 --> Cm7
X 13 18 10 11 10 --> A#7 (or Bb7)
1 por los logaritmos de sus frecuencias
2 o, en solfeo , nombres como do, re, mi . En este desafío, usa los nombres de las letras.
3 Esto también podría llamarse un acorde de sexto mayor, con una elección diferente de nota raíz. En este desafío, llámalo por su séptimo nombre menor.