Jako święto starego, dobrego Notatnika , będziemy traktować zwroty karetki i wiadomości liniowe jako to, co pierwotnie mieli na myśli, a nie to, z czego są (ab-) obecnie używane.
Biorąc pod uwagę ciąg znaków składający się z drukowalnych znaków ASCII oraz linii (␊; LF; esc \n
; hex 0A; dec 10) i zwrotów karetki (␍; CR; esc \r
; hex 0D; dec 13), spraw, aby Try It Online pokazał, w jaki sposób znaki do wydruku zostałby umieszczony, gdyby wydrukowano go na drukarce, która dosłownie przyjmuje te dwa znaki kontrolne:
- po przesunięciu linii kontynuuj drukowanie o jedną linię dalej w dół
- po powrocie karetki kontynuuj drukowanie od lewej krawędzi
- wiele kolejnych zwrotów karetki zachowuje się jak pojedynczy powrót karetki
Ze względu na to, że nowoczesne urządzenia mają problemy z przesuwaniem , jeden lub więcej powrotów karetki, z wyjątkiem początku wejścia, nigdy nie nastąpi bez przynajmniej jednego poprzedzającego i / lub następującego po linii przesuwu. Jednak dwa przebiegi powrotów karetki mogą być oddzielone pojedynczym wierszem.
Dopuszczalna jest dowolna ilość dodatkowej białej spacji, zarówno po prawej stronie dowolnych linii, jak i pod całym tekstem, o ile zachowana jest przynajmniej ilość białej spacji podana na wejściu.
Przykłady (używanie \n
i \r
do podawania wiersza i powrotu karetki)
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
(zwróć uwagę na spacje końcowe)
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
ćwiczenia ullamco laboris nisi ut aliquip ex ea commodo konsekwencji.
źródło
stty -onlcr;cat
.Odpowiedzi:
Węgiel drzewny , 10 bajtów
Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:
Wyłącz prawe wypełnienie.
Pętla nad wejściem.
Wydrukuj bieżący znak. To automatycznie obsługuje
\n
(co węgiel traktuje jak\v
w tym kontekście), ale węgiel przekłada się\r
na\r\n
, więc ...... sprawdź, czy
\r
...... a jeśli tak, to cofnij się o linię.
źródło
l
flagi z linku TIO?Ruby ,
2417 bajtówWypróbuj online!
Nie działa na TIO, ale działa na konsoli Linux.
źródło
tr "
Myślę, że możesz upuścić przestrzeń między .\n
s,\v
gdy jest uruchamiany w konsoli Linux.Java 10,
211207206 bajtówWypróbuj online.
Wyjaśnienie:
Stara odpowiedź przed wyzwaniem została zmieniona
151148 bajtów :Wyjaśnienie:
Nie działa w TIO, działa w wierszu polecenia systemu Windows:
źródło
JavaScript (Node.js) , 85 bajtów
Wypróbuj online!
źródło
Python 2 ,
150128122104103 bajtówWypróbuj online!
Zapisano:
źródło
l,n,i=[l,l+c,l+' '*i*n+c,n,1,0,0,i,i+1]['\r\n'.find(c)%3::3]
jest tylko nieco krótszy.C (gcc) ,
10094 bajtówZakłada kodowanie ASCII (
'\r'==13
,'\n'==10
); dopasuj do innych systemów.Wypróbuj online! (wymaga Javascript)
Wersja do odczytu
c
jest bieżącą pozycją kolumny;d
to liczba spacji, które należy wstawić przed znakiem do wydrukowania. Przyjmuje się, że oba są zerowe przy wejściu do funkcji.Program testowy
źródło
char
są tylko małymiint
, powinny być wymienne (teoretycznie). Możegcc
zrobi niejawną obsadęc,d
. Twoja funkcja powinna - bez innego kodu czyszczenia - być w stanie uruchomić się wiele razy. Dlatego najprawdopodobniej musisz dodaćc=d=0
.Python 3 ,
10194 bajtówNa podstawie odpowiedzi TFeld .
Wypróbuj online!
Nie golfił
źródło
Czysty ,
9291 bajtów-1 dzięki Laikoni!
Uwaga:
\
in\r
jest pomijane w bajtecount, ponieważ Linux CG obsługuje literały\r
i\n
s.Uwaga: System Windows wymaga CG
\n
i\r
być uciekł, więc +3 jeśli ma działać na systemie Windows.Wypróbuj online!
Częściowe zastosowanie
? :: Int [Char] -> [Char]
z 0 jako początkowym pierwszym argumentem. Zstępuje ona przez każdy znak, śledząc liczbę przemierzonych, licznik resetuje się, gdy napotka powrót karetki, a gdy napotka nowy wiersz, dodaje spacje równe liczbie znaków przemierzonych w tym punkcie.źródło
?_[]=[]
może być?_ e=e
.Haskell ,
9387 bajtówWypróbuj online!
Całkiem proste rozwiązanie. # to funkcja infiksowa, która rekurencyjnie tworzy dane wyjściowe jeden znak na raz, jednocześnie zachowując licznik pozycji znaku (n) i flagę określającą, kiedy dodać spacje po nowej linii (x).
źródło
c
, użyjl$r
zamiastc 0 0r
ic _ _ e=e
(a raczej(_#_)e=e
).