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 Hz
i 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).
+n
centów należy używać do oznaczania n
centów ostrych / powyżej nuty, a -n
centó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.16Hz
albo A#
albo Bb
moż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 cents
dźwięku). Jeśli dźwięk jest 50 cents
oddalony 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órymx
jest 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?