Как праздник старого доброго Блокнота , мы будем рассматривать возврат каретки и перевод строки как то, что они изначально имели в виду, а не как они (ab-) используются сегодня.
Дана строка , состоящая из печати ASCII плюс каналы линии (␊; LF; ESC \n
; шестигранной 0A; разл 10) и возврат каретки (␍; CR; ESC \r
; шестигранный 0D; реш 13), причина попробовать Интернет , чтобы показать , как печатные символы будет расположен, если напечатано на принтере, который принимает эти два управляющих символа буквально:
- после перевода строки продолжайте печатать еще одну строку вниз
- при возврате каретки продолжить печать с левого края
- несколько последовательных возвратов каретки ведут себя как одиночный возврат каретки
Из-за того, что современные устройства имеют проблемы с перегрузкой , выполнение одного или нескольких возвратов каретки, за исключением начала ввода, никогда не произойдет без хотя бы одного предшествующего и / или последующего перевода строки. Однако два ряда возвратов каретки могут быть разделены одним переводом строки.
Любое количество дополнительных конечных пробелов допустимо как с правой стороны любых строк, так и под всем текстом, при условии, что сохраняется хотя бы количество пробелов, указанное во входных данных.
Примеры (использование \n
и \r
для перевода строки и возврата каретки)
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
(обратите внимание на пробелы)
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
упражнение Ullamco Labouris Ниси ут аликип экс коммандос.
stty -onlcr;cat
.Ответы:
Древесный уголь , 10 байт
Попробуйте онлайн! Ссылка на подробную версию кода. Объяснение:
Отключить правый отступ.
Цикл по входу.
Распечатать текущий символ. Это автоматически обрабатывает
\n
(что уголь рассматривает как\v
в этом контексте), но уголь переводится\r
в\r\n
, так что ...... проверить на
\r
...... и если так, то вернитесь на линию вверх.
источник
l
флаг из вашей ссылки TIO?Рубин ,
2417 байтПопробуйте онлайн!
Он не работает на TIO, но работает на консоли Linux.
источник
tr "
я думаю.\n
S в\v
при запуске в консоли Linux.Java 10,
211207206 байтПопробуйте онлайн.
Объяснение:
Старый ответ перед вызовом был изменен на
151148 байт :Объяснение:
Не работает в TIO, работает в командной строке Windows:
источник
JavaScript (Node.js) , 85 байт
Попробуйте онлайн!
источник
Python 2 ,
150128122104103 байтаПопробуйте онлайн!
Добавлено:
источник
l,n,i=[l,l+c,l+' '*i*n+c,n,1,0,0,i,i+1]['\r\n'.find(c)%3::3]
чуть короче.C (gcc) ,
10094 байтаПредполагает кодирование ASCII (
'\r'==13
,'\n'==10
); настроить в соответствии с другими системами.Попробуйте онлайн! (требуется Javascript)
Читаемая версия
c
текущая позиция столбца;d
количество пробелов, которые должны быть вставлены перед печатным символом. Предполагается, что оба значения равны нулю при входе в функцию.Тестовая программа
источник
char
s просто маленькиеint
, они должны быть взаимозаменяемыми (в теории). Может быть,gcc
будет делать неявное приведениеc,d
. Ваша функция должна - без другого кода очистки - запускаться несколько раз. Таким образом, вам, скорее всего, нужно добавитьc=d=0
.Python 3 ,
10194 байтаНа основании ответа TFeld .
Попробуйте онлайн!
Ungolfed
источник
Чисто ,
9291 байт-1 спасибо Лайкони!
Примечание:
\
in\r
исключен из bytecount, так как Linux CG обрабатывает литерал\r
и\n
s.Примечание: Windows CG требует
\n
и\r
должен быть экранирован, так что +3, если он должен работать в Windows.Попробуйте онлайн!
Частичное применение
? :: Int [Char] -> [Char]
с 0 в качестве начального первого аргумента. Это происходит по каждому символу, отслеживая, сколько пройдено, счетчик сбрасывается, когда он встречает возврат каретки, и когда он встречает символ новой строки, он добавляет пробелы, равные количеству символов, пройденных в этой точке.источник
?_[]=[]
может быть?_ e=e
.Haskell ,
9387 байтовПопробуйте онлайн!
Довольно простое решение. # - это инфиксная функция, которая рекурсивно создает вывод по одному символу за раз, сохраняя при этом счетчик положения символа (n) и флаг, когда следует добавлять пробелы после новой строки (x).
источник
c
, использоватьl$r
вместоc 0 0r
иc _ _ e=e
(или скорее(_#_)e=e
).