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 Hze 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).
+ncentavos devem ser usados para indicar ncentavos afiados / acima da nota e -ncentavos 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 Bbpode 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 centsdo som). Se o som estiver 50 centslonge 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/5e 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?