Przed wyjazdem nie musisz rozumieć dużej ilości zapisu muzycznego, aby wykonać to wyzwanie.
WYJAŚNIENIE
W standardowym zapisie nutowym podwójne strony otwierają się na całej stronie i służą jako punkty odniesienia do nut, informując, jaką nutę należy zagrać. Jeśli nie znasz jeszcze klucza wiolinowego i basowego, oto opis z Wikipedii:
Klucz wiolinowy to muzyczny symbol używany do oznaczania wysokości zapisanych nut. Umieszczony w jednym z wierszy na początku pięciolinii wskazuje nazwę i wysokość nut w tym wierszu. Ta linia służy jako punkt odniesienia, za pomocą którego można określić nazwy nut w dowolnej innej linii lub przestrzeni pięciolinii.
Na powyższym obrazku górna połowa linii to klucz wiolinowy, oznaczony symbolem
Dolna połowa to klucz basowy oznaczony symbolem
Jak widać na klucz wiolinowy nuty na dolnej linii jest najbardziej E . (Nie liczę notatki poza kluczu liniami na to wyzwanie) Na kluczu basowym, najniższa linia jest G . Aby ukończyć to wyzwanie, musisz wykonać następujące czynności:
WYZWANIE
Biorąc pod uwagę dane wejściowe w jednej z następujących form (twój wybór), przekonwertuj je na przeciwny klucz. To, czy jest to klucz wiolinowy, czy basowy, może być wartością Truthey / Falsey w twoim języku (nie tylko dwiema wartościami), np.
F # T lub F # True lub F # Treble
ale nie
F # -1 lub F # 4
Spacje i wielkie litery są opcjonalne, Flats się nie pojawi, a końcowe białe znaki nie są dozwolone.
Input Expected Output
E Treble G
F Treble A
F# Treble A#
G Treble B
G# Treble C
A Treble C
A# Treble C#
B Treble D
C Treble E
C# Treble F
D Treble F
D# Treble F#
E Treble G
F Treble A
F# Treble A#
G Bass E
G# Bass F
A Bass F
A# Bass F#
B Bass G
C Bass A
C# Bass A#
D Bass B
D# Bass C
E Bass C
F Bass D
F# Bass D#
G Bass E
G# Bass F
A Bass F
A# Bass F#
Ostrzegamy, że nie jest to banalne wyzwanie polegające na stałej różnicy. Przyjrzyj się uważnie wejściom i wyjściom. Jeśli spojrzysz na pianino,
czarne klawisze to ostre, oznaczone przez #. Zauważ, że nie ma E # ani B #. Oznacza to, że jeśli otrzymasz klucz G # na kluczu basowym, zamiast zwracać E # , musisz zwrócić F.
To jest golf golfowy , więc wygrywa najmniejsza liczba bajtów.
źródło
C
zamiastC
) są w porządku?1
i-1
(lub nawet mówienie4
i-4
) wprowadzania danych wskaźnika klucza jest dozwolone, czy byłoby to dopuszczalne tylko wtedy, gdy są to wartości prawdy / falseya w naszym języku?Odpowiedzi:
Galaretka ,
3534 bajtówMam wrażenie, że pewna arytmetyka może wygrać z tą metodą.
Wypróbuj online!
Pełny program z 1) wskaźnikiem klucza
0
lub odpowiednio1
dla basów lub tonów wysokich i 2) nutą; i wydrukowanie powstałej notatki.Byłoby 31 bajtów, gdyby
-4
i4
były akceptowalne jako wartości wejściowe wskaźnika klucza (wówczasÑi+_⁸?4ị¢
mogą się staćÑi+⁸ị¢
), ale zostało to wyjaśnione jako niedozwolone, chyba że -4 oznacza falsey, a 4 to prawda, co nie jest prawdą w przypadku Jelly.W jaki sposób?
Buduje klawiaturę z fantomem
B#
iE#
klawiszami, znajduje indeks danych wejściowych, kompensuje, że4
w wymaganym kierunku, indeksuje z powrotem w klawiaturę, zastępując te klawisze fantomów wymaganymi wynikami (klawisz nad nimi):źródło
Befunge,
7064 bajtówWypróbuj online!
Dane wejściowe powinny mieć postać
C# Treble
lubF Bass
, chociaż kluczem może być po prostu pierwsza litera (tj.T
LubB
), ponieważ reszta danych wejściowych jest ignorowana.Wyjaśnienie
W wyniku tej modyfikacji kodu następna sekwencja instrukcji przyjmie jedną z dwóch postaci:
W tym momencie stos zawiera
note,0,sharp,space
albonote,0,space
.W tym momencie stos zawiera
note,0
albo po prostunote
(z domyślnym zerem poniżej).źródło
Perl 5, 56 bajtów
Odczytuje nutę i klucz wiolinowy jako dwie linie ze STDIN i drukuje nową notatkę do STDOUT. Klucz jest
0
przeznaczony dla tonów wysokich i1
basów.źródło
-p
flagi tio.runJavaScript (ES6) 74 bajty
Trwa wejście w currying składni
(note)(clef)
, gdzieclef
jest0
na basie i1
na wysokich tonów .Próbny
Pokaż fragment kodu
W jaki sposób?
To jest rzeczywiście nieco mniej zabawne niż moja poprzednia wersja, ale podstawowa tabela odnośników
F#,C#,(unused),D#,A#,F,C,G,D,A,E,B,F
pozwala teraz skrócić warunek # , unikając sztuczki znakowej NUL - która, jak sądzę, była nieco pogranicza.Poprzednia wersja
7675 bajtówPróbny
Pokaż fragment kodu
W jaki sposób?
Dane wejściowe (n, c) są przetwarzane przez następujące kroki:
Najpierw oceniamy,
4 * !!n[1] + c + n
gdzie!!n[1]
jest prawdziwe (wymuszone na 1 ), jeśli nuta zawiera # , a fałszywe (wymuszone na 0 ) w przeciwnym razie. Wyrażenie4 * !!n[1] + c
skutkuje wartością liczbową, która jest dodawana przed ciągiem n .Niejawny krok: wiodące zera i końcowe # są ignorowane przez
parseInt()
. Na przykład"5G#"
jest faktycznie analizowany jako"5G"
.Konwertujemy nowy ciąg na wartość dziesiętną, analizując go jako liczbę podstawową 21.
Stosujemy modulo 24.
Stosujemy modulo 17.
Poniżej znajduje się tabela podsumowująca dla wszystkich możliwych par danych wejściowych wraz z oczekiwanym wynikiem. Zauważ, że do wyniku należy dodać #, jeśli końcowy wynik to 0 , 2 , 3 lub 5 . Stąd użycie maski binarnej 101101 ( 45 w systemie dziesiętnym).
źródło
Python 2 , 77 bajtów
Funkcja, która drukuje do
STDOUT
.True
konwertuje tony niskie na wysokie iFalse
konwertuje tony wysokie na niskie.Wypróbuj online!
Wyjaśnienie:
N=ord(n[0])-63-4*c;
oblicza indeks (od 0 do 7) listu nowej nuty, nie uwzględniając ostrych krawędzi.ord(N[0])-63-4*c
pobiera indeks bieżącej litery i dodaje lub odejmuje 2 w zależności od wartościc
(zmiennej do zmiany kierunku konwersji)M=-~N%3<1<len(n);
oblicza, czy ta zmienna będzie musiała zostać dostosowana. Na przykład, jeśli nowa nuta jestE
, a oryginalna nuta była ostra, należy ją dostosować doF
. Łańcuchowa nierówność działa w następujący sposób:-~N%3<1
sprawdza, czy indeks nowej nuty jest w sekwencji3n-1
. To da tylko prawdę dlaE
iB
, dwie nuty, które nie mają ostrego.1<len(n)
sprawdza, czy oryginalna nuta była ostra (spowodowałoby to, że długość struny byłaby większa niż 1). Jest to konieczne, ponieważ jeśli nie było ostre, nie ma potrzeby dostosowywania nowych liter notatek.M
albo,True
alboFalse
, które mogą być użyte w obliczeniach odpowiednio1
i0
, więc aby wykonać dopasowanie, potrzebujemy tylko dodać M do N i modulo o 7.chr((N+M)%7+65)
w razie potrzeby dodaje dopasowanie, a następnie konwertuje wartość z indeksu z powrotem na znak.+n[1:2-M]
doda ostry symbol, jeśli obaM=0
(nie dokonano żadnej regulacji), a oryginalna wartość również była ostra.źródło
Java 8, 119 bajtów
Wyjaśnienie:
Wypróbuj tutaj.
źródło
n->b->((char)((n.charAt(0)-(b?0:4))%7+65)+n.substring(1)).replaceAll("B#","C").replaceAll("E#","F")
R , 111 bajtów
Wypróbuj online!
Nie golfowany:
źródło