Schreiben eines Programms , das in einer Zeichenkette , die nur Leerzeichen, Zeilenumbrüche nimmt und spitze Klammern: <
, >
( Chevrons ). Geben Sie eine Folge von Leerzeichen, Zeilenumbrüchen und Schrägstrichen aus :, ( Soliduses ), deren Formen der Eingabe entsprechen, die jedoch um eine Vierteldrehung im Uhrzeigersinn gedreht wurden, wobei eine Spalte mit Leerzeichen zwischen den einzelnen Zeilen der ursprünglichen Eingabe eingefügt/
wurde \
(aus Gründen der Ästhetik).
Wenn die Eingabe beispielsweise wie folgt lautet:
<>
Die Ausgabe wäre:
/\
\/
Wenn die Eingabe wie folgt lautet:
><<<>
<><
Die Ausgabe wäre:
\/
/\ /\
\/ /\
/\ /\
\/
Wenn die Eingabe wie folgt lautet:
>> <<
<> <>
<
><
Die Ausgabe wäre:
/\ \/
\/ \/
\/ /\
/\
/\ /\
\/ /\
Beachten Sie, dass in den letzten beiden Beispielen eine einzelne Spalte mit Leerzeichen zwischen den ursprünglichen Eingabezeilen vorhanden ist.
Sie können ein vollständiges Programm schreiben, das die Eingabe auf jede übliche Weise (Befehlszeile, stdin) übernimmt und die Ausgabe ausgibt, oder Sie können eine Funktion mit einem String-Argument schreiben, das die Ausgabe ausgibt oder zurückgibt.
Leere führende und nachfolgende Zeilen oder Spalten mit Leerzeichen in der Eingabe müssen nicht in der Ausgabe vorhanden sein. Außerdem kann die Ausgabe an beliebigen Stellen eine beliebige Anzahl von führenden und / oder nachfolgenden Leerzeichen und / oder Zeilenumbrüchen enthalten, sofern die resultierenden Formen korrekt sind. Mit anderen Worten, die Übersetzung der ASCII-Kunst spielt keine Rolle, nur die Formen und ihre Beziehung zueinander .
Optional können Sie davon ausgehen, dass die Eingabe eine nachgestellte Newline enthält.
Der kürzeste Code in Bytes gewinnt.
Antworten:
CJam, 35 Bytes
Probieren Sie es hier online aus
quelle
$
Trick waren es immer noch 37 Bytes ...$
Trick hat mir schon oft das Leben gerettet;)CJam, 37 Bytes
Versuchen Sie es online in dem CJam Dolmetscher .
Wie es funktioniert
quelle
Python 2, 105 Bytes
Aus all den falschen Gründen muss dies eine der schönsten Anwendungen sein, die
map(None, ...)
ich bisher hatte. Die Ausgabe füllt sich sogar zu einem perfekten Rechteck.Nehmen wir das zweite Beispiel:
map(None,*s.split("\n"))
führt eines armen Mannes auszip_longest
und gibt:Beachten Sie, dass die zweite Zeile kürzer ist als die erste, sodass
None
am Ende eine angezeigt wird. Normalerweise wäre dies ein Problem, aber aus irgendeinem Grund ist in Python 2 fast alles vergleichbar, insbesondere nichtDies bedeutet , dass der Ausdruck
1-cmp(c,"<")
kehrt0, 1, 2
für">", "<", None
jeweils, so dass wir den String Slicing Trick verwenden , um einen von zu extrahieren"\/", "/\", " "
. Auf diese Weise drucken wir die Ausgabe zeilenweise aus und verbinden die 2-Zeichen-Gruppen mit Leerzeichen.quelle
Scala,
201188180 ZeichenHinweis:
Dies funktioniert nur, wenn die angegebene Zeichenfolge alle Zeilen mit der gleichen Länge enthält (dh mit Leerzeichen aufgefüllt).
Erläuterung:
Ich verwende fold mit dem Anfangswert von tuple of a
Seq[String]
und anInt
(anstatt zu schreiben,Seq.empty[String]
schreibe ich den kürzerenSeq("")
und.init
nach dem fold), der fold bearbeitet eine Sammlung von Strings, jeder String ist eine Zeile in der ursprünglichen Eingabe und jede Zeile ist verdoppelt. Der Trick dabei war, das Modulo des Zeichens zu testen. Da der'<'
Wert 60 und der'>'
Wert 62 ist, ergibt das Testen auf Modulo 4 0 oder 2. Aus diesem Grund enthält die Falte auch ein Flip-Int
Set auf 0 und ein Flip- Set zwischen 0 und 2 mit2-i
. Jede ungerade Zeile sollte'>'
auf'/'
und'<'
auf'\\'
und jede gerade Zeile sollte'>'
auf'\\
und'<'
auf abbilden'/'
. Deshalb teste ich fürc%4==i
und 2 Fliegen mit 1 Stein schlagen. Die Falte "baut" die ursprüngliche Folge von Strings in umgekehrter Reihenfolge wieder auf, und dann transponiere ich (nach dem Ablegen der letzten Zeile) die Folge (aus diesem Grund müssen alle Strings exakt die gleiche Länge haben). wegen der damit verbundenen impliziten muss ich in_.mkString
jeder zeile (vorher spalte) und dannmkString("\n")
für die endgültige ausgabe.quelle
Perl - 119
Zunächst
@l
wird eine Liste mit Listen zugewiesen, die die Zeichen in jeder Eingabezeile in umgekehrter Reihenfolge darstellen. Anschließend werden die Zeichenspalten durchlaufen, die spitzen Klammern durch die entsprechenden Schrägstriche ersetzt, die Elemente mit Leerzeichen verbunden und die verbundenen Schrägstriche als Linie gedruckt.quelle