Учитывая прямоугольную матрицу высот, нарисуйте ее контуры.
задача
Два элемента 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]]
_| |_
_| _ _ _ _ _ |_
_| |_
| _ _ _ |
| | | |
| | | |
| |_ _ _| |
|_ _|
_ |_ _ _ _ _| _
|_ _|
| |