Dada una matriz rectangular de elevaciones, dibuja sus contornos.
Tarea
Dos elementos x
y y
están en el mismo nivel de contorno si floor(x/10) == floor(y/10)
. Por ejemplo, 52
y 58
están en el mismo nivel de contorno, pero 58
y 64
no lo están.
El acto de dibujar contornos se define de la siguiente manera: para cada elemento e
, reemplácelo con una cadena de dos caracteres elegida de la siguiente manera:
- el primer carácter es
" "
si el elemento a continuacióne
está en el mismo nivel de contorno quee
o si no hay ningún elemento a continuacióne
y de lo"_"
contrario - el segundo carácter es
" "
si el elemento a la derechae
está en el mismo nivel de contorno quee
o no hay ningún elemento a la derechae
y"|"
otra cosa
Los elementos dentro de las filas se unen, luego las filas se unen con nuevas líneas.
Ejemplo
Digamos que la entrada es [[5,20],[3,6]]
, visualizada como
5 20
3 6
Primero miramos 5
. Dado que 3
está en el mismo nivel de contorno que 5
, el primer personaje está " "
. Como 20
no está en el mismo nivel de contorno que 5
, el segundo carácter sí "|"
.
Ahora lo miramos 20
. Como 6
no está en el mismo nivel de contorno que 20
, el primer carácter sí "_"
. Como no hay ningún elemento a la derecha de 20
, el segundo carácter es " "
.
Ahora lo miramos 3
. Como no hay ningún elemento debajo 3
, el primer carácter es " "
. Como 6
está en el mismo nivel de contorno que 3
, el segundo personaje está " "
.
Ahora lo miramos 6
. Como no hay ningún elemento debajo 6
, el primer carácter es " "
. Como no hay ningún elemento a la derecha de 6
, el segundo carácter es " "
.
En base a estas cadenas de dos caracteres, hacemos reemplazos para obtener [[" |","_ "],[" "," "]]
. Al unirlos, obtenemos una salida de
|_
Reglas
- La matriz de entrada siempre será rectangular y estará compuesta de enteros positivos.
- Los espacios finales o las nuevas líneas pueden ser de cualquier cantidad (incluido 0) y no tienen que ser consistentes de ninguna manera.
- No tiene que seguir el mismo algoritmo siempre que produzca los mismos resultados.
- Su programa o función puede generar una cadena separada por una nueva línea, una lista de cadenas o equivalente.
- Este es el código de golf , por lo que gana el código más corto en bytes.
Casos de prueba
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]]
_| |_
_| _ _ _ _ _ |_
_| |_
| _ _ _ |
| | | |
| | | |
| |_ _ _| |
|_ _|
_ |_ _ _ _ _| _
|_ _|
| |