Ви не хочете платити гроші за дорогу архітектурну програму, тому ви вирішили зробити свою власну. Ви вирішили використовувати ASCII для проектування будинків. Ваша програма буде приймати одну строку, відформатовану певним чином, і програма виведе будівлю.
Вхідні дані
Введення складається з одного рядка символів. Можна вважати, що він містить лише букви a-j
, цифри 1-9
та символи -
та +
.
Опис виходу
Для кожної літери a-j
програма виводить вертикальну лінію наступним чином. Ми будемо називати це стовпцем.
.
..
...
****
*****
******
-------
--------
+++++++++
++++++++++
abcdefghij
Наприклад, вхід abcdefgfedefghgfedc
видасть:
.
* ***
*** *****
***** *******
---------------
-----------------
++++++++++++++++++
+++++++++++++++++++
Лист може бути префіксом з натуральним числом n
, яке додасть n
символи пробілу під стовпцем. Ми будемо називати це зміщенням. Наприклад, використовуючи S
для позначення пробілу пробіл, вхід видасть 3b2b3b
:
+ +
+++
S+S
SSS
SSS
Лист може також бути префіксом з негативним цілим числом -m
, що видалить нижні m
непробільні символи стовпця (не замінить їх на пробіл, видаліть їх повністю). Ми назвемо це шматочком. Наприклад, вхід -1j-2j-3j-4j-5j-6j-7j-8j
видасть:
.
..
...
*...
**...
***...
-***...
--***...
+--***..
Зсув та зріз можна застосувати до тієї ж лінії, але зміщення має бути першим. Іншими словами, лист може бути з префіксом n-m
, де n
розмір зсуву і m
розмір зрізу. Наприклад, використовуючи S
для позначення пробілу пробіл, вхід '2-4j' виводить:
.
.
.
*
*
*
S
S
Нарешті, +
оператор, що використовується між двома стовпцями, вказує, що вони повинні укладатися один над одним у один і той же стовпець, а не в окремі стовпці. Наприклад, вихідний сигнал 2-4ja:
.
.
.
*
*
*
S
S+
Тоді як вхідні 2-4j+a
виходи:
+
.
.
.
*
*
*
S
S
Ось зразок введення:
abiehef+ehfhabc
І отриманий результат:
*
-
. -
. . +. .
* * +* *
* * ****
********
--------
-------- -
+++++++++ ++
+++++++++++++
Схоже на стару зруйновану башту замків.
Ось ще один зразок введення:
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
І отриманий результат:
****** +++
******+.*++
---++.+ ***
-+-+++..++**
-+--+++.+++*
--++++.+..*
+++++.+**
+++****.****** -
+++*****.**.. --
+ ***....+..--
...+.....--
--.........--
---......
--
(Це повинен був бути Маріо, але не вийшло дуже добре ...)
Якщо специфікація все ще не зрозуміла, у мене є непрограмна реалізація, написана в Python 2.7. Ви можете запустити його та експериментувати, щоб зрозуміти, як працює специфікація. Ви також можете сміятися з моїх навичок програмування.
Це кодовий гольф, тому виграє найкоротший запис. Задавайте питання в коментарях, якщо незрозуміло.
a+a+a+a+a
, виводиться п'ять знаків плюс один на одного.