Tarea
Escriba un programa para determinar la nota que suena, junto con cuántos centavos fuera de tono, de una cuerda sintonizada a una frecuencia dada y presionada hacia abajo en un punto dado.
En aras de la simplicidad, suponga que la frecuencia del sonido producido y la longitud de la cuerda a la derecha de donde se presiona son inversamente proporcionales.
Nota: esta tarea se ocupa únicamente del tono fundamental, y no con armónicos u otros armónicos.
Entrada
Su programa recibe dos datos:
Una cadena de longitud arbitraria, que representa la cadena en cuestión. Esta cadena se marcará con una X donde la cadena se mantendrá presionada.
[-----] 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)
Suponga que la nota suena usando la parte de la cadena a la derecha de
X
.- Un número (no necesariamente un número entero), que significa la frecuencia con la que se afina la cadena. La precisión de este número será como máximo cuatro dígitos más allá del decimal.
Se puede suponer que las frecuencias pasadas se ubicarán entre 10 Hz
y 40000 Hz
.
La entrada se puede pasar en un formato de su elección. Especifique cómo se acepta la entrada en su programa en su respuesta.
Salida
Su programa debe emitir tanto la nota más cercana * en el sistema de afinación de temperamento igual de doce tonos como el número de centavos de distancia de la nota más cercana que el sonido denotado por la cuerda sería (redondeado al centavo más cercano).
+n
los centavos se deben usar para denotar n
centavos agudos / por encima de la nota, y -n
centavos para los planos / debajo de la nota.
La nota debe salir en notación científica de tono. Suponga que A4 está sintonizado 440Hz
. Use by # para notas planas / agudas. Nota: Se puede usar bien filoso o plano. Para la nota al 466.16Hz
, ya sea A#
o Bb
puede ser emitida por la nota.
El formato de salida depende de usted, siempre que la salida contenga solo las dos piezas de información previamente especificadas (es decir, no se permite imprimir todas las salidas posibles).
* la nota más cercana se refiere a la nota más cercana al sonido denotado por la entrada, medida en el número de centavos (por lo tanto, la nota que está dentro 50 cents
del sonido). Si el sonido está 50 cents
alejado de dos notas diferentes (después del redondeo), se puede emitir cualquiera de las dos notas.
Ejemplos
Su programa debería funcionar para todos los casos, no solo para los siguientes ejemplos.
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--]
* Ya sea afilado o plano podría haber salido.
Enlaces potencialmente útiles
- Notas y frecuencias
- Página de Wikipedia sobre notación de tono científico
- Página de Wikipedia sobre centavos
Este es el código de golf, por lo que gana la respuesta más corta.
[-X--]
, la cadena se divide en 4 lugares (y, por lo tanto, en 5 partes), y se presiona en la segunda de estas divisiones. Por lo tanto, se presiona en 2/5
, y la longitud utilizada es 3/5
.
-
básicamente representa la posición de las divisiones, ¡gracias por explicarlo!
[--X--]
la cadena se presiona en el medio de la división dondex
se coloca, mientras que el último[-X--]
estaría en 3/8 (no 2/5) cuando se sigue esta lógica. ¿O entiendo algo mal?