Biorąc pod uwagę prostokątną matrycę elewacji, narysuj jej kontury.
Zadanie
Dwa elementy x
i y
są na tym samym poziomie konturu, jeśli floor(x/10) == floor(y/10)
. Na przykład, 52
i 58
są na tym samym poziomie konturu, ale 58
i 64
nie są.
Czynność rysowania konturów jest zdefiniowana w następujący sposób: Dla każdego elementu e
zamień go na ciąg dwóch znaków wybrany w następujący sposób:
- pierwszy znak ma miejsce,
" "
gdy element poniżeje
znajduje się na tym samym poziomie konturu coe
lub jeśli nie ma elementu elementu poniżeje
i"_"
inaczej - drugi znak występuje,
" "
gdy element po prawej stroniee
znajduje się na tym samym poziomie konturu, coe
nie, lub element nie jest po prawej stronie,e
a"|"
poza tym
Elementy w rzędach są łączone ze sobą, a następnie wiersze są łączone z nowymi liniami.
Przykład
Powiedzmy, że dane wejściowe są [[5,20],[3,6]]
wizualizowane jako
5 20
3 6
Najpierw patrzymy na 5
. Ponieważ 3
jest na tym samym poziomie konturu co 5
, pierwsza postać to " "
. Ponieważ 20
nie jest na tym samym poziomie konturu co 5
, druga postać to "|"
.
Teraz patrzymy na 20
. Ponieważ 6
nie jest na tym samym poziomie konturu co 20
, pierwsza postać to "_"
. Ponieważ po prawej stronie nie ma elementu 20
, drugą postacią jest " "
.
Teraz patrzymy na 3
. Ponieważ poniżej nie ma elementu 3
, pierwszą postacią jest " "
. Ponieważ 6
jest na tym samym poziomie konturu co 3
, druga postać to " "
.
Teraz patrzymy na 6
. Ponieważ poniżej nie ma elementu 6
, pierwszą postacią jest " "
. Ponieważ po prawej stronie nie ma elementu 6
, drugą postacią jest" "
.
W oparciu o te łańcuchy dwuznakowe dokonujemy zamiany, aby uzyskać [[" |","_ "],[" "," "]]
. Łącząc je razem, otrzymujemy wynik
|_
Zasady
- Matryca wejściowa zawsze będzie prostokątna i złożona z dodatnich liczb całkowitych.
- Końcowe spacje lub znaki nowej linii mogą być w dowolnej ilości (w tym 0) i nie muszą być w żaden sposób spójne.
- Nie musisz postępować zgodnie z tym samym algorytmem, o ile generujesz takie same wyniki.
- Twój program lub funkcja może wyświetlać ciąg rozdzielony znakiem nowej linii, listę ciągów lub równoważny.
- To jest golf golfowy , więc wygrywa najkrótszy kod w bajtach.
Przypadki testowe
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]]
_| |_
_| _ _ _ _ _ |_
_| |_
| _ _ _ |
| | | |
| | | |
| |_ _ _| |
|_ _|
_ |_ _ _ _ _| _
|_ _|
| |