In der Musiktheorie ist ein Intervall die Differenz zwischen zwei Tonhöhen. Jede Tonhöhe wird durch die Anzahl der Halbschritte (Der Unterschied zwischen C und C #) oder der ganzen Schritte (Der Unterschied zwischen C und D) definiert. Ein ganzer Schritt entspricht zwei Halbschritten. Hier ist eine Liste aller Standardintervalle und der Anzahl der Halbschritte, die sie darstellen:
0 Perfect Unison
2 Major Second
4 Major Third
5 Perfect Fourth
7 Perfect Fifth
9 Major Sixth
11 Major Seventh
12 Perfect Octave
Es gibt 3 Variationen der Standardintervalle: geringfügig , verringert und erweitert .
Ein kleines Intervall ist einen halben Schritt niedriger als ein großes Intervall, aber kein perfektes Intervall. Sie haben also eine kleine Sekunde (1), eine kleine dritte (3), eine kleine sechste (8) und eine kleine siebte (10). Es gibt kein Moll-Viertel, Moll-Fünftel, Moll-Unisono oder Moll-Oktave, da dies alles perfekte Intervalle sind.
Ein verkürztes Intervall ist einen halben Schritt niedriger als ein kleines oder perfektes Intervall. Es gibt eine verminderte Sekunde (0), eine verminderte dritte (2), eine verminderte vierte (4), eine verminderte fünfte (6), eine verminderte sechste (7), eine verminderte siebte (9) und eine verminderte Oktave (11).
Ein erweitertes Intervall ist einen halben Schritt höher als ein Hauptintervall oder ein perfektes Intervall. Wir haben Augmented Unison (1), Augmented Second (3), Augmented Third (5), Augmented Fourth (6), Augmented Fifth (8), Augmented Sixth (10) und Augmented Seven (12).
Die Herausforderung:
Sie müssen ein Programm oder eine Funktion schreiben, die mehrere halbe oder ganze Schritte ausführt und dann eine der gültigen englischen Beschreibungen dieses Intervalls druckt . Es spielt keine Rolle, welche Beschreibung Sie auswählen, solange sie genau mit der E / A-Tabelle übereinstimmt. Sie können dies als eine Zeichenfolge nehmen
"5w" == 5 whole steps
"3h" == 3 half steps
oder als Zahl und Zeichenfolge / Zeichen.
5, "w" == 5 whole steps
3, "h" == 3 half steps.
Sie können davon ausgehen, dass jeder Eingang zwischen 0 und 12 Halbschritten liegt.
IO-Tabelle
Hier ist eine vollständige Liste, in der die Anzahl der Halbschritte allen zulässigen Ausgaben zugeordnet ist.
0 Perfect unison, Diminished second
1 Minor second, Augmented unison
2 Major second, Diminished third
3 Minor third, Augmented second
4 Major third, Diminished fourth
5 Perfect fourth, Augmented third
6 Diminished fifth, Augmented fourth
7 Perfect fifth, Diminished sixth
8 Minor sixth, Augmented fifth
9 Major sixth, Diminished seventh
10 Minor seventh, Augmented sixth
11 Major seventh, Diminished octave
12 Perfect octave, Augmented seventh
Hier sind einige Beispiel-E / A:
5w Minor Seventh
5h Augmented Third
12h Perfect Octave
12w UNDEFINED
1w Diminished third
2h Major Second
Antworten:
Ruby, Rev B 138 Bytes
5 Bytes werden durch Nichtwiederholung gespeichert
Augmented/Diminished
. 1 Byte durch Verwendung von gespeichert?h
.Ruby, Rev. A 144 Bytes
Die Idee ist, die Anzahl der Grundintervalle zu minimieren (siebtes fünftes Drittel und nur unisono) und die Tatsache auszunutzen, dass siebte und fünfte eine analoge Beziehung zu der zwischen Dritteln und Unisons haben.
Es gibt vier Arten von siebten / dritten und drei Arten von fünften / unisono, so dass die Indexvariable
i
auf 12 minus der Anzahl der Halbschritte gesetzt wird, so dass der erste Term des Ausdrucksi%7/4 + i/7*2
den Typ des Basisintervalls korrekt auswählt.ungolfed im Testprogramm
Ausgabe
Undefinierte Verhaltenseingaben: Die Funktion gibt die richtige Antwort
diminished union
für -1 Halbschritte aus, schlägt jedoch für Eingaben über 12 fehl. Beispielsweise werdenperfect unison
14 Halbschritte ausgegeben, da der Algorithmus auf einem Zyklus von 14 statt 12 basiert.quelle
Python 2, 149 Bytes
Zunächst werden ganze Schritte in halbe Schritte umgewandelt.
Dann wird
Diminished
vsAugmented
gedruckt. Diese wechseln sich für benachbarten
außer dem abn=5
undn=6
ergeben dasselbe, was erreicht wird, indem sie zuerst über eine Grenze modulo eine ungerade Zahl gesetzt werden.Schließlich wird die Entfernung gedruckt und über eine Drei-Bit-Nachschlagetabelle berechnet. Das ist kürzer als das
int('6746543230210'[n])
.quelle
Python 2.7, 155 Bytes
quelle
Netzhaut, 153 Bytes
Die eingegebene Nummer wird zuerst in unär konvertiert und dann verdoppelt, wenn sie gefolgt wird
w
. Alle Buchstaben werden entfernt, wobei nur die unäre Nummer übrig bleibt. Diese Zahl wird dann wieder in eine Dezimalzahl umgewandelt. Schließlich wird etwas Suchen und Ersetzen angewendet, um die endgültige Ausgabe zu erstellen.Beispielläufe:
Probieren Sie es online aus!
quelle
Vitsy , 166 Bytes
Nun, das kann definitiv weiter gespielt werden.
Dies funktioniert, indem die minimal mögliche Anzahl von Elementen definiert und diese Elemente dann über die Methodensyntax aufgerufen werden.
Probieren Sie es online aus!
quelle
Javascript 189 Bytes
quelle
Java,
225224 BytesEs muss einen besseren Weg geben, diese Saiten zu packen, aber ich habe keine Ideen.
Eingerückt:
quelle
if(s=='w')i*=2;
miti*=s=='w'?2:1;