Data una matrice rettangolare di elevazioni, disegna i suoi contorni.
Compito
Due elementi x
e y
sono sullo stesso livello di contorno se floor(x/10) == floor(y/10)
. Ad esempio, 52
e si 58
trovano sullo stesso livello di contorno, ma 58
e64
non sono.
L'atto di disegnare contorni è definito come segue: per ogni elemento e
, sostituirlo con una stringa di due caratteri scelta come segue:
- il primo carattere è
" "
se l'elemento in basso sie
trova sullo stesso livello di contornoe
o se non vi è alcun elemento in bassoe
e in"_"
altro modo - il secondo carattere è
" "
se l'elemento a destra di sie
trova sullo stesso livello di contorno die
o non vi è alcun elemento a destra die
e"|"
altrimenti
Gli elementi all'interno delle righe vengono uniti, quindi le righe vengono unite insieme a nuove righe.
Esempio
Diciamo che l'input è [[5,20],[3,6]]
, visualizzato come
5 20
3 6
Per prima cosa guardiamo 5
. Poiché si 3
trova sullo stesso livello del contorno 5
, il primo carattere è " "
. Poiché 20
non si trova sullo stesso livello del contorno 5
, il secondo carattere è"|"
.
Adesso guardiamo 20
. Poiché 6
non si trova sullo stesso livello del contorno 20
, il primo carattere è "_"
. Poiché non vi è alcun elemento a destra di 20
, il secondo carattere è" "
.
Adesso guardiamo 3
. Poiché non vi è alcun elemento in basso 3
, il primo carattere è " "
. Poiché si 6
trova sullo stesso livello del contorno 3
, il secondo carattere è" "
.
Adesso guardiamo 6
. Poiché non vi è alcun elemento in basso 6
, il primo carattere è " "
. Poiché non vi è alcun elemento a destra di 6
, il secondo carattere è" "
.
Sulla base di queste stringhe a due caratteri, eseguiamo sostituzioni per ottenere [[" |","_ "],[" "," "]]
. Unendo questi insieme, otteniamo un risultato di
|_
Regole
- La matrice di input sarà sempre rettangolare e composta da numeri interi positivi.
- Gli spazi finali o le nuove righe possono essere in qualsiasi importo (incluso 0) e non devono essere coerenti in alcun modo.
- Non è necessario seguire lo stesso algoritmo finché si producono gli stessi risultati.
- Il programma o la funzione può generare una stringa separata da una nuova riga, un elenco di stringhe o equivalente.
- Questo è code-golf , quindi vince il codice più breve in byte.
Casi test
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]]
_| |_
_| _ _ _ _ _ |_
_| |_
| _ _ _ |
| | | |
| | | |
| |_ _ _| |
|_ _|
_ |_ _ _ _ _| _
|_ _|
| |