задача
Напишите программу, чтобы определить, звучит ли нота, а также сколько центов расстроено, строки, настроенной на заданную частоту и нажатой в данной точке.
Для простоты предположим, что частота создаваемого звука и длина струны справа от места, где она нажата, обратно пропорциональны.
Примечание: эта задача имеет дело только с основным тоном, а не с обертонами / другими гармониками.
вход
Ваша программа получает две части данных:
Строка произвольной длины, представляющая рассматриваемую строку. Эта строка будет помечена знаком X, где она должна удерживаться.
[-----] 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)Предположим, что нота звучит с использованием части строки справа от
X.- Число (не обязательно целое число), обозначающее частоту настройки строки. Точность этого числа будет не более четырех цифр после запятой.
Можно предположить, что пройденные частоты будут лежать между 10 Hzи 40000 Hz.
Ввод может быть передан в формате по вашему выбору. Пожалуйста, укажите, как вход принят в вашу программу в вашем ответе.
Вывод
Ваша программа должна выводить как самую близкую ноту * в системе настройки равного темперамента из двенадцати тонов, так и количество центов от ближайшей ноты, которой будет обозначен звук, обозначенный строкой (округленный до ближайшего цента).
+nценты следует использовать для обозначения nцентов, острых / выше примечания, и -nцентов для плоских / ниже примечания.
Примечание должно быть выведено в примечании научной подачи. Предположим, А4 настроен на 440Hz. Используйте b и # для плоских / острых нот. Примечание: можно использовать либо острый, либо плоский. Для заметки в 466.16Hz, A#или Bbможет быть выведен для заметки.
Формат вывода зависит от вас, если вывод содержит только две ранее указанные части информации (то есть печать каждого возможного вывода не допускается).
* самая близкая нота относится к ноте, наиболее близкой к звуку, обозначаемому входом, измеренному в количестве центов (следовательно, ноте, которая находится внутри 50 centsзвука). Если звук отсутствует 50 centsв двух разных нотах (после округления), то может быть выведена любая из двух нот.
Примеры
Ваша программа должна работать для всех случаев, а не только для следующих примеров.
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--]
* Резкий или плоский может быть выведен.
Потенциально полезные ссылки
Это Код-гольф так самый короткий ответ выигрывает.
[-X--]строка делится на 4 места (и, следовательно, на 5 частей), и нажимается во втором из этих делений. Таким образом, он нажимается на 2/5, а длина используется 3/5.
-основном представляет позицию подразделений, спасибо за объяснение!

[--X--]строка нажимается в середине деления, гдеxнаходится символ, в то время как последний[-X--]будет следовать 3/8 (не 2/5), если следовать этой логике. Или я что-то не так понимаю?