Relacionados: Música: o que há nesse acorde? , Notas para tablatura , geração de abas de guitarra , Traduzir pares de números para notas de guitarra
Dado um toque de guitarra, produza o acorde que ele representa. Você pode usar entrada e saída padrão ou escrever uma função que retorne uma sequência.
Os dedilhados de entrada serão classificados como um dos seguintes acordes, a serem expressos da seguinte forma (se a nota principal for C):
- tríade principal:
C
- tríade menor:
Cm
- (dominante) sétimo:
C7
- sétima menor:
Cm7
O acorde pode estar invertido, portanto você não pode confiar na nota mais baixa como raiz. Você também não pode confiar que este é um dedilhado fácil ou comum no mundo real. De maneira mais geral, a saída do programa deve ignorar as oitavas dos arremessos e tratar todos os arremessos que correspondem à mesma nota musical (ou seja A
) igual.
Isso é código-golfe , então o código mais curto em bytes vence.
Formato de entrada
A entrada é uma série de 6 valores que indicam, para cada corda de um violão de 6 cordas na afinação padrão (EADGBE), na qual a guitarra será tocada. Também pode indicar que a corda não é tocada. O traste "zeroth" também é conhecido como posição aberta, e os números do traste são contados a partir daí. Suponha que o violão tenha 21 posições de traste, de modo que a posição mais alta seja o número 20.
Por exemplo, a entrada X 3 2 0 1 0
significa colocar os dedos nas seguintes posições na parte superior do pescoço do violão:
(6th) |---|---|---|---|---
|-X-|---|---|---|---
|---|---|---|---|---
|---|-X-|---|---|---
|---|---|-X-|---|---
(1st) |---|---|---|---|---
e dedilhando da 2ª à 6ª cordas. Corresponde a esta guia ASCII :
e |-0-|
B |-1-|
G |-0-|
D |-2-|
A |-3-|
E |---|
Você tem alguma flexibilidade na escolha do tipo de entrada que deseja: cada posição do traste pode ser expressa como uma string ou um número. As cordas da guitarra que não são tocadas são comumente indicadas com um X
, mas você pode escolher um valor de sentinela diferente se isso facilitar as coisas para você (como -1
se você estivesse usando números). A série de 6 posições de traste pode ser inserida como qualquer lista, matriz ou tipo de sequência, uma única sequência separada por espaço ou como entrada padrão - mais uma vez, sua escolha.
Você pode confiar na entrada correspondente a um dos quatro tipos de acordes mencionados acima.
Por favor, explique em sua postagem que forma de entrada sua solução leva.
Formato de saída
Você deve retornar ou imprimir na saída padrão uma sequência que descreva o acorde para o qual o dedilhado se destina. Essa sequência é composta por duas partes concatenadas juntas. Problemas de capitalização. Espaço em branco à direita é permitido.
A primeira parte indica a nota raiz , um de A
, A#
/ Bb
, B
, C
, C#
/ Db
, D
, D#
/ Eb
, E
, F
, F#
/ Gb
, G
, ou G#
/ Ab
. (Estou usando #
, em vez de ♯
, e b
em vez de ♭
, para evitar que requer Unicode.) Notas de raiz que podem ser expressos sem um sustenido ou bemol deve ser expressa sem eles (nunca de saída B#
, Fb
ou Dbb
); aqueles que não podem devem ser expressos com um único símbolo pontiagudo ou plano (ou seja , um C#
ou Db
, mas nunca B##
). Em outras palavras, você deve minimizar o número de acidentes (objetos cortantes ou rasos) no nome da nota.
A segunda parte indica o tipo de acorde, vazio para uma tríade maior, m
para uma tríade menor, 7
para a sétima dominante ou m7
para a sétima menor. Portanto, um Sol maior é produzido simplesmente como G
, enquanto um sétimo D menor pode ser produzido como um D#m7
ou outro Ebm7
. Mais exemplos podem ser encontrados nos casos de teste no final.
Teoria e dicas
Notas musicais
A escala cromática tem 12 arremessos por oitava. Quando sintonizados com o mesmo temperamento, cada um desses tons fica igualmente distante dos vizinhos 1 . Os arremessos separados por 12 semitons (uma oitava) são considerados a mesma nota musical. Isso significa que podemos tratar notas como números inteiros módulo 12, de 0 a 11. Sete delas recebem nomes de letras 2 de A a G. Isso não é suficiente para nomear todas as 12 notas, mas adicionar acidentalmente corrige isso: adicionar a ♯ ( nítida) a uma nota o torna um semitom mais alto e a adição de ♭ (plano) o torna um semitom mais baixo.
Acordes
Um acorde é de 2 ou mais notas tocadas juntas. O tipo de acorde depende das relações entre as notas, que podem ser determinadas pelas distâncias entre elas. Um acorde tem uma nota raiz, como mencionado anteriormente. Trataremos a nota raiz como 0 nesses exemplos, mas isso é arbitrário e tudo o que importa neste desafio é a distância entre as notas na aritmética do módulo. Sempre haverá um tipo de acorde exclusivo para a resposta, uma tríade ou um sétimo . A nota principal nem sempre será o tom de menor frequência; escolha a nota raiz para poder descrever o acorde como um dos quatro tipos de acordes a seguir:
- Uma tríade principal é um acorde com as notas
0 4 7
. - Uma tríade menor é um acorde com as notas
0 3 7
. - Um sétimo acorde dominante (ou maior / menor) possui as notas
0 4 7 10
. - Um sétimo acorde menor (ou menor / menor) possui as notas
0 3 7 10
. 3
Afinação de guitarra
A afinação padrão em uma guitarra de 6 cordas começa com E na corda mais baixa e, em seguida, toca notas em intervalos de 5, 5, 5, 4 e 5 semitons subindo as cordas. Tomando o E mais baixo como 0, isso significa tocar todas as cordas do violão, dando-lhe notas numeradas 0 5 10 15 19 24
, às quais o módulo 12 é equivalente 0 5 10 3 7 0
ou as notas E A D G B E
.
Exemplos trabalhados
Se sua entrada é 0 2 2 0 0 0
, isso corresponde às notas E B E G B E
, então apenas E, B e G. Elas formam o acorde Em
, que pode ser visto numerando-as com a raiz como E, fornecendo-nos 0 3 7
. (O resultado seria o mesmo para X 2 X 0 X 0
, ou 12 14 14 12 12 12
.)
Se sua entrada for 4 4 6 4 6 4
, numerá-las com uma raiz de C♯ fornece 7 0 7 10 4 7
, ou 0 4 7 10
, então a resposta é C#7
(ou Db7
). Se fosse 4 4 6 4 5 4
, a numeração daria 7 0 7 10 3 7
, ou 0 3 7 10
, qual é C#m7
(ou Dbm7
).
Casos de teste
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 pelos logaritmos de suas frequências
2 ou, em solfège , nomes como do, re, mi . Nesse desafio, use os nomes das letras.
3 Isso também pode ser chamado de sexto acorde principal, com uma escolha diferente de nota raiz. Neste desafio, chame-o pelo seu sétimo nome menor.