Das ist mein Kopf:
\ /-- -|
/ -\ | | |
\ \ \ \ |
--\ | \ | |
/ |--| / / |
/|- //--| / |
| | || //\ |
| \ /| // \ |
Es besteht aus genau acht Haaren. Mein Haar ist zu lang. Bitte schneiden Sie jeden einzelnen Strang auf eine von mir angegebene Länge.
Eingang
Die Hauptattraktion in diesem Abschnitt ist das eigentliche Haar. Hier ist eine grafische, farbcodierte Darstellung zusammen mit einer Animation für die Faulen:
Und hier ist eine vollständige Spezifikation für das, was ein Haarsatz ist:
- Die einzelnen Haare, die wir nennen Stränge werden hergestellt aus den werden
/
,\
,|
und-
ASCII - Zeichen, von nun an als bekannt Atome . - Der gesamte Head of Hear (alle Stränge zusammen) besteht aus
c
Spalten undr
Zeilen mitc
≥ 1 undr
≥ 2. - Jeder Strang wird ...
- Beginnen Sie an der letzten Reihe des Kopfes (Reihe
r
- 1). - hat eine Länge ,
l
wol
≥ 2.
- Beginnen Sie an der letzten Reihe des Kopfes (Reihe
- Strands können mit der folgenden Methode analysiert werden:
- Beginnen Sie am unteren Ende des Strangs. Dies wird eine sein
/
,|
oder\
Atom, das wir nennen Wurzel . (Die Stränge werden von links nach rechts analysiert, sortiert nach der Wurzel.) - Finden Sie das Atom, das zur Wurzel zeigt.
- Ein
|
Atom zeigt auf und ab. Ein-
Atom zeigt nach links und rechts (kann aber niemals auf die Wurzel zeigen, da sich nur Wurzeln in der unteren Reihe befinden können). Ein/
Atom zeigt nach links unten und nach oben rechts und ein\
Atom macht das Gegenteil. - Es wird immer genau ein Atom geben, das auf das Wurzelatom zeigt.
- Ein
- Suchen Sie ein unbenutztes Atom (eines, das noch nicht zu einem Strang gehört), das auf dieses Atom zeigt und sich auch nicht unter diesem Atom befindet (Haare können nicht nach unten wachsen, aber seitwärts sind in Ordnung).
- Wenn es Null gibt, haben Sie das Ende des Strangs erreicht!
- Wenn es eines gibt, ist dies das nächste Atom des Strangs. Wiederholen Sie Schritt 3 mit diesem Atom. (Dieses Atom wird jetzt für die Zwecke von Schritt 3 als "verwendet" markiert, da es Teil eines Strangs ist.)
- An keiner Stelle im Kopf wird es hier mehrere unbenutzte Atome geben.
- Beginnen Sie am unteren Ende des Strangs. Dies wird eine sein
Das Eingabeformat ist:
- Ein Haarschopf. Kann unverändert eingegeben werden (mehrzeilige Eingabe mit wörtlichen Zeilenumbrüchen) oder mit einem Begrenzer Ihrer Wahl anstelle von Zeilenumbrüchen. Beachten Sie, dass der Kopf immer ein Rechteck ist. Das heißt, nachgestellte Leerzeichen werden nach Bedarf hinzugefügt (das seltsame gerade Haar auf der rechten Seite dient nur dazu, zusätzliche nachgestellte Leerzeichen zu entfernen, um Verwirrung zu vermeiden).
- Eine Zahl ≥ 1, die angibt, wie viel Haar geschnitten werden soll. Dies wird im nächsten Abschnitt ausführlich beschrieben.
Sie können Eingaben in eine Funktion akzeptieren, STDIN / STDOUT usw. verwenden (alles, was zumutbar ist ).
Ausgabe
Ihre Ausgabe ist der Haarschopf mit dem angewendeten Haarschnitt. Um einen Haarschnitt zu erzielen, reduzieren Sie einfach die Länge jeder Haarsträhne um den angegebenen Betrag (der immer 1 oder mehr beträgt), beginnend mit dem Endpunkt des Haares, das sich in Richtung Wurzel bewegt. Lassen Sie die Wurzel jedoch immer intakt!
Hier ist ein einfaches Beispiel. Sagen wir, die Eingabe für den Kopf ist
\
/
|
|
Bei einer zweiten Eingabe von 2
würden Sie zwei Atome aus dem Strang herausschneiden und erhalten ein Ergebnis von
|
|
Und bei einer Eingabe von 42
wäre die Ausgabe einfach
|
Beachten Sie, dass Leerzeichen vor und nach dem Kopf völlig irrelevant sind. Sie können zusätzliche Zeilenumbrüche zuschneiden oder mehr Polster hinzufügen. Es spielt keine Rolle, solange der Kopf intakt bleibt. (Sie können auch mit nachgestelltem Leerzeichen machen, was Sie wollen.)
Testfälle
Für alle Testfälle wird das Beispiel verwendet, das zu Beginn dieses Beitrags vorgestellt wurde.
Haarschnittlänge = 1:
/- |
/ \ | |
\ \ \ \ |
--\ | \ | |
/ |-- / / |
|- //--| / |
| | || // |
| \ /| // \ |
Länge von 3:
|
\ |
--\ | \ |
/ |-- / / |
|- // | / |
| || // |
| \ /| // \ |
Länge von 7:
|- / |
| | / |
| \ /| // \ |
Länge von 1337:
| \ /| // \ |
Wertung
Das ist Code-Golf , also gewinnt der kürzeste Code in Bytes!
-
dritte Strang von links auf |
den vierten Strang von links
-
, nicht das, was er zeigt . Zum Beispiel zeigt das |
nicht auf den /
ersten Strang, sondern auf den /
. (Ja, ich weiß, dass es verwirrend ist. Ich musste das GIF mehrmals wiederholen, weil ich mich selbst verwirrt habe!) Ein einfacherer Weg, dies zu verstehen, besteht darin, einfach auf den oberen Rand des zweiten Strangs zu schauen.
-
an den vierten Strang angeschlossen werden sollte, nicht an den dritten.