Посмотрите на эту диаграмму искусства ascii различных коробок:
+--------------------------------------------------------------+
| |
| +-------------------------------+ +-------+ |
| | | | | |
| | | | | |
| | +----------------+ | | | |
| | | | | +-------+ |
| | | | | |
| | | | | +-------+ |
| | +----------------+ | | | |
| | | | | |
| | | | | |
| +-------------------------------+ +-------+ |
| |
+--------------------------------------------------------------+
Каждое поле состоит из символов для вертикальных частей ( |
), тире для горизонтальных частей ( -
) и плюсов для углов ( +
).
Диаграмма также показывает коробки внутри других блоков. Мы назовем количество ящиков, которое содержится в ящике в слое этого ящика . Вот диаграмма снова с аннотированным слоем каждого блока:
+--------------------------------------------------------------+
| |
| +-------------------------------+ +-------+ |
| | | | | |
| | | | 1 | |
| | +----------------+ | | | |
| | | | | 0 +-------+ |
| | | 2 | 1 | |
| | | | | +-------+ |
| | +----------------+ | | | |
| | | | 1 | |
| | | | | |
| +-------------------------------+ +-------+ |
| |
+--------------------------------------------------------------+
Ваша программа примет в качестве входных данных диаграмму, похожую на диаграмму сверху. В качестве вывода ваша программа должна вывести блок-диаграмму с:
- Рамка на слое 0 должна быть заполнена символом
#
(примечание: на слое 0 будет только один бокс); - Коробки на слое 1 должны быть заполнены символом
=
; - Коробки на слое 2 должны быть заполнены символом
-
; - Коробки на слое 3 должны быть заполнены символом
.
; - Ящики на слое 4 и выше не должны быть заполнены.
Вот как должен выглядеть вывод входных данных примера:
+--------------------------------------------------------------+
|##############################################################|
|###+-------------------------------+##########+-------+#######|
|###|===============================|##########|=======|#######|
|###|===============================|##########|=======|#######|
|###|=====+----------------+========|##########|=======|#######|
|###|=====|----------------|========|##########+-------+#######|
|###|=====|----------------|========|##########################|
|###|=====|----------------|========|##########+-------+#######|
|###|=====+----------------+========|##########|=======|#######|
|###|===============================|##########|=======|#######|
|###|===============================|##########|=======|#######|
|###+-------------------------------+##########+-------+#######|
|##############################################################|
+--------------------------------------------------------------+
Вот еще один вход и выход, показывающий слои 3, 4 и 5. Обратите внимание на горизонтальные линии вверху, которые очень близко друг к другу. В этих случаях недостаточно места, чтобы заполнить любые символы там.
+-----------------------------------------------------------------------+
| +--------------------------------------------------------------+ |
| | +-----------------------------------------------------+ | |
| | | +-----------------------------------------+ | | |
| | | | +---------------------------+ | | | |
| | | | | +-------------+ | | | | |
| | | | | | | | | | | |
| | | | | +-------------+ | | | | |
| | | | +---------------------------+ | | | |
| | | | | | | |
| | | +-----------------------------------------+ | | |
| | | | | |
| | | | | |
| | +-----------------------------------------------------+ | |
| | | |
| +--------------------------------------------------------------+ |
| |
| |
| |
+-----------------------------------------------------------------------+
Выход:
+-----------------------------------------------------------------------+
|#####+--------------------------------------------------------------+##|
|#####|======+-----------------------------------------------------+=|##|
|#####|======|---------+-----------------------------------------+-|=|##|
|#####|======|---------|...........+---------------------------+.|-|=|##|
|#####|======|---------|...........| +-------------+ |.|-|=|##|
|#####|======|---------|...........| | | |.|-|=|##|
|#####|======|---------|...........| +-------------+ |.|-|=|##|
|#####|======|---------|...........+---------------------------+.|-|=|##|
|#####|======|---------|.........................................|-|=|##|
|#####|======|---------+-----------------------------------------+-|=|##|
|#####|======|-----------------------------------------------------|=|##|
|#####|======|-----------------------------------------------------|=|##|
|#####|======+-----------------------------------------------------+=|##|
|#####|==============================================================|##|
|#####+--------------------------------------------------------------+##|
|#######################################################################|
|#######################################################################|
|#######################################################################|
+-----------------------------------------------------------------------+
Еще один вход, на этот раз с вертикальными линиями, также близко друг к другу:
+-------------+
|+-----------+|
|| ||
|| ||
|| ||
|+-----------+|
+-------------+
Выход:
+-------------+
|+-----------+|
||===========||
||===========||
||===========||
|+-----------+|
+-------------+
Дополнительные замечания
- Вокруг самой внешней коробки могут быть пробелы.
- Коробки не могут иметь внутреннюю ширину или высоту 0 (поэтому они всегда будут иметь некоторое пространство внутри них)
- Коробки на одном слое могут касаться друг друга.
import java.util.Scanner
наimport java.util.*
CJam,
11411110810410310298 байтПопробуйте онлайн в интерпретаторе CJam .
Как это работает
источник
JavaScript ( ES6 ) 156
Запустите фрагмент в Firefox для проверки
источник
CJam,
7674 байтаПопробуйте онлайн в интерпретаторе CJam .
Как это работает
источник
APL (Dyalog Unicode) , 50 байтов SBCS
Попробуйте онлайн!
s←' #=-.+|'
назначить строку переменнойs
⎕
оцениваемый ввод, это должна быть символьная матрица⎕⍳⍨s
заменить каждый элемент⎕
с его индексом вs
a←
назначить наa
5=
возвращает булеву матрицу, в которой+
-es находятсяa
(s[5]
есть'+'
)(⊢ׯ1*+⍀++\)
это поезд из функций:+\
матрица частичных сумм по строкам+
плюс+⍀
матрица частичных сумм по столбцам¯1*
отрицательный в степени - превратить шансы в ¯1 и четные в 1⊢×
умножить на аргумент поезда - обнулить все, кроме углов коробки+⍀+\
частичные суммы по столбцам частичные суммы по строкам5⌊
минимум этого и 55|
по модулю 5a,¨
пара элементовa
и текущей матрицы0~¨⍨
удалить 0 из пар⊃¨
сначала каждый из того, что осталосьs[ ]
использовать каждый элемент в качестве индекса вs
источник
↑⍞⍞...⍞
вычисляется справа налево. Для первого примера это не имело значения, и я забыл упомянуть об этом..
s, где он не должен> <> ,
118 11587 байтПопробуйте онлайн!
Если один из символов не был,Эх, все равно стало-
то это могло бы быть на 6 байт короче.немногоменьшеКак это работает:
источник
C (GCC) ,
190179 байт-11 байт благодаря потолку
Сбой, если sizeof (int)> 9, но тогда вы можете утешиться тем фактом, что ваш компьютер из будущего.
Попробуйте онлайн!
источник