Учитывая прямоугольную матрицу высот, нарисуйте ее контуры.
задача
Два элемента x
и y
находятся на одном уровне контура, если floor(x/10) == floor(y/10)
. Например, 52
и 58
находятся на одном уровне контура, но 58
и 64
нет.
Акт рисования контуров определяется следующим образом: для каждого элемента e
замените его строкой из двух символов, выбранной следующим образом:
- первый символ -
" "
если элемент нижеe
находится на том же уровне контура, чтоe
и элемент ниже,e
и"_"
в противном случае - второй символ -
" "
если элемент справаe
находится на том же уровне контура, чтоe
или элемент справа от него,e
или"|"
нет
Элементы в строках соединяются вместе, затем строки соединяются вместе символами новой строки.
пример
Допустим, вход [[5,20],[3,6]]
, визуализируется как
5 20
3 6
Сначала посмотрим 5
. Поскольку 3
находится на том же уровне контура 5
, что и первый символ " "
. Поскольку 20
не находится на том же уровне контура 5
, что и второй символ "|"
.
Теперь мы посмотрим 20
. Поскольку 6
не находится на том же уровне контура 20
, что и первый символ "_"
. Поскольку справа нет элемента 20
, второй символ - " "
.
Теперь мы смотрим на 3
. Поскольку ниже нет элемента 3
, первый символ " "
. Поскольку 6
находится на том же уровне контура 3
, что и второй символ " "
.
Теперь мы посмотрим 6
. Поскольку ниже нет элемента 6
, первый символ " "
. Поскольку справа от элемента нет элемента 6
, второй символ" "
.
Основываясь на этих двухсимвольных строках, мы делаем замены, чтобы получить [[" |","_ "],[" "," "]]
. Объединяя их вместе, мы получаем вывод
|_
правила
- Входная матрица всегда будет прямоугольной и состоит из натуральных чисел.
- Конечные пробелы или переводы строки могут быть в любом количестве (включая 0) и не обязательно должны быть согласованы.
- Вам не нужно следовать одному и тому же алгоритму, если вы получаете одинаковые результаты.
- Ваша программа или функция может выводить строку, разделенную символом новой строки, список строк или эквивалентный текст.
- Это код-гольф , поэтому выигрывает самый короткий код в байтах.
Тестовые случаи
input
output
[[1,5,8,9],[3,11,13,8],[7,14,10,9],[4,8,7,6]]
_ _
| |
|_ _|
[[0,10,20,30,40,50,60,70,80,90],[0,0,10,10,20,20,30,30,40,40],[0,0,0,10,10,10,20,20,20,30],[0,0,0,0,10,10,10,10,20,20],[0,0,0,0,0,10,10,10,10,10],[0,0,0,0,0,0,10,10,10,10],[0,0,0,0,0,0,0,10,10,10],[0,0,0,0,0,0,0,0,10,10],[0,0,0,0,0,0,0,0,0,10],[0,0,0,0,0,0,0,0,0,0]]
|_|_|_|_|_|_|_|_|_
|_ |_ _|_ _|_ _
|_ |_ _ |_
|_ |_ _
|_
|_
|_
|_
|_
[[5,5,5,5,5,5,5,5,5,5,5],[5,10,10,10,10,10,10,10,10,10,5],[5,10,15,15,15,15,15,15,15,10,5],[5,10,15,20,20,20,20,20,15,10,5],[5,10,15,20,25,25,25,20,15,10,5],[5,10,15,20,25,30,25,20,15,10,5],[5,10,15,20,25,25,25,20,15,10,5],[5,10,15,20,20,20,20,20,15,10,5],[5,10,15,15,15,15,15,15,15,10,5],[5,10,10,10,10,10,10,10,10,10,5],[5,5,5,5,5,5,5,5,5,5,5]]
_ _ _ _ _ _ _ _ _
| |
| _ _ _ _ _ |
| | | |
| | _ | |
| | |_| | |
| | | |
| |_ _ _ _ _| |
| |
|_ _ _ _ _ _ _ _ _|
[[35,32,29,26,25,25,25,26,29,32,35],[32,28,25,22,20,20,20,22,25,28,32],[29,25,21,18,15,15,15,18,21,25,29],[26,22,18,14,11,10,11,14,18,22,26],[25,20,15,11,7,5,7,11,15,20,25],[25,20,15,10,5,0,5,10,15,20,25],[25,20,15,11,7,5,7,11,15,20,25],[26,22,18,14,11,10,11,14,18,22,26],[29,25,21,18,15,15,15,18,21,25,29],[32,28,25,22,20,20,20,22,25,28,32],[35,32,29,26,25,25,25,26,29,32,35]]
_| |_
_| _ _ _ _ _ |_
_| |_
| _ _ _ |
| | | |
| | | |
| |_ _ _| |
|_ _|
_ |_ _ _ _ _| _
|_ _|
| |