Um diagrama do braço da guitarra fica assim:
0 1 2 3 4 5 6 7 8 9 10 11 12 <- Fret number (0 means it's open)
|-E--F--F#-G--G#-A--A#-B--C--C#-D--D#-E
|-B--C--C#-D--D#-E--F--F#-G--G#-A--A#-B
|-G--G#-A--A#-B--C--C#-D--D#-E--F--F#-G
|-D--D#-E--F--F#-G--G#-A--A#-B--C--C#-D
|-A--A#-B--C--C#-D--D#-E--F--F#-G--G#-A
|-E--F--F#-G--G#-A--A#-B--C--C#-D--D#-E
Como você pode ver, a primeira string (de cima) aberta é um E
. O primeiro traste da primeira corda é um F
. O quarto traste na terceira corda é a B
. Note que a primeira nota é o traste zeroth, não a primeira.
Isso pode ser escrito com números no formato string, fret
. As seqüências são numeradas de 1 a 6, de cima para baixo. Os trastes são numerados de 0 a 12 da esquerda para a direita. O primeiro E
é, portanto 1, 0
. Alguns outros exemplos:
1, 0 --> E
1, 1 --> F
3, 5 --> C
5, 1 --> A#
6, 6 --> A#
Desafio:
Pegue N
pares de números ( s
e f
) e produza uma sucessão de notas delimitada.
- A entrada pode estar em qualquer formato adequado. tuplas, matriz 2D, duas listas separadas, uma lista entrelaçada (corda, traste, corda, traste ...) etc.
- O tom de saída deve ser separado, mas o delimitador é opcional (vírgula, espaço, traço ...). A saída pode estar em maiúsculas ou minúsculas.
s
(para string) estará no intervalo[1, 6]
(você pode optar por indexar i 0)f
(por tras) estará na faixa[0, 12]
Casos de teste e exemplos:
1 4 5 2 1 3 <- String
4 2 6 3 5 1 <- Fret
G# E D# D A G#
6 2 3 1 4 2 3 2 2 2 6 5 2
0 1 2 3 4 5 6 7 8 9 10 11 12
E C A G F# E C# F# G G# D G# B
3 3 3 3 3 3 3 3 3 3 3 3 3 <- String
0 3 5 0 3 6 5 0 3 5 3 0 0 <- Fret
G A# C G A# C# C G A# C A# G G
// The same test case, but different input and output format:
(3,0)(3,3)(3,5)(3,3)(3,6)(3,5)(3,0)(3,3)(3,5)(3,3)(3,0)(3,0)
G,A#,C,G,A#,C#,C,G,A#,C,A#,G,G
Boa sorte e feliz golfe!
Respostas:
05AB1E ,
48474340 bytesUsa a codificação CP-1252 .
Ambas as cordas e os trastes são baseados em 0.
Explicação
Experimente online!
Economizou 7 bytes graças a Adnan
fonte
"AA#BCC#DD#EFF#GG#"•7V3•3BS£
em vez de"A A# B C C# D D# E F F# G G#"#
é alguns bytes mais curto :)."AA#BCC#DD#EFF#GG#"
string:•™ÎÚ,Ülu•žh'#A«‡
(uma vez que letras minúsculas são permitidas: p).JavaScript (ES6),
7970 bytesRequer seqüências baseadas em 1. Editar: salvou 9 bytes calculando diretamente a conversão de string para traste, com base na resposta antiga do @ nimi.
fonte
Mathematica, 62 bytes (não concorrente)
O
{24,19,15,10,5,0}
e oE2
representam os tons de corda aberta das seis cordas da guitarra (por exemplo, a corda superior tem 24 semitons acima da nota E2). Não competir porque não imprime os nomes das notas - toca a sequência das notas! (somente se você tiver o Mathematica, infelizmente) Por exemplo,toca as 4 barras de abertura da Canon de Pachelbel. (que é o máximo que posso da Canon de Pachelbel)
fonte
MATL ,
484745 bytesObrigado a @Emigna pela correção em relação ao formato da entrada.
Guitarra e código de golfe ... Eu tive que responder a esta!
O formato de entrada é: uma matriz de seqüência de caracteres (com base em 1) e, em seguida, uma matriz de trastes (com base em 0).
Experimente online!
Explicação
Alguns recursos de idioma usados nesta resposta:
Código comentado:
fonte
Java, 174
Ungolfed:
fonte
C,
104103 bytesPega números como
string fret
pares em stdin e emite a nota após cada par. Por exemplo:fonte
Ruby, 63 bytes
leva uma matriz de matrizes de 2 elementos, na ordem
[string,fret]
.Explicação
Na afinação padrão, o violão é um dos poucos instrumentos de corda (curvados ou trastes) que possui intervalos inconsistentes entre as cordas. A maioria possui um intervalo consistente de 5 semitons entre todos os pares de cadeias adjacentes (um "quarto") ou um intervalo consistente de 7 semitons entre todos os pares de cadeias adjacentes (um "quinto"). Eles correspondem a taxas de frequência de 3: 4 e 2: 3, respectivamente, e são secundários em importância apenas para a "oitava" com taxa de frequência 1: 2.
A guitarra tem intervalos principalmente de 5 semitons. Se tivesse 5 delas, teria uma diferença de 25 semitons entre a 1ª e a 6ª corda. Em vez disso, o intervalo entre a 2ª e a 3ª corda é reduzido para 4 semitons, dando uma diferença de 24 semitons (2 oitavas), o que é melhor para tocar acordes.
Isso é inconveniente para o programa, por isso começamos alterando a entonação de guitarra indexada em 1 em entonação de 5 cordas e baixo indexada em 0, que possui todos os intervalos de 5 semitons:
Em seguida, adicionamos 2 e ajustamos um baixo fictício de 12 cordas, com entonação das cordas abertas da seguinte maneira, e todos os intervalos são 5 semitons (existem 12 "baixos" de cordas), mas não tenho certeza de que existem muitos com exatamente isso. sintonia.)
Como pode ser visto, todos os objectos cortantes estão agrupados. Esse padrão pode ser repetido ad infinitum. É conhecido como o "ciclo das quintas" e é fundamental para a escala musical Western (com um pouco de ajuste de ajuste do círculo pode ser fechada devido ao fato de que
(3/2)**12
e2**7
são números muito semelhantes.Agora lidamos com o parâmetro fret. Ao contrário de muitas outras respostas aqui, que traduzem o parâmetro de string em um número de trastes, eu traduzo o parâmetro de traste em um número de strings. Na tabela acima, pode-se ver que adicionar 7 ao número da string nos coloca em uma string cujo nome da nota é um semitom maior. (Está em uma oitava completamente diferente, mas isso não importa.) Portanto, adicionamos
i[1]*7
ao número da string e o modulamos 12:Subtraímos isso de 6 para obter um número no intervalo de 6 a -5 e procuramos a letra
BEADGCF
(Ruby permite que índices negativos retornem ao final da matriz.) Sen>=7
precisarmos adicionar um#
símbolo para concluir a saída .Programa de teste
Resultado
fonte
C #, 131 bytes
Insira duas listas separadas, as strings são baseadas em 1.
fonte
Clora , 55 bytes
@T[0,7,2,10,5,0,7]+N%12@T[,A,A#,B,C#,D,D#,E,F,F#,G,G#]!
Explicação
@
modo numérico (leia a entrada como números)T[0,7,2,10,5,0,7]
Transformar entrada usando o array, ex array [Input]+N
Adicione N (próximo valor de entrada) à entrada atual%12
Módulo 12 o valor atual de entrada@
Sinalizar modo numérico desativadoT[,A,A#,B,C#,D,D#,E,F,F#,G,G#]
Traduzir a entrada em uma matriz!
Usar entrada como valor de saídafonte
Java 7
197, 163 bytesUngolfed
fonte
Python 2,
94, 91, 88 bytesProvavelmente existem algumas melhorias óbvias a serem feitas. Entrada é uma lista de pares e as seqüências são indexadas em 0, por exemplo:
fonte
Haskell,
8382 bytesLeva uma lista de strings e uma lista de trastes, ambos indexados em 0. Exemplo de uso:
Da lista infinita de notas que começa com
A#
, solte o número de notas fornecidas pela lista[6,1,9,4,11,6]
no índice da sequência e escolha a nota no índice do traste da lista restante.fonte
(s*7)+(s>2)
- agora estou usando isso na minha resposta.JavaScript (ES6),
8281 bytesEu queria tentar uma resposta totalmente matemática, mas acabou um pouco longa. Talvez haja uma maneira de jogar golfe ...
Snippet de teste
Mostrar snippet de código
fonte
toString(17)
mas lutei para obtê-lo em uma contagem razoável de bytes.PHP, 102 bytes
Insira como matriz múltipla ambos os 0 baseados, por exemplo, '[[2,0], [5,3], [2,12], [3,8], [0,3]]'
Boa alternativa 106 bytes para definir o # com base no mod 7 congruente
fonte