Zur Feier des guten alten Notizblocks werden wir Wagenrückläufe und Zeilenvorschübe als das behandeln, was sie ursprünglich bedeuteten, und nicht als das, wofür sie heute (ab-) verwendet werden.
Einen String gegeben von druckbaren ASCII und Zeilenvorschübe aus (␊; LF; esc \n
; hex 0A, 10. Dezember) und Wagenrücklauf (␍; CR; esc \r
; hex 0D, 13. Dezember), Ursache Online ausprobieren , wie die druckbare Zeichen zu zeigen , würde positioniert, wenn auf einem Drucker gedruckt würde, der diese beiden Steuerzeichen wörtlich nimmt:
- Drucken Sie nach einem Zeilenvorschub eine Zeile weiter nach unten
- Bei einem Wagenrücklauf fahren Sie mit dem Drucken am linken Rand fort
- Mehrere aufeinanderfolgende Wagenrückläufe verhalten sich wie ein einzelner Wagenrücklauf
Aufgrund moderner Geräte, die Probleme mit dem Überschlagen haben , wird ein Durchlauf von einem oder mehreren Wagenrückläufen, mit Ausnahme von zu Beginn der Eingabe, niemals ohne mindestens einen vorhergehenden und / oder folgenden Zeilenvorschub stattfinden. Zwei Zeilenumbrüche können jedoch durch einen einzelnen Zeilenvorschub getrennt werden.
Jeder zusätzliche Leerraum am Ende der Zeile und unterhalb des gesamten Texts ist zulässig, sofern mindestens der in der Eingabe angegebene Leerraum beibehalten wird.
Beispiele (mit \n
und \r
für Zeilenvorschub und Wagenrücklauf)
Lorem ipsum dolor sit amet,
Lorem ipsum dolor sit amet,
consectetur adipiscing\nelit, sed
consectetur adipiscing
elit, sed
do eiusmod\r\ntempor incididunt\n\n ut labore
do eiusmod
tempor incididunt
ut labore
et dolore\n\rmagna \r\r\naliqua. Ut
(Beachten Sie die nachstehenden Leerzeichen)
et dolore
magna
aliqua. Ut
\nenim ad minim veniam,\n\r quis nostrud
enim ad minim veniam, quis nostrud
\rexercitation\r\n\rullamco laboris\n\r\nnisi ut aliquip ex\n\n\rea commodo consequat.\n\n
Übung ullamco laboris nisi ut aliquip ex ea commodo consequat.
quelle
stty -onlcr;cat
.Antworten:
Kohle , 10 Bytes
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Erläuterung:
Deaktivieren Sie die rechte Polsterung.
Schleife über den Eingang.
Druckt das aktuelle Zeichen. Dies behandelt automatisch
\n
(was Charcoal wie\v
in diesem Kontext behandelt), aber Charcoal übersetzt\r
in\r\n
, also ...... nach einem
\r
... suchen... und wenn ja, dann gehe eine Zeile zurück.
quelle
l
Flagge nicht von Ihrem TIO-Link entfernen ?Ruby ,
2417 BytesProbieren Sie es online!
Es funktioniert nicht mit TIO, aber mit der Linux-Konsole.
quelle
tr "
denke ich.\n
s geändert werden,\v
wenn sie in einer Linux-Konsole ausgeführt werden.Java 10,
211207206 BytesProbieren Sie es online aus.
Erläuterung:
Alte Antwort vor der Challenge wurde geändert
151148 Bytes :Erläuterung:
Funktioniert nicht mit TIO, funktioniert mit Windows-Eingabeaufforderung:
quelle
JavaScript (Node.js) , 85 Byte
Probieren Sie es online!
quelle
Python 2 ,
150128122104103 BytesProbieren Sie es online!
Gerettet:
quelle
l,n,i=[l,l+c,l+' '*i*n+c,n,1,0,0,i,i+1]['\r\n'.find(c)%3::3]
nur knapp kürzer zu sein.C (GCC) ,
10094 BytesÜbernimmt die ASCII-Codierung (
'\r'==13
,'\n'==10
); an andere Systeme anpassen.Probieren Sie es online! (erfordert Javascript)
Lesbare Version
c
ist die aktuelle Spaltenposition;d
ist die Anzahl der Leerzeichen, die vor einem druckbaren Zeichen eingefügt werden müssen. Beide werden beim Eintritt in die Funktion als Null angenommen.Testprogramm
quelle
char
s sind nur kleineint
s, sie sollten (theoretisch) austauschbar sein. Vielleichtgcc
wird eine implizite Besetzungc,d
. Ihre Funktion sollte - ohne anderen Bereinigungscode - mehrere Male ausgeführt werden können. Daher müssen Sie höchstwahrscheinlich eine hinzufügenc=d=0
.Python 3 ,
10194 BytesBasierend auf der Antwort von TFeld .
Probieren Sie es online!
Ungolfed
quelle
Sauber ,
9291 Bytes-1 Danke an Laikoni!
Hinweis:
\
in\r
wird von bytecount weggelassen, da Linux CG mit Literalen\r
und\n
s umgeht .Hinweis: Windows CG erfordert
\n
und\r
muss maskiert werden, also +3, wenn es unter Windows ausgeführt werden muss.Probieren Sie es online!
Eine teilweise Anwendung von
? :: Int [Char] -> [Char]
mit 0 als erstes Argument. Dabei wird für jedes Zeichen nachverfolgt, wie viele Zeichen durchlaufen wurden. Der Zähler wird zurückgesetzt, wenn ein Zeilenumbruch auftritt, und wenn eine neue Zeile angezeigt wird, werden Leerzeichen hinzugefügt, die der Anzahl der an diesem Punkt durchlaufenden Zeichen entsprechen.quelle
?_[]=[]
kann sein?_ e=e
.Haskell ,
9387 BytesProbieren Sie es online!
Ziemlich einfache Lösung. # ist eine Infix-Funktion, die rekursiv die Ausgabe eines Zeichens nach dem anderen erstellt, während ein Zeichenpositionszähler (n) und ein Flag für das Hinzufügen von Leerzeichen nach einer neuen Zeile (x) beibehalten wird.
quelle
c
,l$r
anstelle vonc 0 0r
undc _ _ e=e
(oder vielmehr(_#_)e=e
) eine Infix-Funktion definieren .