Tarefa
Escreva um programa para determinar a nota tocada, além de quantos centavos desafinados, de uma corda afinada para uma determinada frequência e pressionada em um determinado ponto.
Por uma questão de simplicidade, suponha que a frequência do som produzido e o comprimento da corda à direita de onde ele é pressionado sejam inversamente proporcionais.
Nota: esta tarefa lida apenas com o tom fundamental, e não com sobretons / outros harmônicos.
Entrada
Seu programa recebe dois dados:
Uma sequência de comprimento arbitrário, representando a sequência em questão. Essa sequência será marcada com um X onde a sequência deve ser mantida pressionada.
[-----] is a string divided in six sections (five divisions). [--X--] is a string pressed at the exact center of the string. [X----] is a string pressed at 1/6 the length of the string. (Length used is 5/6) [-X--] is a string pressed at 2/5 of the length of the string. (Length used is 3/5)
Suponha que a nota seja tocada usando a parte da corda à direita da
X
.- Um número (não necessariamente um número inteiro), significando a frequência na qual a sequência é sintonizada. A precisão desse número terá no máximo quatro dígitos após o decimal.
Pode-se supor que as frequências passadas estarão entre 10 Hz
e 40000 Hz
.
A entrada pode ser transmitida no formato de sua escolha. Especifique como a entrada é aceita em seu programa em sua resposta.
Resultado
Seu programa deve emitir a nota mais próxima * no sistema de ajuste de temperamento com doze tons e o número de centavos da nota mais próxima que o som indicado pela corda seria (arredondado para o centavo mais próximo).
+n
centavos devem ser usados para indicar n
centavos afiados / acima da nota e -n
centavos para flat / abaixo da nota.
A nota deve ser impressa em notação científica. Suponha que A4 esteja sintonizado 440Hz
. Use be # para obter notas agudas / nítidas. Nota: Pode ser afiada ou plana. Para a nota em 466.16Hz
, uma A#
ou Bb
pode ser emitida para a nota.
O formato da saída depende de você, desde que a saída contenha apenas as duas informações especificadas anteriormente (por exemplo, imprimir todas as saídas possíveis não é permitido).
* nota mais próxima refere-se à nota mais próxima do som indicado pela entrada, medido no número de centavos (portanto, a nota que está dentro 50 cents
do som). Se o som estiver 50 cents
longe de duas notas diferentes (após o arredondamento), qualquer uma das duas notas poderá ser emitida.
Exemplos
Seu programa deve funcionar para todos os casos, não apenas para os seguintes exemplos.
Output Input Frequency Input String
A4, +0 cents 220 [-----X-----]
A5, +0 cents 220 [--------X--]
D5, -2 cents 440 [--X--------]
B4, -49 cents 440 [X----------]
A#4, +19 cents* 314.1592 [X-]
Eb9, +8 cents* 400 [-----------------------X]
Eb11,+8 cents* 100 [--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------X]
D#1, +49 cents* 10 [--X]
A0, -11 cents 11.7103 [---X--]
* Afiado ou achatado, poderia ter sido produzido.
Links potencialmente úteis
- Notas e frequências
- Página da Wikipedia na Notação científica de afinação
- Página da Wikipedia em centavos
Este é o código-golfe, por isso a resposta mais curta vence.
[-X--]
, a sequência é dividida em 4 lugares (e, portanto, em 5 partes) e pressionada na segunda dessas divisões. Assim, é pressionado em 2/5
e o comprimento usado é 3/5
.
-
representa basicamente a posição das divisões, obrigado por explicar!
[--X--]
a corda é pressionada no meio da divisão em que o localx
é colocado, enquanto a última[-X--]
seria em 3/8 (não em 2/5) ao seguir essa lógica. Ou entendo algo errado?