No desea pagar dinero por el costoso programa arquitectónico, por lo que decide rodar el suyo. Decide usar ASCII para diseñar sus edificios. Su programa tomará una sola cadena formateada de una manera específica, y el programa generará el edificio.
Entrada
La entrada consiste en una sola línea de caracteres. Se puede suponer que solo contiene las letras a-j
, los números 1-9
y los símbolos -
y +
.
Descripción de salida
Para cada letra a-j
, el programa generará una línea vertical de la siguiente manera. Llamaremos a esto una columna.
.
..
...
****
*****
******
-------
--------
+++++++++
++++++++++
abcdefghij
Por ejemplo, la entrada abcdefgfedefghgfedc
generaría:
.
* ***
*** *****
***** *******
---------------
-----------------
++++++++++++++++++
+++++++++++++++++++
Una letra puede tener como prefijo un número entero positivo n
, que agregará n
caracteres de espacio en blanco debajo de la columna. Llamaremos a esto un desplazamiento. Por ejemplo, usando S
para anotar un espacio en blanco, la entrada 3b2b3b
generaría:
+ +
+++
S+S
SSS
SSS
Una letra también puede tener como prefijo un número entero negativo-m
, que eliminará los caracteres de la columna que m
no sean espacios en blanco (no los reemplace con espacios en blanco, elimínelos por completo). Llamaremos a esto una rebanada. Por ejemplo, la entrada -1j-2j-3j-4j-5j-6j-7j-8j
generaría:
.
..
...
*...
**...
***...
-***...
--***...
+--***..
Se puede aplicar un desplazamiento y un corte a la misma línea, pero el desplazamiento debe ir primero. En otras palabras, la letra puede tener el prefijo n-m
, donde n
es el tamaño del desplazamiento y m
el tamaño de la porción. Por ejemplo, usando S
para anotar un espacio en blanco, la entrada '2-4j' generaría:
.
.
.
*
*
*
S
S
Por último, el +
operador utilizado entre dos columnas indica que deben apilarse una encima de la otra en la misma columna en lugar de en columnas separadas. Por ejemplo, la entrada '2-4ja' sale:
.
.
.
*
*
*
S
S+
Mientras que las 2-4j+a
salidas de entrada :
+
.
.
.
*
*
*
S
S
Aquí hay una entrada de muestra:
abiehef+ehfhabc
Y la salida resultante:
*
-
. -
. . +. .
* * +* *
* * ****
********
--------
-------- -
+++++++++ ++
+++++++++++++
Parece una antigua torre de castillo destruida de algún tipo.
Aquí hay otra entrada de muestra:
6b5b+a6b1-2d+3-4f1-2d+-2c+2-4f+1-2d+-2c2-2d+1-4g+1-2c+b+-2c+-4e2-7j+-4g+d+-2c+-4f2-7j+-5h+b+-2c+a+-3f2-7j+-7i+-4e+b+b+a+-4f2-7i+a+-7h+-4f+b+b+a+-4f2-7j+-7h+-4f+a+-7h+a+-7i+-4f2-7j+-7i+-6h+a+-7i+b+-4e3-7i+a+-7h+-4e+a+-7h+b+1-7h3-7j+1-4f+-7h+b+-4f+a3-7j+2-4f+a+-4f+b3-2d+-2d+3-4g+b3-2d+-2d+-2c
Y la salida resultante:
****** +++
******+.*++
---++.+ ***
-+-+++..++**
-+--+++.+++*
--++++.+..*
+++++.+**
+++****.****** -
+++*****.**.. --
+ ***....+..--
...+.....--
--.........--
---......
--
(Se suponía que era Mario, pero no resultó muy bueno ...)
Si la especificación aún no está clara, tengo una implementación sin golf escrita en Python 2.7. Puede ejecutarlo y experimentar para tener una idea de cómo funciona la especificación. También puede optar por reírse de mis habilidades de programación.
Este es el código de golf, por lo que gana la entrada más corta. Haga preguntas en los comentarios si no está claro.
a+a+a+a+a
generaría cinco signos más uno encima del otro.