Skala główna (lub skala jońska) jest jedną z najczęściej używanych skal muzycznych, szczególnie w muzyce zachodniej. Jest to jedna ze skal diatonicznych. Podobnie jak wiele skal muzycznych, składa się z siedmiu nut: ósma duplikuje pierwszą z podwójną częstotliwością, tak że nazywa się ją wyższą oktawą tej samej nuty.
Siedem nut to:
C, D, E, F, G, A, B , C (powtórzone np. W celach)
Skala główna to skala diatoniczna. Weź poprzednią sekwencję nut jako dużą skalę (w rzeczywistości jest to skala C-dur) . Sekwencja odstępów między nutami dużej skali jest następująca:
całe, całe, pół, całe, całe, całe, pół
gdzie „całość” oznacza cały ton (czerwona krzywa w kształcie litery U na rysunku), a „połowa” oznacza półton (czerwona przerywana linia na rysunku).
W tym przypadku od C do D istnieje cały ton, od D do E istnieje cały ton, od E do F. pół tonu, itp ...
Mamy 2 elementy, które wpływają na odległość tonów między nutami. Są to symbol ostry (♯) i płaski symbol (♭).
Symbol Sharp (♯) dodaje półton do nuty. Przykład. Od C do D wspomnieliśmy, że istnieje cały ton, jeśli użyjemy C♯ zamiast C, to od C♯ do D istnieje półton.
Płaski symbol (♭) działa odwrotnie niż ostry symbol, odejmuje pół tonu od nuty. Przykład: od D do E wspomnieliśmy, że istnieje cały ton, jeśli użyjemy Db zamiast D, to od Db do E istnieje półtora tonu.
Domyślnie od Nuty do Nuty istnieje cały ton, z wyjątkiem E to F
i B to C
w którym istnieje tylko półton.
Uwaga: w niektórych przypadkach użycie boisk enharmonicznych może stworzyć odpowiednik Skali Głównej. Przykładem tego jest C#, D#, E#, F#, G#, A#, B#, C#
gdzie E#
i B#
są enharmoniczne, ale skala jest zgodna z sekwencją głównej skali.
Wyzwanie
Biorąc pod uwagę skalę, wyprowadzaj prawdziwą wartość, jeśli jest to Skala główna lub równoważna, w przeciwnym razie wyprowadzaj wartość falsey.
Zasady
- Dozwolona standardowa metoda we / wy
- Obowiązują standardowe zasady gry w golfa
- Nie musisz brać pod uwagę ósmej nuty. Załóżmy, że dane wejściowe będą się składać tylko z 7 nut
- Załóżmy, że podwójne płaskie (♭♭), podwójne ostre (♯♯) lub naturalny znak (♮) nie istnieją
Przypadki testowe
C, D, E, F, G, A, B => true
C#, D#, E#, F#, G#, A#, B# => true
Db, Eb, F, Gb, Ab, Bb, C => true
D, E, Gb, G, A, Cb, C# => true
Eb, E#, G, G#, Bb, B#, D => true
-----------------------------------------------
C, D#, E, F, G, A, B => false
Db, Eb, F, Gb, Ab, B, C => false
G#, E, F, A, B, D#, C => false
C#, C#, E#, F#, G#, A#, B# => false
Eb, E#, Gb, G#, Bb, B#, D => false
źródło
Odpowiedzi:
Perl 6 ,
76656359 bajtów-4 bajty dzięki Philowi H.
Wypróbuj online!
Wyjaśnienie
źródło
Node.js 10.9.0 ,
78767169 bajtówWypróbuj online!
W jaki sposób?
Co daje:
'#'
'b'
źródło
JavaScript (Node.js) ,
150131125 bajtówWypróbuj online!
-19 bajtów dzięki Luisowi Felipe
-6 bajtów dzięki Shaggy
Nie golfowany:
źródło
[...'C0D0EF0G0A0B']
zamiast'C0D0EF0G0A0B'.split('')
i+""
zamiast.toString()
oszczędzać niektóre bajtyx[1]=='#'|-(x[1]=='b')
zamiastx[1]=='#'?1:(x[1]=='b'?-1:0)
oszczędzać też trochę bajtów-10 % 12 == 2
. Chociaż o tym pomyślę, w niektórych przypadkach może się to nie powieść ...Dart ,
198 197 196189 bajtówWypróbuj online!
Luźny port starej odpowiedzi Perla 6 /codegolf//a/175522/64722
Stara wersja :
Dart , 210 bajtów
Wypróbuj online!
Nie golfowany:
Cały krok to 2, jedna czwarta to 1. Mod 12 na wypadek, gdybyś skoczył na wyższą oktawę. Iteruje wszystkie nuty i oblicza różnicę między i-tą nutą a i-1. Łączy wynik i należy spodziewać się 221222 (2 całe, 1 połowa, 3 całości).
źródło
i=1
nai=0
może zmniejszyć bajt poprzez zmianęfor(;i<7;i++)
nafor(;++i<7;)
. Ponadto, uchwyty{}
mogą być usunięte wokół tej pętli, przez umieszczeniej+=...
wewnątrz trzeciej części pętli:for(;++i<7;j+='${(y[0]-y[1])%12}')
. I ostatnia sprawa zmieniareturn j=='221222';
sięreturn'221222'==j;
pozbyć przestrzeni. -6 ( 210 bajtów ) po tych modyfikacjach.if(k>9)k--;if(k>3)k--;
nak-=k>3?k>9?2:1:0;
ik+=m.length<2?0:m[1]=='#'?1:m[1]=='b'?-1:0;return k;
nareturn m.length<2?k:m[1]=='#'?k+1:m[1]=='b'?k-1:k;
. :)C (gcc) ,
-DA=a[i]
+ 183 = 191 bajtówWypróbuj online!
Na podstawie odpowiedzi Perla.
Pobiera dane wejściowe jako szeroki ciąg.
Nie golfowany:
źródło
[Wolfram Language (Mathematica) + pakiet muzyczny], 114 bajtów
Uwielbiam muzykę i uważam to za interesujące, ale grałem w prawdziwego golfa, kiedy ta okazja do gry w golfa spadła na szczupaka, więc moje poddanie jest trochę spóźnione.
Pomyślałem, że spróbuję tego zupełnie inaczej, wykorzystując trochę wiedzy muzycznej. Okazuje się, że pakiet muzyczny Mathematica zna podstawową częstotliwość nazwanych nut. Najpierw przekształcam ciąg wejściowy w sekwencję nazwanych notatek. Następnie biorę proporcje każdej kolejnej nuty i podwajam te, które są mniejsze niż 2 (aby uwzględnić przesunięcie oktawy). Następnie porównuję te stosunki ze stosunkami skali jońskiej, która ma w przybliżeniu 6% różnicy częstotliwości między półtonami i 12% między pełnymi nutami.
Ponad połowa wydanych tutaj bajtów służy do konwersji danych wejściowych na nazwane symbole.
Wypróbuj online!
źródło
Python 3 ,
175136134114112 bajtówWypróbuj online!
Jednowierszowa implementacja Python 3.
Podziękowania dla @Arnauld za pomysł obliczania tonów za pomocą podziału i modulo.
Dzięki @Jo King za -39 bajtów.
źródło
[Python]
269202 bajtówUlepszenia od
Jo King
:Spróbuj!
Niegolfowany, ze sterownikiem testowym:
źródło
Rubin , 109 bajtów
Wypróbuj online!
źródło