Las guerras santas se han librado por espacios frente a pestañas. (Y, por supuesto, los espacios, siendo objetivamente superiores, ganaron). Alex A.
S ome PEO p le todavía se niegan a un ccept que WHI c h es Cl e arly es UPREME. Acaba de recibir un archivo mediante el incor re ct, b anuncio, y inf e forma rior del WHI t Espace, y ahora t que le cont e NTS del archivo de un r e contaminada y arruinado.
Usted decide que también podría mostrarle a la persona que le envió el archivo lo equivocada que está, violentamente.
Descripción
Como sugiere el título, su desafío es tomar un archivo que contenga una o más pestañas:
this is an evil tab onoes
y los destroza despiadadamente:
this is an evil tab
o
n
o
e
s
Tenga en cuenta que el software Stack Exchange convierte las pestañas literales en cuatro espacios (porque es correcto), por lo que las pestañas dentro de esta publicación se mostrarán como cuatro espacios. La entrada a su programa, sin embargo, contendrá pestañas reales.
Reto
La solución debe tomar una sola cadena como entrada, que puede contener ASCII imprimible, nuevas líneas y pestañas. Siempre habrá al menos una sola pestaña en la entrada.
El resultado debe ser la misma cadena, con las siguientes reglas aplicadas:
Inicie el cursor en las coordenadas (0,0) y con una dirección hacia la derecha. Las coordenadas son (columna, fila), indexadas a cero, y la dirección es en qué dirección debe mover el cursor después de imprimir un carácter.
Para cada carácter en la cadena:
Si es una nueva línea, muévase a las coordenadas (0, n), donde n es el número de nuevas líneas en la cadena hasta el momento (incluida esta), y restablezca la dirección a la derecha.
Si se trata de una pestaña, genera dos espacios, gira la dirección del cursor 90 grados en el sentido de las agujas del reloj y genera dos espacios más, efectivamente "dividiendo" la pestaña por la mitad. Aquí hay un ejemplo visual, donde una pestaña se representa como
--->
y espacios como·
:foo--->bar--->baz
se convierte
foo··· · b a r · · zab··
De lo contrario, simplemente muestre el carácter en el cursor y mueva el cursor un paso en la dirección actual.
Como está leyendo la cadena de principio a fin, es posible que tenga que escribir "encima" de los caracteres existentes, esto está bien. Por ejemplo, la entrada
foo--->bar
spaces are superior
debería dar como resultado una salida de
foo
b
spaces are superior
r
Puede elegir si las "pestañas rotas" deberían sobrescribir otros caracteres; la intención original era que no lo hicieran, pero la especificación era ambigua, por lo que esta es su decisión.
Además, después de aplicar estas reglas, también puede
agregue o elimine tantos espacios finales como desee.
agregue un máximo de una nueva línea final.
La entrada nunca contendrá espacios finales; nunca contendrá nuevas líneas iniciales o finales. También puede suponer siempre que nunca necesitará escribir en una columna o fila inferior a 0 (es decir, fuera de la pantalla).
Caso de prueba
Las pestañas en este caso de prueba se representan como --->
porque, de lo contrario, SE las engulle.
Entrada:
Test case. Here's a tab--->there's a tab--->everywhere a tab--->tab--->this is some more text
blah
blah
blah blah blah blah blah blah--->blaah--->blaah--->blah--->blaaaaah--->blah--->blah--->blah--->blah--->blah
Salida:
Test case. Here's a tab
blah
blah t
blah blah blah blah blah blah
blaablah
r b
e l b
h 'h a l
a sa a a
l l h h
this is some mobe tbxt
haalhalb
b a
a b
t
bat a erehwyreve
Animación de lujo:
Reglas
- Este es el código de golf , por lo que el código más corto en bytes ganará.
(0,0)
¿quiere decir que necesitamos limpiar la consola primero, o simplemente quiere decir con eso la posición predeterminada del cursor?