Вы не хотите платить деньги за дорогую архитектурную программу, поэтому вы решаете сделать свою собственную. Вы решили использовать 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
бы пять знаков плюс друг на друга.