Zeichnen Sie die Konturen einer rechteckigen Erhebungsmatrix.
Aufgabe
Zwei Elemente x
und y
befinden sich auf derselben Konturebene, wenn floor(x/10) == floor(y/10)
. Zum Beispiel 52
und 58
befinden sich auf derselben Konturebene, aber 58
und 64
nicht.
Das Zeichnen von Konturen wird wie folgt definiert: e
Ersetzen Sie jedes Element durch eine Zeichenfolge mit zwei Zeichen, die wie folgt ausgewählt wird:
- Das erste Zeichen ist,
" "
wenn sich das Element daruntere
auf derselben Konturebene befindet wiee
oder wenn sich kein Element darunter befindet,e
und"_"
ansonsten - das zweite Zeichen ist ,
" "
wenn das Element auf der rechten Seite dere
auf der gleichen Konturebene ist wiee
oder es ist kein Element auf der rechtene
und"|"
sonst
Die Elemente innerhalb der Zeilen werden zusammengefügt, dann werden die Zeilen mit Zeilenumbrüchen zusammengefügt.
Beispiel
Nehmen wir an, die Eingabe wird [[5,20],[3,6]]
visualisiert als
5 20
3 6
Wir schauen uns zuerst an 5
. Da 3
sich auf derselben Konturebene wie befindet 5
, ist das erste Zeichen " "
. Da 20
sich nicht auf derselben Konturebene wie befindet 5
, ist das zweite Zeichen "|"
.
Nun schauen wir uns an 20
. Da 6
sich nicht auf derselben Konturebene wie befindet 20
, ist das erste Zeichen "_"
. Da rechts von kein Element vorhanden ist 20
, ist das zweite Zeichen " "
.
Nun schauen wir uns an 3
. Da es unten kein Element gibt, ist 3
das erste Zeichen " "
. Da 6
sich auf derselben Konturebene wie befindet 3
, ist das zweite Zeichen " "
.
Nun schauen wir uns an 6
. Da es unten kein Element gibt, ist 6
das erste Zeichen " "
. Da rechts von kein Element vorhanden ist 6
, ist das zweite Zeichen " "
.
Basierend auf diesen zwei Zeichenfolgen machen wir Ersatz, um zu bekommen [[" |","_ "],[" "," "]]
. Wenn wir diese zusammenfügen, erhalten wir eine Ausgabe von
|_
Regeln
- Die Eingabematrix ist immer rechteckig und besteht aus positiven ganzen Zahlen.
- Nachgestellte Leerzeichen oder Zeilenumbrüche können beliebig sein (einschließlich 0) und müssen in keiner Weise konsistent sein.
- Sie müssen nicht denselben Algorithmus anwenden, solange Sie dieselben Ergebnisse erzielen.
- Ihr Programm oder Ihre Funktion gibt möglicherweise eine durch Zeilenumbrüche getrennte Zeichenfolge, eine Liste von Zeichenfolgen oder eine Entsprechung aus.
- Das ist Code-Golf , also gewinnt der kürzeste Code in Bytes.
Testfälle
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]]
_| |_
_| _ _ _ _ _ |_
_| |_
| _ _ _ |
| | | |
| | | |
| |_ _ _| |
|_ _|
_ |_ _ _ _ _| _
|_ _|
| |