Na teoria musical, um intervalo é a diferença entre dois arremessos. Cada afinação é definida pelo número de meios-passos (a diferença entre C e C #) ou etapas inteiras (a diferença entre C e D). Um passo inteiro é igual a dois meios-passos. Aqui está uma lista de todos os intervalos padrão e o número de meias etapas que eles representam:
0 Perfect Unison
2 Major Second
4 Major Third
5 Perfect Fourth
7 Perfect Fifth
9 Major Sixth
11 Major Seventh
12 Perfect Octave
Existem 3 variações nos intervalos padrão, menor , diminuído e aumentado .
Um intervalo menor é um meio passo abaixo do intervalo principal, mas não é um intervalo perfeito. Então você tem um segundo menor (1), um terço menor (3), um sexto menor (8) e um sétimo menor (10). Não existe quarto menor, quinto menor, uníssono menor ou oitava menor, pois todos esses intervalos são perfeitos.
Um intervalo diminuído é meio passo mais baixo que um intervalo menor ou perfeito. Há segundo diminuído (0), terceiro diminuído (2), quarto diminuído (4), quinto diminuído (6), sexto diminuído (7), diminuto sétimo (9) e oitava diminuída (11).
Um intervalo aumentado é um meio passo mais alto que um intervalo maior ou perfeito. Aumentamos o uníssono (1), aumentamos o segundo (3), aumentamos o terceiro (5), aumentamos o quarto (6), aumentamos o quinto, (8), aumentamos o sexto (10) e aumentamos o sétimo (12).
O desafio:
Você deve escrever um programa ou função que execute várias etapas ou etapas inteiras e, em seguida, imprima uma das descrições válidas em inglês desse intervalo. Não importa qual descrição você escolher, desde que corresponda exatamente à tabela de E / S. Você pode considerar isso como uma sequência
"5w" == 5 whole steps
"3h" == 3 half steps
ou como um número e uma string / caractere.
5, "w" == 5 whole steps
3, "h" == 3 half steps.
Você pode assumir que todas as entradas estarão entre 0 e 12 meias-etapas.
Tabela IO
Aqui está uma lista completa, mapeando o número de meias etapas para todas as saídas aceitáveis.
0 Perfect unison, Diminished second
1 Minor second, Augmented unison
2 Major second, Diminished third
3 Minor third, Augmented second
4 Major third, Diminished fourth
5 Perfect fourth, Augmented third
6 Diminished fifth, Augmented fourth
7 Perfect fifth, Diminished sixth
8 Minor sixth, Augmented fifth
9 Major sixth, Diminished seventh
10 Minor seventh, Augmented sixth
11 Major seventh, Diminished octave
12 Perfect octave, Augmented seventh
Aqui está uma amostra de E / S:
5w Minor Seventh
5h Augmented Third
12h Perfect Octave
12w UNDEFINED
1w Diminished third
2h Major Second
Respostas:
Ruby, Rev. B 138 bytes
5 bytes salvos por não repetir
Augmented/Diminished
. 1 byte salvo pelo uso de?h
.Ruby, Rev A 144 bytes
A idéia é minimizar o número de intervalos básicos (sétimo quinto terço e uníssono) e aproveitar o fato de que sétimos e quintos têm uma relação análoga à que existe entre terços e uniões.
Existem quatro tipos de sétimo / terceiro e três tipos de quinto / uníssono, portanto a variável de índice
i
é definida como 12 menos o número de meias etapas, para que o primeiro termo da expressãoi%7/4 + i/7*2
selecione corretamente o tipo de intervalo básico.ungolfed no programa de teste
resultado
Entradas de comportamento indefinidas: A função fornece a resposta correta
diminished union
para -1 halfsteps, mas falha para entradas acima de 12. Por exemplo, ela produzperfect unison
14 half steps, pois o algoritmo é baseado em um ciclo de 14 em vez de 12.fonte
Python 2, 149 bytes
Primeiro, etapas inteiras são convertidas em meias etapas.
Então,
Diminished
vsAugmented
é impresso. Eles alternam para adjacentes,n
exceto isso,n=5
en=6
dão o mesmo, o que é obtido primeiro colocando-os em um módulo de limite um número ímpar.Finalmente, a distância é impressa, calculada através de uma tabela de pesquisa de três bits. Isso é mais curto do que fazer
int('6746543230210'[n])
.fonte
Python 2.7, 155 bytes
fonte
Retina, 153 bytes
O número da entrada é primeiro convertido em unário, depois dobrado se seguido por
w
e todas as letras são removidas, deixando apenas o número unário. Esse número é convertido novamente em decimal. Finalmente, algumas pesquisas e substituições são aplicadas para construir a saída final.Exemplo é executado:
Experimente online!
fonte
Vitsy , 166 bytes
Bem, isso definitivamente pode ser ainda mais jogado.
Isso funciona definindo a quantidade mínima de itens possível e, em seguida, chamando esses itens através da sintaxe do método.
Experimente Online!
fonte
Javascript 189 bytes
fonte
Java,
225224 bytesTem que haver uma maneira melhor de empacotar essas strings, mas eu não tenho nenhuma idéia.
Recuado:
fonte
if(s=='w')i*=2;
pori*=s=='w'?2:1;