Uwaga : Anders Kaseorg ostrzega mnie, że może to być duplikat innego poprzedniego pytania . Wydaje się, że tak, i przepraszam, że nie znalazłem tego pytania przed opublikowaniem tego. Niemniej jednak na to pytanie otrzymano tylko jedną odpowiedź, a to jest prostsze, na wypadek, gdybyście wszyscy chcieli spróbować tym razem. Zrozumiem jednak, czy to pytanie zostanie ostatecznie oznaczone jako duplikat.
Wyzwanie
Biorąc pod uwagę takie dane wejściowe:
8g 8Df 4cs 2C 1A
Napisz najkrótszy program / funkcję, która generuje takie wyjście:
/\ -o-
| |
---|-|---------------------------------------------------|-|
|/ | |
---/|--------|\----b-*-----------------------------------|-|
/ | | | | o | |
-|--|--------|------|-----------------|------------------|-|
| (| \ | | | | | |
-|--|--)----*-------|/---------|------|------------------|-|
\ | / | | | |
-----|-------------------------|-------------------------|-|
| |
*_/ #-*-
Zasady
Dane wyjściowe muszą składać się z pięcioliniowego pięciolinii rozpoczynającego się od narysowania klucza G dokładnie tak, jak pokazano powyżej, wyrównanego do lewej strony pięciolinii i pozostawiającego jedną kolumnę po rozpoczęciu pięciolinii.
/\
| |
---|-|--
|/
---/|---
/ |
-|--|---
| (| \
-|--|--)
\ | /
-----|--
|
*_/
^
Single column
Nuty muszą zaczynać się *
od o
znaku lub w zależności od ich rodzaju.
Nie musi być dokładnie osiem kolumn oddzielenia każdego *
lub o
znaku:
/\ -o-
| |
---|-|---------------------------------------------------|-|
|/ | |
---/|--------|\----b-*-----------------------------------|-|
/ | | | | o | |
-|--|--------|------|-----------------|------------------|-|
| (| \ | | | | | |
-|--|--)----*-------|/---------|------|------------------|-|
\ | / | | | |
-----|-------------------------|-------------------------|-|
| |
*_/ #-*-
↑ ↑ ↑ ↑ ↑ ↑ ↑
8 columns of separation
Personel musi kończyć się terminatorem wyrównanym do prawej, jak pokazano w przykładzie. Lewy pasek terminatora musi być oddzielony 8 kolumnami od ostatniej nuty.
Wejście będzie pojedynczym ciągiem zawierającym nuty (co najmniej jeden, bez pustych danych wejściowych), każdy oddzielony spacją (możesz uznać, że każda nuta będzie poprawna, więc nie musisz sprawdzać błędów). Możesz również wziąć dane wejściowe jako tablicę ciągów, z notatką na element w tablicy. Dla każdej nuty pierwszy znak będzie mianownikiem długości nuty ( 1
dla całej nuty / półprzewodnika rozpoczyna się od o
; 2
dla półnuty / minimu rozpoczyna się od o
; 4
dla ćwierćnuty / ćwierćnuty zaczyna się od *
; a 8
dla ósmej notatka / ósemka , zaczyna się od*
). Druga postać będzie notatka (patrz następna tabela), a trzeci, opcjonalny postać będzie f
albo F
płaskich i notatek s
lub S
ostrych nut.
--- A (ledger line)
G
-------- F
E
-------- D
C
-------- b
a
-------- g
f
-------- e
d
--- c (ledger line)
Oczywiście dane wejściowe muszą uwzględniać wielkość liter w notatkach, ale możesz wybrać wielkość liter f
i s
modyfikatory.
Notatki c
i A
należy dodać dwie -
(linie księgi), po jednej z każdej strony, ponieważ muszą one rozszerzyć pięciolinię. Notuje d
i nie G
ma wśród personelu, ale nie potrzebuje linii księgi.
Spłaszczone lub zaostrzone nuty muszą dodać b
lub #
dwie pozycje po lewej stronie nuty.
Pędy (jeśli występują) należy narysować 4 pionowymi prętami. Nuty z b
góry i powyżej muszą rysować trzon w dół i po lewej stronie nuty. Nuty z a
dołu i do dołu muszą rysować trzon w górę i po prawej stronie nuty. Osłony muszą dodawać flagę, zawsze w prawo i dokładnie tak, jak pokazano, i nie muszą być przesyłane, jeśli jest ich kilka z rzędu.
--------------------------
-----|\----b-*------------
| | |
-----|------|-------------
| | |
----*-------|/---------|--
↑↑ |
----||------↑↑---------|--
|| || |
|| || #-*-
|\ |\ ↑↑
| Stem | Note | Stem
Note Stem Note
Jak zwykle, twój program / funkcja może bezpośrednio narysować wyjście lub zwrócić ciąg, tablicę ciągów, macierz znaków lub dowolny inny rozsądny format.
Przydatne linki
To jest golf golfowy , więc może wygrać najkrótszy program / funkcja dla każdego języka!
Premia: spróbuj pisać przykłady ze słynnymi melodiami i pozwól każdemu zgadnąć, która to melodia!
Odpowiedzi:
SOGL V0.12 ,
178175174173172171 bajtówWypróbuj tutaj! (θ dodane dla ułatwienia użytkowania; aby działać jako 171 bajtów, oczekuje, że dane wejściowe znajdą się na stosie)
O ile mogę powiedzieć, to działa, ale jeśli znajdziesz jakieś problemy, powiedz mi.
Wyjaśnienie:
pierwsza część: tworzenie płótna
druga część: pętla, zwróć uwagę na położenie głowy
trzecia część: flagi i łodygi
źródło
2bs
w twoim przykładzie musi mieć trzon skierowany w dół.JavaScript (ES6),
616527 bajtówDzięki @shaggy za usunięcie prawie 90 bajtów
Nie miałem pojęcia o notatkach ... do tej pory mam nadzieję, że dobrze to zrozumiałem.
wyjaśnienie
źródło
t[0]
it[2]
, a następnie po prostu zrobićq=t.length*9
s>6&&(
którym możesz zaoszczędzić bajt. Można również zapisać kolejny bajt z zastępując(w=q+12)
zew
,repeat(q=i.length*9)
zerepeat(w=i.length*9)
irepeat(q)
zrepeat(w,w+=12)
.Węgiel drzewny ,
180171168163 bajtówWypróbuj online!Link jest do pełnej wersji kodu. Wyjaśnienie:
Wydrukuj pięciolinię.
Wydrukuj klucz.
Zapętlaj każdą notatkę.
Znajdź współrzędną Y notatki.
To jest naprawdę podstępne:
χ
jest zmienną, która jest predefiniowana na 10, która jest dokładnie współrzędną X przypadkowej pierwszej nuty, jeśli ją posiada. Po przejściu do tej pozycji dodaje się do niej 9, co oznacza następną pozycję nuty.Wydrukuj przypadkowy, jeśli taki istnieje.
W razie potrzeby wydrukuj linie księgi i notatkę. W rzeczywistości linia jest drukowana na dowolnej parzystej współrzędnej y, chociaż wydrukowanie jej na pięciolinii nie ma oczywiście żadnego efektu.
Nic więcej do roboty dla półbogów.
W przypadku notatek poniżej punktu środkowego
pociągnij trzon do góry,
i flaga dla ósemek.
W przypadku nut powyżej punktu środkowego
pociągnij łodygę w dół,
i flaga dla ósemek.
źródło