Non vuoi pagare per il costoso programma di architettura, quindi decidi di fare il tuo. Decidi di utilizzare ASCII per progettare i tuoi edifici. Il tuo programma prenderà una singola stringa formattata in un modo specifico e il programma produrrà l'edificio.
Ingresso
L'input è costituito da una singola riga di caratteri. Si può presumere che contenga solo le lettere a-j, i numeri 1-9, i simboli -e +.
Descrizione dell'uscita
Per ogni lettera a-j, il programma emetterà una linea verticale come segue. Chiameremo questo una colonna.
.
..
...
****
*****
******
-------
--------
+++++++++
++++++++++
abcdefghij
Ad esempio, l'input abcdefgfedefghgfedcprodurrebbe:
.
* ***
*** *****
***** *******
---------------
-----------------
++++++++++++++++++
+++++++++++++++++++
Una lettera può essere preceduta da un numero intero positivo n, che aggiungerà ncaratteri bianchi sotto la colonna. Chiameremo questo un offset. Ad esempio, usando Sper annotare uno spazio bianco, l'input 3b2b3bprodurrebbe:
+ +
+++
S+S
SSS
SSS
Una lettera può anche essere preceduta da un numero intero negativo-m , che rimuoverà i caratteri inferiori m non bianchi della colonna (non sostituirli con spazi bianchi, rimuoverli completamente). Lo chiameremo una fetta. Ad esempio, l'input -1j-2j-3j-4j-5j-6j-7j-8jprodurrebbe:
.
..
...
*...
**...
***...
-***...
--***...
+--***..
Un offset e una sezione possono essere applicati alla stessa linea, ma l'offset deve essere eseguito per primo. In altre parole, è possibile aggiungere il prefisso alla lettera n-m, dove nè la dimensione dell'offset ed mè la dimensione della sezione. Ad esempio, usando Sper annotare uno spazio bianco, l'input '2-4j' produrrebbe:
.
.
.
*
*
*
S
S
Infine, l' +operatore utilizzato tra due colonne indica che devono essere impilati uno sopra l'altro nella stessa colonna anziché in colonne separate. Ad esempio, l'ingresso `2-4ja 'genera:
.
.
.
*
*
*
S
S+
Considerando che le 2-4j+auscite input :
+
.
.
.
*
*
*
S
S
Ecco un esempio di input:
abiehef+ehfhabc
E l'output risultante:
*
-
. -
. . +. .
* * +* *
* * ****
********
--------
-------- -
+++++++++ ++
+++++++++++++
Sembra una vecchia torre del castello distrutta di qualche tipo.
Ecco un altro input di esempio:
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
E l'output risultante:
****** +++
******+.*++
---++.+ ***
-+-+++..++**
-+--+++.+++*
--++++.+..*
+++++.+**
+++****.****** -
+++*****.**.. --
+ ***....+..--
...+.....--
--.........--
---......
--
(Doveva essere Mario ma non è andato molto bene ...)
Se la specifica non è ancora chiara, ho un'implementazione non golfata scritta in Python 2.7. Puoi eseguirlo e sperimentare per avere un'idea di come funzionano le specifiche. Puoi anche scegliere di ridere delle mie capacità di programmazione.
Questo è code-golf, quindi vince l'ingresso più breve. Poni domande nei commenti se non è chiaro.
a+a+a+a+agenererebbero cinque segni più uno sopra l'altro.
