Dada uma matriz retangular de elevações, desenhe seus contornos.
Tarefa
Dois elementos xe yestão no mesmo nível de contorno se floor(x/10) == floor(y/10). Por exemplo, 52e 58estão no mesmo nível de contorno, mas 58e 64nã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 abaixoeestiver no mesmo nível de contornoeou se não houver elemento no abaixoee,"_"caso contrário, - o segundo caractere é
" "se o elemento à direita deeestiver no mesmo nível de contornoeou se não houver nenhum elemento à direitaee 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 3está no mesmo nível de contorno que 5, o primeiro caractere está " ". Como 20não está no mesmo nível de contorno que 5, o segundo caractere está "|".
Agora nós olhamos 20. Como 6nã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 6está 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]]
_| |_
_| _ _ _ _ _ |_
_| |_
| _ _ _ |
| | | |
| | | |
| |_ _ _| |
|_ _|
_ |_ _ _ _ _| _
|_ _|
| |