Como celebración del buen Bloc de notas antiguo , vamos a tratar los retornos de carro y los avances de línea como lo que originalmente significaban, en lugar de lo que se usan (ab-) para hoy.
Dada una cadena que consiste en avances de línea ASCII más imprimibles (␊; LF; esc \n
; hex 0A; dec 10) y retornos de carro (␍; CR; esc \r
; hex 0D; dec 13), haga que Try It Online muestre cómo los caracteres imprimibles se colocaría si se imprime en una impresora que toma esos dos caracteres de control literalmente:
- sobre un avance de línea, continúe imprimiendo una línea más abajo
- sobre un retorno de carro continúe imprimiendo desde el borde izquierdo
- múltiples retornos de carro consecutivos se comportan como un solo retorno de carro
Debido a que los dispositivos modernos tienen problemas con la sobrecarga , una ejecución de uno o más retornos de carro, excepto al comienzo de la entrada, nunca ocurrirá sin al menos un avance de línea anterior y / o siguiente. Sin embargo, dos carreras de retornos de carro pueden estar separadas por un solo avance de línea.
Cualquier cantidad de espacio en blanco adicional adicional es aceptable, tanto en el lado derecho de cualquier línea como debajo del texto completo, siempre que se mantenga al menos la cantidad de espacio en blanco dado en la entrada.
Ejemplos (uso \n
y \r
para avance de línea y retorno de carro)
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
(observe los espacios finales)
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
ejercicio ullamco laboris nisi ut aliquip ex ea commodo consequat.
fuente
stty -onlcr;cat
.Respuestas:
Carbón de leña , 10 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Explicación:
Deshabilitar el relleno derecho.
Pase sobre la entrada.
Imprime el personaje actual. Esto maneja automáticamente
\n
(que el carbón trata como\v
en este contexto) pero el carbón se traduce\r
en\r\n
, así que ...... busca un
\r
...... y si es así, retroceda una línea.
fuente
l
bandera de tu enlace TIO?Ruby ,
2417 bytesPruébalo en línea!
No funciona en TIO, pero funciona en la consola de Linux.
fuente
tr "
creo.\n
s\v
cuando se ejecuta en una consola Linux.Java 10,
211207206 bytesPruébalo en línea.
Explicación:
Respuesta anterior antes de que se cambiara el desafío
151148 bytes :Explicación:
No funciona en TIO, funciona en el símbolo del sistema de Windows:
fuente
JavaScript (Node.js) , 85 bytes
Pruébalo en línea!
fuente
Python 2 ,
150128122104103 bytesPruébalo en línea!
Salvado:
fuente
l,n,i=[l,l+c,l+' '*i*n+c,n,1,0,0,i,i+1]['\r\n'.find(c)%3::3]
es apenas más corto.C (gcc) ,
10094 bytesAsume la codificación ASCII (
'\r'==13
,'\n'==10
); ajustar para adaptarse a otros sistemas.Pruébalo en línea! (requiere Javascript)
Versión legible
c
es la posición actual de la columna;d
es el número de espacios que se deben insertar antes de un carácter imprimible. Se supone que ambos son cero al ingresar a la función.Programa de prueba
fuente
char
s son solo pequeñosint
s, deberían ser intercambiables (en teoría). Quizásgcc
haga un reparto implícitoc,d
. Su función debería, sin otro código de limpieza, poder ejecutarse varias veces. Por lo tanto, lo más probable es que necesite agregar unc=d=0
.Python 3 ,
10194 bytesBasado en la respuesta de TFeld .
Pruébalo en línea!
Sin golf
fuente
Limpio ,
9291 bytes-1 gracias a Laikoni!
Nota:
\
en\r
se omite de bytecount ya que Linux CG maneja literal\r
y\n
s.Nota: Windows CG requiere
\n
y\r
debe escaparse, por lo que +3 si tiene que ejecutarse en Windows.Pruébalo en línea!
Una aplicación parcial de
? :: Int [Char] -> [Char]
con 0 como primer argumento inicial. Esto desciende a través de cada personaje haciendo un seguimiento de cuántos recorridos, el recuento se restablece cuando encuentra un retorno de carro y cuando encuentra una nueva línea, agrega espacios iguales al número de caracteres recorridos en ese punto.fuente
?_[]=[]
puede ser?_ e=e
.Haskell ,
9387 bytesPruébalo en línea!
Solución bastante sencilla. # es una función infija que crea de forma recursiva la salida de un carácter a la vez mientras mantiene un contador de posición de caracteres (n) y marca cuándo agregar espacios después de una nueva línea (x).
fuente
c
, usar enl$r
lugar dec 0 0r
yc _ _ e=e
(o más bien(_#_)e=e
).