Dal Segno i Da Capo to dwa bardzo powszechnie używane terminy muzyczne. Oznaczają odpowiednio „ od znaku ” (𝄋) i „ od początku ”.
Istnieje również pomysł na kod (𝄌), który jest końcem utworu muzycznego. To, co gra się po „głównej części” utworu.
Na przykład DS al coda ( Dal Segno al coda ) oznacza „idź do segno , graj, dopóki nie zostaniesz poproszony, aby przejść do cody , a następnie wskocz tam”.
Opis
Twoim zadaniem w tym wyzwaniu jest uzyskanie wkładu złożonego z dowolnej liczby nut, które mogą, ale nie muszą zawierać Dal Segno i Da Capo, i wygenerować tę samą muzykę ze wspomnianymi wyżej skokami „rozwiniętymi”, aby powtórzenia były rozszerzone dosłownie.
Wejście
Twój kod powinien przyjmować jako dane wejściowe sekwencję nut lub sygnałów (tutaj zdefiniowanych jako wszystko oprócz nuty), oddzielonych spacjami w jednym ciągu.
Notatki są któregokolwiek z
a
,b
,c
,d
,e
,f
, lubg
, z opcjonalnym#
lubb
dołączane (dla celów tego wyzwania, nie ma rytm).A
C
(duża litera c) oznacza oznaczenie kodu . Zawsze będzie zero lub dwa oznaczenia kodów ; pierwsze oznaczenie kodowe wskazuje, gdzie skoczyć, a drugie oznacza miejsce, do którego należy skoczyć.Symbol
S
(s) reprezentuje oznakowanie signo . Zawsze będzie zero lub jedno oznakowanie (-a) signo .F
( Wielka litera f) oznacza dokładne znakowanie. To „przesłania” koniec utworu - więcej na ten temat poniżej. Zawsze będzie zero lub jeden drobny znak (y).Dowolne z poniższych dokładnych ciągów tekstu reprezentują:
D.S. al fine
: przejdź do signo i graj aż do końca utworu lub dokładnego oznaczenia (jeśli istnieje).D.S. al coda
: idź do signo , graj do kody , a następnie przeskocz do drugiego znaku kody i graj do końca utworu.D.C. al fine
: przejdź do początku, graj do końca lub dokładnego oznaczenia.D.C. al coda
: przejdź do początku, graj do kody , następnie przeskocz do drugiego znaku kody i graj do końca utworu.
Zawsze będzie minimum zero i maksymalnie jeden z każdego łańcucha na sztukę. Nigdy nie będzie wielu
al fine
s lub wielual coda
s w jednym kawałku.
Wynik
Kod powinien być generowany w podobnym formacie łańcuchowym: lista notatek oddzielonych spacjami.
Zawsze możesz założyć, że wynikiem będzie jeden lub więcej znaków.
Przypadki testowe
W: a# bb c b a
Out:a# bb c b a
W: a S b D.S. al fine c
Out:a b b c
W: a S b C c D.S. al coda d C e
Out:a b c b e
W: a b F c d D.C. al fine e f
Out:a b c d a b
W: a b D.C. al fine c d F e f
Out:a b a b c d
W: a b C c d D.C. al coda e f C g g#
Out:a b c d a b g g#
W: a b D.C. al coda c d C e f C g g#
Out:a b a b c d g g#
W: a b S c d C D.C. al coda C D.S. al fine e f F g
Out:a b c d a b c d c d e f
W: a S b C c D.S. al coda C d D.S. al fine e F f
Out:a b c b d b c d e
W: a b C c d D.C. al coda e f F g g# C gb a# D.C. al fine
Out:a b c d a b gb a# a b c d e f
W: a F b C D.C. al coda C D.C. al fine
Out:a b a b a
W: C a S b D.C. al coda C c D.S. al fine d
Out:a b c b c d
W: a S b D.S. al coda C C c D.C. al fine
Out:a b b c a b c
W: a F C b C D.C. al coda D.C. al fine
Out:a b a a
Zasady
Oznaczenia będą zawsze wyświetlane w logicznej kolejności. Oznacza to, że nigdy nie będzie
S
poD.S.
i zawsze będzie przed nim itd.To jest code-golf , więc wygra najkrótszy kod w bajtach.