W teorii muzyki odstęp jest różnicą między dwoma tonami. Każdy skok jest zdefiniowany przez liczbę pół kroków (Różnica między C i C #) lub całych kroków (Różnica między C i D). Jeden cały krok jest taki sam jak dwa pół-kroki. Oto lista wszystkich domyślnych interwałów i liczby reprezentowanych przez nie kroków:
0 Perfect Unison
2 Major Second
4 Major Third
5 Perfect Fourth
7 Perfect Fifth
9 Major Sixth
11 Major Seventh
12 Perfect Octave
Istnieją 3 warianty domyślnych przedziałów, niewielkie , zmniejszone i rozszerzone .
Moll przedział jest pół kroku niższy niż poważnej przerwie, ale nie idealny przedział. Masz więc małą sekundę (1), małą trzecią (3), małą szóstą (8) i małą siódmą (10). Nie ma czegoś takiego jak pomniejsza czwarta, pomniejsza piąta, pomniejsza unisona lub pomniejsza oktawa, ponieważ są to idealne odstępy.
Zmniejszony odstęp jest pół kroku niższy niż małoletniego lub idealnego przedziału. Istnieje zmniejszona druga (0), zmniejszona trzecia (2), zmniejszona czwarta (4), zmniejszona piąta (6), zmniejszona szósta (7), zmniejszona siódma (9) i zmniejszona oktawa (11).
Augmented przedział jest pół kroku wyższa niż poważnej lub idealnego przedziału. Mamy Rozszerzony Unison (1), Rozszerzony Drugi (3), Rozszerzony trzeci (5), Rozszerzony Czwarty (6), Rozszerzony Piąty, (8), Rozszerzony Szósty (10) i Rozszerzony Siódmy (12).
Wyzwanie:
Musisz napisać program lub funkcję, która wykonuje kilka kroków o połowę lub całość, a następnie drukuje jeden z poprawnych angielskich opisów tego przedziału. Nie ma znaczenia, który opis wybierzesz, o ile dokładnie pasuje do tabeli We / Wy. Możesz wziąć to jako jeden ciąg
"5w" == 5 whole steps
"3h" == 3 half steps
lub jako liczba i ciąg / char.
5, "w" == 5 whole steps
3, "h" == 3 half steps.
Możesz założyć, że każde wejście będzie miało wartość od 0 do 12 pół kroku.
Stół IO
Oto pełna lista odwzorowująca liczbę kroków o krok do wszystkich dopuszczalnych wyników.
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
Oto kilka przykładowych operacji we / wy:
5w Minor Seventh
5h Augmented Third
12h Perfect Octave
12w UNDEFINED
1w Diminished third
2h Major Second
Odpowiedzi:
Ruby, Rev B 138 bajtów
5 bajtów zapisanych przez brak powtarzania
Augmented/Diminished
. 1 bajt zapisany przy użyciu?h
.Ruby, Rev A 144 bajty
Chodzi o to, aby zminimalizować liczbę podstawowych przedziałów (tylko siódma piąta trzecia i tylko unison) i wykorzystać fakt, że siódme i piąte mają analogiczny związek z tym, co pomiędzy trzecimi i unisons.
Istnieją cztery typy siódmego / trzeciego i 3 typy piątego / unisonu, więc zmienna indeksu
i
jest ustawiona na 12 minus liczba pół kroków, tak aby pierwszy termin wyrażeniai%7/4 + i/7*2
poprawnie wybrał typ podstawowego interwału.nie wziął udziału w programie testowym
wynik
Nieokreślone dane wejściowe zachowania: Funkcja daje poprawną odpowiedź
diminished union
dla -1 pół kroku, ale nie powiedzie się dla danych wejściowych powyżej 12. Na przykład daje wynikperfect unison
dla 14 pół kroków, ponieważ algorytm opiera się na cyklu 14 zamiast 12.źródło
Python 2, 149 bajtów
Po pierwsze, całe kroki są konwertowane na pół kroki.
Następnie drukowane jest
Diminished
vs.Augmented
Te zamieniają się na sąsiednien
z wyjątkiem tegon=5
in=6
dają to samo, co osiąga się przez umieszczenie ich w poprzek modułu granicznego nieparzystej liczby.Na koniec drukowana jest odległość obliczona za pomocą trzybitowej tabeli odnośników. To jest krótsze niż robienie
int('6746543230210'[n])
.źródło
Python 2.7, 155 bajtów
źródło
Siatkówka, 153 bajty
Numer wejściowy jest najpierw konwertowany na unarny, a następnie podwojony, po którym następuje
w
, a wszelkie litery są usuwane, pozostawiając tylko liczbę jednoargumentową. Liczba ta jest następnie konwertowana z powrotem na dziesiętną. Na koniec zastosowano wyszukiwanie i zamianę w celu skonstruowania ostatecznego wyniku.Przykładowe przebiegi:
Wypróbuj online!
źródło
Vitsy , 166 bajtów
Cóż, zdecydowanie można to pograć w golfa.
Działa to poprzez zdefiniowanie minimalnej możliwej liczby elementów, a następnie wywołanie tych elementów za pomocą składni metody.
Wypróbuj online!
źródło
JavaScript 189 bajtów
źródło
Java,
225224 bajtyMusi być lepszy sposób na spakowanie tych ciągów, ale nie mam żadnych pomysłów.
Zębaty:
źródło
if(s=='w')i*=2;
zi*=s=='w'?2:1;