Dada uma matriz retangular de elevações, desenhe seus contornos.
Tarefa
Dois elementos x
e y
estão no mesmo nível de contorno se floor(x/10) == floor(y/10)
. Por exemplo, 52
e 58
estão no mesmo nível de contorno, mas 58
e 64
não são.
O ato de desenhar contornos é definido da seguinte maneira: Para cada elemento e
, substitua-o por uma sequência de dois caracteres escolhida da seguinte maneira:
- o primeiro caractere é
" "
se o elemento abaixoe
estiver no mesmo nível de contornoe
ou se não houver elemento no abaixoe
e,"_"
caso contrário, - o segundo caractere é
" "
se o elemento à direita dee
estiver no mesmo nível de contornoe
ou se não houver nenhum elemento à direitae
e de"|"
outra forma
Os elementos nas linhas são unidos e, em seguida, as linhas são unidas com novas linhas.
Exemplo
Digamos que a entrada seja [[5,20],[3,6]]
visualizada como
5 20
3 6
Primeiro olhamos 5
. Como 3
está no mesmo nível de contorno que 5
, o primeiro caractere está " "
. Como 20
não está no mesmo nível de contorno que 5
, o segundo caractere está "|"
.
Agora nós olhamos 20
. Como 6
não está no mesmo nível de contorno que 20
, o primeiro caractere está "_"
. Como não há elemento à direita de 20
, o segundo caractere é " "
.
Agora nós olhamos 3
. Como não há elemento abaixo 3
, o primeiro caractere é " "
. Como 6
está no mesmo nível de contorno que 3
, o segundo caractere está " "
.
Agora nós olhamos 6
. Como não há elemento abaixo 6
, o primeiro caractere é " "
. Como não há elemento à direita de 6
, o segundo caractere é " "
.
Com base nessas seqüências de dois caracteres, fazemos substituições para obter [[" |","_ "],[" "," "]]
. Juntando isso, obtemos uma saída de
|_
Regras
- A matriz de entrada sempre será retangular e composta por números inteiros positivos.
- Os espaços à direita ou novas linhas podem ter qualquer valor (incluindo 0) e não precisam ser consistentes de forma alguma.
- Você não precisa seguir o mesmo algoritmo desde que produza os mesmos resultados.
- Seu programa ou função pode gerar uma sequência separada por nova linha, lista de sequências ou equivalente.
- Isso é código-golfe , então o código mais curto em bytes vence.
Casos de teste
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]]
_| |_
_| _ _ _ _ _ |_
_| |_
| _ _ _ |
| | | |
| | | |
| |_ _ _| |
|_ _|
_ |_ _ _ _ _| _
|_ _|
| |