Biorąc pod uwagę prostokątną matrycę elewacji, narysuj jej kontury.
Zadanie
Dwa elementy xi ysą na tym samym poziomie konturu, jeśli floor(x/10) == floor(y/10). Na przykład, 52i 58są na tym samym poziomie konturu, ale 58i 64nie są.
Czynność rysowania konturów jest zdefiniowana w następujący sposób: Dla każdego elementu ezamień go na ciąg dwóch znaków wybrany w następujący sposób:
- pierwszy znak ma miejsce,
" "gdy element poniżejeznajduje się na tym samym poziomie konturu coelub jeśli nie ma elementu elementu poniżejei"_"inaczej - drugi znak występuje,
" "gdy element po prawej stronieeznajduje się na tym samym poziomie konturu, coenie, lub element nie jest po prawej stronie,ea"|"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ż 3jest na tym samym poziomie konturu co 5, pierwsza postać to " ". Ponieważ 20nie jest na tym samym poziomie konturu co 5, druga postać to "|".
Teraz patrzymy na 20. Ponieważ 6nie 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ż 6jest 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]]
_| |_
_| _ _ _ _ _ |_
_| |_
| _ _ _ |
| | | |
| | | |
| |_ _ _| |
|_ _|
_ |_ _ _ _ _| _
|_ _|
| |