Schemat podstrunnicy gitarowej wygląda następująco:
0 1 2 3 4 5 6 7 8 9 10 11 12 <- Fret number (0 means it's open)
|-E--F--F#-G--G#-A--A#-B--C--C#-D--D#-E
|-B--C--C#-D--D#-E--F--F#-G--G#-A--A#-B
|-G--G#-A--A#-B--C--C#-D--D#-E--F--F#-G
|-D--D#-E--F--F#-G--G#-A--A#-B--C--C#-D
|-A--A#-B--C--C#-D--D#-E--F--F#-G--G#-A
|-E--F--F#-G--G#-A--A#-B--C--C#-D--D#-E
Jak widać pierwszy otwarty ciąg (od góry) to E
. Pierwszy prog na pierwszym sznurku to F
. Czwarty próg na trzecim sznurku to B
. Zauważ, że pierwsza nuta jest progiem zerowym, a nie pierwszą.
Można to zapisać cyframi w formacie string, fret
. Ciągi są ponumerowane od 1 do 6 od góry do dołu. Progi są ponumerowane od 0 do 12 od lewej do prawej. Pierwszy E
jest zatem 1, 0
. Kilka innych przykładów:
1, 0 --> E
1, 1 --> F
3, 5 --> C
5, 1 --> A#
6, 6 --> A#
Wyzwanie:
Weź N
pary liczb ( s
i f
) i wyślij ograniczoną sekwencję nut.
- Dane wejściowe mogą mieć dowolny odpowiedni format. krotki, macierz 2D, dwie osobne listy, lista przeplatanych (ciąg, próg, ciąg, próg ...) itp.
- Ton wyjściowy powinien być oddzielony, ale separator jest opcjonalny (przecinek, spacja, myślnik ...). Dane wyjściowe mogą być pisane wielkimi lub małymi literami.
s
(dla ciągu) będzie w zakresie[1, 6]
(możesz zdecydować się na indeksowanie i 0)f
(dla progu) będzie w zakresie[0, 12]
Przypadki testowe i przykłady:
1 4 5 2 1 3 <- String
4 2 6 3 5 1 <- Fret
G# E D# D A G#
6 2 3 1 4 2 3 2 2 2 6 5 2
0 1 2 3 4 5 6 7 8 9 10 11 12
E C A G F# E C# F# G G# D G# B
3 3 3 3 3 3 3 3 3 3 3 3 3 <- String
0 3 5 0 3 6 5 0 3 5 3 0 0 <- Fret
G A# C G A# C# C G A# C A# G G
// The same test case, but different input and output format:
(3,0)(3,3)(3,5)(3,3)(3,6)(3,5)(3,0)(3,3)(3,5)(3,3)(3,0)(3,0)
G,A#,C,G,A#,C#,C,G,A#,C,A#,G,G
Powodzenia i udanej gry w golfa!
Odpowiedzi:
05AB1E ,
48474340 bajtówWykorzystuje kodowanie CP-1252 .
Zarówno ciągi, jak i progi są oparte na 0.
Wyjaśnienie
Wypróbuj online!
Zaoszczędzono 7 bajtów dzięki Adnan
źródło
"AA#BCC#DD#EFF#GG#"•7V3•3BS£
zamiast"A A# B C C# D D# E F F# G G#"#
jest o kilka bajtów krótszy :)."AA#BCC#DD#EFF#GG#"
łańcucha:•™ÎÚ,Ülu•žh'#A«‡
(ponieważ dozwolone są małe litery: p).JavaScript (ES6),
7970 bajtówWymaga ciągów opartych na 1. Edycja: Zapisano 9 bajtów, bezpośrednio obliczając konwersję ciągu na próg, na podstawie starej odpowiedzi @ nich.
źródło
Mathematica, 62 bajty (niekonkurujące)
Symbole
{24,19,15,10,5,0}
iE2
reprezentują tony otwartych strun sześciu strun gitarowych (na przykład struna górna znajduje się 24 półtonów nad nutą E2). Nie konkuruje, ponieważ nie drukuje nazw nut - odtwarza sekwencję nut! (tylko jeśli masz Mathematica, niestety) Na przykładgra początkowe 4 takty z Kanonu Pachelbela. (co stanowi tyle samo Kanonu Pachelbela, ile mogę znieść)
źródło
MATL ,
484745 bajtówDzięki @Emigna za korektę formatu wejściowego.
Gitara i golf golf ... Musiałem odpowiedzieć na to!
Format wejściowy to: tablica ciągów (opartych na 1), a następnie tablica progów (opartych na 0).
Wypróbuj online!
Wyjaśnienie
Niektóre funkcje językowe użyte w tej odpowiedzi:
Skomentowany kod:
źródło
Java, 174
Nie golfowany:
źródło
C
104104 bajtówPobiera liczby jako
string fret
pary na standardowe wejście i wysyła notatkę po każdej parze. Na przykład:źródło
Rubinowy, 63 bajty
pobiera tablicę tablic 2-elementowych w kolejności
[string,fret]
.Wyjaśnienie
W standardowym strojeniu gitara jest jednym z niewielu instrumentów strunowych (pochylonych lub progowych), który ma niespójne odstępy między strunami. Większość ma albo stały 5-półtonowy odstęp między wszystkimi parami sąsiednich strun („czwarty”) lub spójny 7-półtonowy odstęp między wszystkimi parami sąsiednich strun („piąty”). Odpowiadają one stosunkom częstotliwości 3: 4 i 2: 3, i zajmują drugie miejsce tylko względem „oktawy” ze stosunkiem częstotliwości 1: 2.
Gitara ma przeważnie 5-półtonowe interwały. Gdyby miał 5 z nich, miałby różnicę 25 półtonów między 1. a 6. struną. Zamiast tego odstęp między drugim i trzecim ciągiem jest zredukowany do 4 półtonów, co daje różnicę 24 półtonów (2 oktawy), co jest lepsze do grania akordów.
Jest to niewygodne dla programu, więc zaczynamy od zmiany intonacji gitary 1-indeksowanej na 5-strunową indeksowaną intonację 0, która ma wszystkie interwały 5 półtonów:
Następnie dodajemy 2 i strojenie fikcyjnego 12-strunowego basu z intonacją otwartych strun w następujący sposób, a wszystkie interwały mają 5 półtonów (12 basowych „basów” istnieje, ale nie jestem pewien, że jest ich wiele z tym dokładnie strojenie.)
Jak widać, wszystkie ostre narzędzia są zgrupowane razem. Ten wzór można powtarzać w nieskończoność. Jest znany jako „koło piątych” i ma fundamentalne znaczenie dla zachodniej skali muzycznej (z drobnymi korektami strojenia koło można zamknąć ze względu na to, że
(3/2)**12
i2**7
są bardzo podobnymi liczbami.Teraz mamy do czynienia z parametrem progu. W przeciwieństwie do wielu innych odpowiedzi tutaj, które tłumaczą parametr ciągu na liczbę progów, tłumaczę parametr progu na liczbę ciągów. W powyższej tabeli widać, że dodanie 7 do numeru struny stawia nas na stringu, którego nazwa nuty jest o jeden półton wyższa. (Jest w zupełnie innej oktawie, ale to nie ma znaczenia.) Więc dodajemy
i[1]*7
do numeru ciągu i przyjmujemy to modulo 12:Odejmujemy to od 6, aby uzyskać liczbę z zakresu od 6 do -5 i sprawdzamy literę w
BEADGCF
(Ruby pozwala indeksom ujemnym zawinąć się do końca tablicy.) Jeślin>=7
musimy dodać#
symbol, aby zakończyć wynik .Program testowy
Wynik
źródło
C #, 131 bajtów
Wprowadź dwie osobne listy, ciągi są oparte na 1.
źródło
Clora , 55 bajtów
@T[0,7,2,10,5,0,7]+N%12@T[,A,A#,B,C#,D,D#,E,F,F#,G,G#]!
Wyjaśnienie
@
tryb numeryczny (odczytaj wprowadzane liczby)T[0,7,2,10,5,0,7]
Przekształć dane wejściowe za pomocą tablicy, ex tablica [Input]+N
Dodaj N (następną wartość wejściową) do bieżącego wejścia%12
Modulo 12 aktualna wartość wejściowa@
Wyłącz tryb numeryczny flagiT[,A,A#,B,C#,D,D#,E,F,F#,G,G#]
Przetłumacz dane wejściowe na tablicę!
Użyj wartości wejściowej jako wartości wyjściowejźródło
Java 7
197, 163 bajtyBez golfa
źródło
Python 2,
94, 91, 88 bajtówPrawdopodobnie trzeba wprowadzić pewne oczywiste ulepszenia. Dane wejściowe to lista par, a ciągi są indeksowane 0, np .:
źródło
Haskell,
8382 bajtówPobiera listę ciągów znaków i listę progów, oba indeksowane 0. Przykład użycia:
Z nieskończonej listy notatek zaczynających się od
A#
, upuść liczbę nut podanych przez listę[6,1,9,4,11,6]
w indeksie ciągu i wybierz notatkę o indeksie progu z pozostałej listy.źródło
(s*7)+(s>2)
- więc teraz używam tego w mojej odpowiedzi.JavaScript (ES6),
8281 bajtówChciałem wypróbować odpowiedź matematyczną, ale okazała się trochę długa. Może istnieje sposób na golfa ...
Testowy fragment kodu
Pokaż fragment kodu
źródło
toString(17)
ale walczyłem, aby uzyskać to w rozsądnej liczbie bajtów.PHP, 102 bajtów
Wprowadź jako tablicę wielokrotną zarówno 0, na przykład „[[2,0], [5,3], [2,12], [3,8], [0,3]]”
Fajna alternatywa 106 bajtów, aby ustawić # na podstawie przystawki mod 7
źródło