Jest rok 930, a Kościół gregoriański ma problem. Mają tysiące stron śpiewanej muzyki, ale problem polega na tym, że całe nuty zostały po prostu wrzucone na stos, zamiast mieć prawdziwy system organizacji:
Zdjęcie użytkownika gamerprinter z Gildii Kartografów .
Kościół musi uporządkować wszystkie nuty, więc wynajęli średniowiecznego inżyniera oprogramowania, aby napisał program, który je dla nich zorganizuje. Jesteś inżynierem oprogramowania, który został zatrudniony. Jednak proces kompilacji w czasach średniowiecza wymaga zapisania programu na papierze przez zespół powolnych skrybów biblijnych. Aby skrócić czas potrzebny zespołowi skrybów na skompilowanie kodu, musisz zminimalizować program.
Kościół chce, aby muzyka śpiewana była zorganizowana na podstawie skali muzycznej, w której jest napisana. Cała muzyka śpiewana przez Kościół jest napisana w skalach doryckich . Biorąc pod uwagę nuty określonego utworu muzycznego, twój program wyświetli skalę Doriana, w której się znajduje. Tutaj wyjaśnię dokładnie, czym jest skala Doriana. Jeśli już wiesz, możesz pominąć tę sekcję.
W każdej melodii jest 12 możliwych nut. Oto ich kolejność:
C C# D D# E F F# G G# A A# B
Półtonowi (przedstawiony za pomocą S
) jest zwiększany o jeden krok w prawo, owijając się wokół (a więc półtonowi się z B wróci do C). Tonu (przedstawiony za pomocą T
) ma dwa półtony. Na przykład półton w górę od F # byłby G. Tonem w górę od F # byłby G #.
Aby utworzyć skalę Doriana, zaczynamy od dowolnej nuty na liście, a następnie przechodzimy w górę według następującego wzoru, wymieniając nuty, które napotykamy:
T, S, T, T, T, S
Przykład. Zaczynam od A. Nuty mojej skali Doriana stają się:
A
B (up a tone)
C (up a semitone)
D (up a tone)
E (up a tone)
F# (up a tone)
G (up a semitone)
Skala ma notatki A, B, C, D, E, F # i G. Ponieważ zacząłem od A będziemy nazywają to Dorian skalę w . Istnieje zatem 12 różnych skal Doriana, z których każda nosi nazwę notatki, od której zaczęły. Każdy z nich używa tego samego wzoru tonów i półtonów, zaczynając od innej pozycji. Jeśli moje wyjaśnienie nie jest spójne, możesz również skonsultować się z Wikipedią .
Dane wejściowe programu można podać z dowolnego elementu odpowiedniego dla programu (np. STDIN, argument wiersza poleceń raw_input()
). Nie może być wstępnie zainicjalizowany w zmiennej. Daną wejściową będzie lista nut oddzielonych przecinkami, reprezentujących melodię utworu. Mogą się powtarzać notatki. Na wejściu zawsze będzie wystarczająco dużo różnych nut, aby móc zdecydowanie wydedukować skalę utworu. Przykładowe dane wejściowe:
B,B,D,E,D,B,A,G#,A,G#,E,D,F#,E,F#,E,F#,G#,A
Wyjście programu powinno być ciągiem Dorian scale in X
, gdzie X jest początkową nutą skali. Dane wyjściowe przykładowego wejścia:
Dorian scale in B
Porównując to ze skalą Doriana w B ( B C# D E F# G# A
), widzimy, że wszystkie nuty melodii mieszczą się w tej skali. Uwaga C # nie jest w tym przypadku używana. Istnieją jednak wystarczające uwagi, aby jednoznacznie zidentyfikować B Dorian jako właściwy klucz. Żadna inna skala Doriana nie pasuje, ponieważ niezależnie od innej skali, której próbujemy, zawsze jest co najmniej jedna nuta melodii, która nie należy do skali.
To jest kod golfowy, więc wygrywa pozycja z najmniejszą liczbą znaków. Zapytaj w komentarzach, jeśli masz pytania.