Dada una matriz rectangular de elevaciones, dibuja sus contornos.
Tarea
Dos elementos xy yestán en el mismo nivel de contorno si floor(x/10) == floor(y/10). Por ejemplo, 52y 58están en el mismo nivel de contorno, pero 58y 64no 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óneestá en el mismo nivel de contorno queeo si no hay ningún elemento a continuacióney de lo"_"contrario - el segundo carácter es
" "si el elemento a la derechaeestá en el mismo nivel de contorno queeo no hay ningún elemento a la derechaey"|"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 3está en el mismo nivel de contorno que 5, el primer personaje está " ". Como 20no está en el mismo nivel de contorno que 5, el segundo carácter sí "|".
Ahora lo miramos 20. Como 6no 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 6está 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]]
_| |_
_| _ _ _ _ _ |_
_| |_
| _ _ _ |
| | | |
| | | |
| |_ _ _| |
|_ _|
_ |_ _ _ _ _| _
|_ _|
| |