Zadanie
Napisz program, który określi, że zabrzmiała nuta, a także ile centów nie zostało dostrojone, struny dostrojonej do określonej częstotliwości i wciśniętej w danym punkcie.
Dla uproszczenia załóżmy, że częstotliwość wytwarzanego dźwięku i długość struny po prawej stronie od miejsca jej wciśnięcia są odwrotnie proporcjonalne.
Uwaga: to zadanie dotyczy wyłącznie tonu podstawowego, a nie podtonów / innych harmonicznych.
Wejście
Twój program otrzymuje dwie części danych:
Ciąg o dowolnej długości, reprezentujący dany ciąg. Łańcuch zostanie oznaczony znakiem X, w którym łańcuch będzie przytrzymywany.
[-----] 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)Załóżmy, że nuta brzmi przy użyciu części struny po prawej stronie
X.- Liczba (niekoniecznie liczba całkowita), oznaczająca częstotliwość, z jaką strojony jest ciąg. Dokładność tej liczby będzie wynosić co najwyżej cztery cyfry po przecinku.
Można założyć, że przekazywane częstotliwości będą znajdować się pomiędzy 10 Hzi 40000 Hz.
Dane wejściowe mogą być przekazywane w wybranym formacie. W odpowiedzi proszę określić, w jaki sposób dane wejściowe są akceptowane w twoim programie.
Wynik
Twój program musi wyprowadzać zarówno najbliższą nutę * w dwunastotonowym systemie strojenia o równym temperamencie, jak i liczbę centów od najbliższej nuty, jaką byłby dźwięk oznaczony przez strunę (zaokrąglony do najbliższego centa).
+ncentów należy używać do oznaczania ncentów ostrych / powyżej nuty, a -ncentów płaskich / poniżej nuty.
Notatka powinna być wyprowadzona w naukowym zapisie wysokości tonu. Załóżmy, że A4 jest dostrojony 440Hz. Użyj b i # dla płaskich / ostrych nut. Uwaga: Można użyć ostre lub płaskie. W przypadku nuty o 466.16Hzalbo A#albo Bbmoże być wyprowadzany dla nuty.
Format wydruku zależy od Ciebie, o ile wydruk zawiera tylko dwa uprzednio określone informacje (tzn. Drukowanie każdego możliwego wydruku jest niedozwolone).
* najbliższa nuta oznacza nutę najbliższą dźwiękowi oznaczonemu przez wejście, mierzoną liczbą centów (a więc nutą, która znajduje się w 50 centsdźwięku). Jeśli dźwięk jest 50 centsoddalony od dwóch różnych nut (po zaokrągleniu), może zostać wyprowadzona jedna z dwóch nut.
Przykłady
Twój program powinien działać we wszystkich przypadkach, a nie tylko w poniższych przykładach.
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--]
* Można było wyprowadzić ostry lub płaski.
Potencjalnie pomocne linki
- Uwagi i częstotliwości
- Strona Wikipedii na temat naukowej notacji podziałowej
- Strona Wikipedii na temat centów
To jest golf-golf tak najkrótsza odpowiedź wygrywa.
[-X--]ciąg jest podzielony w 4 miejscach (a zatem na 5 części) i wciśnięty w drugim z tych podziałów. W ten sposób jest wciśnięty 2/5, a zastosowana długość to 3/5.
-zasadniczo przedstawia pozycję dywizji, dziękuję za wyjaśnienie!

[--X--]sznurek jest wciśnięty w środku podziału, w którymxjest umieszczony, podczas gdy ostatni[-X--]byłby na 3/8 (nie 2/5), jeśli podążałby za tą logiką. Czy rozumiem coś złego?