Wir schreiben das Jahr 930 und die Gregorianische Kirche hat ein Problem. Sie haben Tausende von Seiten mit Gesangsmusik, aber das Problem ist, dass alle Noten einfach auf einen Stapel geworfen wurden, anstatt über ein echtes Organisationssystem zu verfügen:
Bild von User gamerprinter bei Cartographers 'Guild .
Die Kirche muss alle Noten organisieren, deshalb haben sie einen mittelalterlichen Software-Ingenieur beauftragt, ein Programm zu schreiben, um es für sie zu organisieren. Sie sind der Softwareentwickler, der eingestellt wurde. Bei der Zusammenstellung im Mittelalter wird das Programm jedoch von einem Team langsamer Bibelschreiber auf Papier geschrieben. Um die Zeit zu verkürzen, die das Schreiberteam benötigt, um Ihren Code zu kompilieren, müssen Sie das Programm so klein wie möglich halten.
Die Kirche möchte, dass die Gesangsmusik auf der Grundlage der musikalischen Skala organisiert wird, in der sie geschrieben ist. Alle Gesangsmusik der Kirche ist in dorischen Skalen geschrieben . Ausgehend von den Noten eines bestimmten Musikstücks gibt Ihr Programm die dorische Skala aus, in der es sich befindet. Hier erkläre ich genau, was eine dorische Skala ist. Wenn Sie es bereits wissen, können Sie diesen Abschnitt überspringen.
Es gibt 12 mögliche Noten in jeder Melodie. Hier sind sie in Ordnung:
C C# D D# E F F# G G# A A# B
Ein Halbton (dargestellt mit a S
) wird um einen Schritt nach rechts erhöht und umbrochen (ein Halbton von B nach C). Ein Ton (dargestellt mit einem T
) besteht aus zwei Halbtönen. Zum Beispiel wäre ein Halbton von F # nach oben G. Ein Ton von F # nach oben wäre G #.
Um eine dorische Skala zu erstellen, gehen wir von einer beliebigen Notiz in der Liste aus und bewegen uns dann in folgendem Muster nach oben, wobei wir die Noten auflisten, auf die wir stoßen:
T, S, T, T, T, S
Ein Beispiel. Ich gehe von A aus. Die Noten meiner dorischen Skala werden:
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)
Die Skala hat die Noten A, B, C, D, E, F # und G. Da ich von A ausging, werden wir dies die dorische Skala in A nennen . Es gibt also 12 verschiedene dorische Skalen, von denen jede nach der Note benannt ist, mit der sie begonnen haben. Jeder von ihnen verwendet das gleiche Muster von Tönen und Halbtönen, nur ausgehend von einer anderen Position. Wenn meine Erklärung nicht kohärent ist, können Sie auch Wikipedia konsultieren .
Die Eingabe des Programms kann von einer beliebigen Stelle aus erfolgen, die für Ihr Programm geeignet ist (z. B. STDIN, Befehlszeilenargument, raw_input()
). Es kann sein, dass es in einer Variablen nicht vorinitialisiert ist. Die Eingabe ist eine Liste von durch Kommas getrennten Noten, die die Melodie des Stücks darstellen. Möglicherweise werden Notizen wiederholt. Die Eingabe wird immer genug unterschiedliche Noten enthalten, um die Tonleiter des Stückes entscheidend bestimmen zu können. Ein Beispiel Input:
B,B,D,E,D,B,A,G#,A,G#,E,D,F#,E,F#,E,F#,G#,A
Die Ausgabe des Programms sollte der String sein Dorian scale in X
, wobei X die Startnote der Skala ist. Die Ausgabe der Beispieleingabe:
Dorian scale in B
Vergleicht man dies mit der Dorian-Skala in B ( B C# D E F# G# A
), so sieht man, dass alle Noten der Melodie innerhalb dieser Skala liegen. Die Note C # wird in diesem Fall nicht verwendet. Es gibt jedoch genügend Hinweise, um B Dorian eindeutig als den richtigen Schlüssel zu identifizieren. Keine andere dorische Tonleiter passt, denn egal welche andere Tonleiter wir versuchen, es gibt immer mindestens eine Note der Melodie, die nicht zur Tonleiter gehört.
Dies ist Codegolf, daher gewinnt der Eintrag mit der kürzesten Anzahl von Zeichen. Fragen Sie in den Kommentaren, wenn Sie Fragen haben.