Bei einer ASCII-Partitur müssen Sie in der Lage sein, die Note und ihre entsprechende Länge auszugeben. Die Partitur enthält zwischen 5 und 15 Noten einschließlich und ist auf einer Daube transkribiert. Eine Daube besteht aus fünf horizontalen Linien, die aus - (Minus-) Zeichen bestehen, die durch Leerzeichen voneinander getrennt sind. Die unterste Zeile in der Daube entspricht der Note 'E'. Die Leerzeichenzeile unmittelbar über der unteren Zeile zeigt ein 'F' an und hat eine höhere Tonhöhe als das 'E' darunter. Dies wird wie folgt fortgesetzt. Beachten Sie, dass Noten nur bis zu 'G' reichen, bevor Sie erneut bei 'A' beginnen. Siehe unten:
F ----------
E
D ----------
C
B ----------
A
G ----------
F
E ----------
Beachten Sie, dass die Buchstaben nicht in der Eingabe enthalten sind. Die Noten werden mit ao (Kleinbuchstaben ooh) über die Daube gelegt, um den 'Notenkopf' anzuzeigen. Dieser Notenkopf gibt die Häufigkeit der Note und damit die alphabetische Darstellung wie oben an. Zum Beispiel zeigt eine Notiz, die wie folgt in der Partitur platziert ist, ein 'A' an:
----
----
----
o
----
----
Eine Note, wie das 'A' oben, wird als 'ganze Note' bezeichnet und für einen ganzen Schlag gespielt. Andere Dauern können angezeigt werden, indem ein 'Stiel' aus der Note und zwischen null und drei 'Flaggen' eingefügt wird. Ein Stiel besteht aus drei | Zeichen (Pipe oder vertikaler Balken), die unmittelbar über dem Notenkopf gestapelt sind. Ein Stiel ohne Flaggen wird als "Viertelnote" betrachtet und spielt einen Viertelschlag. Flags sind \ (Backslash-) Zeichen und befinden sich auf der rechten Seite des Stiels. Jeder Stiel halbiert die Zeit, für die die Note gespielt wird. Die Länge jeder Note ist eine der folgenden: eine ganze Note, eine Viertelnote, eine Achtelnote, eine Sechzehntelnote oder eine Zweiunddreißigste Note. So würde jede Art von Notiz nach A aussehen:
--------------------
----|---|\--|\--|\--
| | |\ |\
----|---|---|---|\--
o o o o o
--------------------
--------------------
Wenn Sie mehr als eine Note zusammenfügen, erhalten Sie eine Punktzahl. Jede Note kann als vier Zeichen breit angesehen werden, wobei sich eine Note in der ersten Spalte jedes vierstelligen Blocks befindet. Zum Beispiel :
|\
----|\--|\----------
|\ | |\
----o---|---o---|\--
| o |
|---------------o---
|
o-------------------
--------------------
Das obige Beispiel enthält die folgenden Noten in der Reihenfolge: eine Viertelnote 'G', eine zweiunddreißigste Note 'D', eine Achtelnote 'C', eine ganze Note 'D' und eine Sechzehntelnote 'B'. Jede Note in Ihrer Ausgabe sollte das Format Buchstabe / Länge haben, wobei Buchstabe AG ist und Länge der Bruchteil der Länge der Note im Vergleich zu einer ganzen Note ist. In Ausnahmefällen sollten Länge und / oder Zeichen nicht gedruckt werden, wenn die Notiz eine ganze Notiz ist. Jede Note in Ihrer Ausgabe sollte durch ein einzelnes Leerzeichen getrennt werden. Daher sollte Ihr Code für die obige Punktzahl Folgendes ausgeben:
G/4 D/32 C/8 D B/16
- Die Noten liegen im folgenden Bereich: EFGABCDE F. Beachten Sie, dass nur der Buchstabe gedruckt werden muss, die Oktave wird ignoriert.
- Beachten Sie, dass die Anzahl der Eingabezeilen zwischen 9 und 12 variiert, da Noten mit einer Viertelzeit oder weniger in Zeile D oder höher mehr Zeilen erfordern, um vollständig angezeigt zu werden.
- In diesem Fall gibt es keine halbe Note.
Der kürzeste Code gewinnt (Leerzeichen zählen nicht).
Bearbeiten: Fehler im Abstand in einem Eingang behoben.
Einige Beispieleingaben:
|\
----|\--|-------------------
|\ | |
|---|---o---------------o---
| o |\
o---------------|\--|\------
|\ |\ |\
------------|\--|\--o-------
|\ o
------------o---------------
Ausgang: B / 8 C / 8 D / 8 E / 32 F / 32 G / 32 D.
----------------o-------------------
o
------------o-----------------------
o
--------o---------------------------
o
----o-------------------------------
o
o-----------------------------------
Ausgabe: EGBDFFACE
|\
|\
|\
------------o-------|-----------
| o | |\
|---|\--------------|---|\------
| | o |\
o---|---|\--------------o---|\--
o |\ |\
--------|\------------------|---
o o
--------------------------------
Ausgang: B / 4 A / 8 F / 32 F / 32 EC / 4 B / 32 F / 16
Antworten:
Javascript,
284,279,278,225,221, 220 Zeichen (einschließlich des erforderlichen Leerzeichens)Einzeiler ( Testgeige ):
Lesbar ( Testgeige ):
quelle
;
s entfernen und einige Tricks ausführen, können Sie dies noch kürzer machen.function a(c){b='',d=c.split('\n');for(e=0;d[0][e++];){for(i=f=0;g=d[i++];){h=g[e-1];if(h=='o')b+=(b?' ':'')+String.fromCharCode((d.length+4-i)%7+65);if(h=='|')f=f||4;f*=1+(g[e]=='\\');}if(f)b+='/'+f}return b}
(209 Zeichen)Perl, 103 Zeichen
(108, wenn Sie die erforderlichen Leerzeichen zählen)
Mit Leerzeichen für die Präsentation:
Beachten Sie, dass ich davon ausgehe, dass alle Zeilen die gleiche Länge haben (gemäß der überarbeiteten Version der Frage).
Neu arrangierte Version mit Erklärungen:
(alte, längere Lösung, aufbewahrt, weil sie interessant sein kann, auch wenn sie etwas länger ist)
Perl,
147126 Zeichen(
149131, wenn Sie das erforderliche Leerzeichen zählen)Mit Leerzeichen für die Präsentation:
Ein wenig neu arrangiert, um die Sprache nicht so sehr zu missbrauchen:
Beachten Sie, dass ich davon ausgehe, dass alle Zeilen die gleiche Länge haben. Wenn Sie kürzere Zeilen zulassen möchten, ist es naheliegend,
$_.=1x$c,
zu Beginn des Programms 9 Zeichen hinzuzufügen .Ich dachte an einen anderen Ansatz, um lange Wörter wie
split
und zu vermeidenmap
und Leerzeichen mehr von der Arbeit machen zu lassen, aber das Boilerplate und die Interpunktion rächten sich, und ich kann es nur auf einen Keuchhusten 130 (144 mit dem erforderlichen Leerzeichen) bringen.Der Patch, um mit unfertigen Linien fertig zu werden, ist diesmal etwas seltsamer (was, Sie dachten, es könnte nicht seltsamer werden?). 139 Zeichen, 155 mit dem erforderlichen Leerzeichen.
quelle
Scala (2,9),
352313291294290277274273 ZeichenWenn nur eine Funktion benötigt wird:
Wenn ein vollständiges Programm erforderlich ist:
quelle
J - 108 Zeichen
Ungolfed:
quelle
Python Golf, 207 Zeichen.
Ich habe für 2 Tage Code Golf mit Python beginnen , und ich fand , dass Dinge wie
import sys
,sys.stdin.read
,sys.stdout.write
sind expansiv.quelle