Hinweis : Anders Kaseorg warnt mich, dass dies ein Duplikat einer anderen vorherigen Frage sein könnte . Es scheint so, und es tut mir leid, dass ich diese Frage nicht gefunden habe, bevor ich diese gepostet habe. Dennoch hat diese Frage nur eine Antwort erhalten, und diese ist einfacher, nur für den Fall, dass Sie diesmal alle versuchen möchten. Ich werde es verstehen, wenn diese Frage als Duplikat markiert wird.
Die Herausforderung
Bei einer Eingabe wie dieser:
8g 8Df 4cs 2C 1A
Schreiben Sie das kürzeste Programm / die kürzeste Funktion, die eine Ausgabe wie die folgende erzeugt:
/\ -o-
| |
---|-|---------------------------------------------------|-|
|/ | |
---/|--------|\----b-*-----------------------------------|-|
/ | | | | o | |
-|--|--------|------|-----------------|------------------|-|
| (| \ | | | | | |
-|--|--)----*-------|/---------|------|------------------|-|
\ | / | | | |
-----|-------------------------|-------------------------|-|
| |
*_/ #-*-
Regeln
Die Ausgabe muss aus einem fünfzeiligen Stab bestehen, der mit der Zeichnung eines G-Schlüssels genau wie oben beginnt, links vom Stab ausgerichtet ist und nach dem Start des Stabes eine einzelne Spalte verlässt.
/\
| |
---|-|--
|/
---/|---
/ |
-|--|---
| (| \
-|--|--)
\ | /
-----|--
|
*_/
^
Single column
Die Notizen müssen je nach Typ mit einem *
oder einem o
Zeichen beginnen .
Es müssen genau acht Trennspalten für jedes *
oder ein o
Zeichen vorhanden sein:
/\ -o-
| |
---|-|---------------------------------------------------|-|
|/ | |
---/|--------|\----b-*-----------------------------------|-|
/ | | | | o | |
-|--|--------|------|-----------------|------------------|-|
| (| \ | | | | | |
-|--|--)----*-------|/---------|------|------------------|-|
\ | / | | | |
-----|-------------------------|-------------------------|-|
| |
*_/ #-*-
↑ ↑ ↑ ↑ ↑ ↑ ↑
8 columns of separation
Der Stab muss mit dem rechts ausgerichteten Abschlusszeichen enden, wie im Beispiel gezeigt. Der linke Balken des Abschlusszeichens muss 8 Spalten von der letzten Note entfernt sein.
Die Eingabe ist eine einzelne Zeichenfolge, die die Noten enthält (mindestens eine, keine leeren Eingaben), wobei jede durch ein Leerzeichen getrennt ist (Sie können davon ausgehen, dass jede Note eine richtige Note ist, sodass Sie nicht nach Fehlern suchen müssen). Sie können die Eingabe auch als ein Array von Zeichenfolgen mit einer Note pro Element im Array annehmen. Für jede Note ist das erste Zeichen der Nenner der Notenlänge ( 1
für eine ganze Note / ein halbes Blatt beginnt er mit o
; 2
für eine halbe Note / ein Minimum beginnt er mit o
; 4
für eine Viertelnote / einen Schritt beginnt er mit *
; und 8
für eine Achtel note / quaver , beginnt mit*
). Das zweite Zeichen ist die Notiz (siehe nächste Tabelle), und das dritte optionale Zeichen ist f
oder F
für flache Noten und s
oder S
für scharfe Noten.
--- A (ledger line)
G
-------- F
E
-------- D
C
-------- b
a
-------- g
f
-------- e
d
--- c (ledger line)
Natürlich muss die Eingabe die Groß- und Kleinschreibung der Noten berücksichtigen, aber Sie können die Groß- f
und Kleinschreibung der und s
-Modifikatoren auswählen .
Notiert c
und A
fügt zwei -
(Hauptbuchzeilen) an jeder Seite hinzu, da die Belegschaft erweitert werden muss. Notizen d
und G
sind aus dem Personal, brauchen aber keine Hauptbuchzeilen.
Abgeflachte oder geschärfte Noten müssen links von der Note eine b
oder #
zwei Positionen hinzufügen .
Die Stiele (falls vorhanden) müssen mit 4 vertikalen Balken gezeichnet werden. Noten von b
und über müssen den Stiel nach unten und links von der Note ziehen. Noten von a
und unter müssen den Stiel nach oben und rechts von der Note ziehen. Quaver müssen die Flagge immer nach rechts und genau wie gezeigt anbringen und müssen nicht gebeamt werden, wenn mehrere von ihnen hintereinander sind.
--------------------------
-----|\----b-*------------
| | |
-----|------|-------------
| | |
----*-------|/---------|--
↑↑ |
----||------↑↑---------|--
|| || |
|| || #-*-
|\ |\ ↑↑
| Stem | Note | Stem
Note Stem Note
Wie üblich kann Ihr Programm / Ihre Funktion die Ausgabe direkt zeichnen oder einen String, ein Array von Strings, eine Matrix von Zeichen oder ein anderes vernünftiges Format zurückgeben.
Nützliche Links
Das ist Code-Golf , also kann das kürzeste Programm / die kürzeste Funktion für jede Sprache gewinnen!
Bonus: Versuche Beispiele mit berühmten Melodien zu schreiben und lass jeden raten, um welche Melodie es sich handelt!