To pytanie jest oparte na wieżach z układaniem liczb (znanych również jako Wieżowce), w które można grać online . Twoim celem jest rozwiązanie zagadki i ustalenie wskazówek - liczby wież widocznych wzdłuż każdego rzędu i kolumny. To jest kod golfowy, więc wygrywa najmniej bajtów.
Jak działa Towers
Rozwiązaniem puzzle Towers to kwadrat łaciński - n*n
siatka, w której każdy wiersz i kolumna zawiera permutacji liczb 1
dzięki n
. Przykładem n=5
jest:
4 3 5 2 1
5 4 1 3 2
1 5 2 4 3
2 1 3 5 4
3 2 4 1 5
Każdy wiersz i kolumna jest oznaczony wskazówką na każdym końcu, na przykład:
2 3 1 4 5
v v v v v
2 > 4 3 5 2 1 < 3
1 > 5 4 1 3 2 < 4
2 > 1 5 2 4 3 < 3
3 > 2 1 3 5 4 < 2
3 > 3 2 4 1 5 < 1
^ ^ ^ ^ ^
2 2 2 2 1
Każda wskazówka jest liczbą od 1
do, n
która mówi, ile wież „widzisz” patrząc wzdłuż rzędu / kolumny z tego kierunku, jeśli liczby są traktowane jak wieże o tej wysokości. Każda wieża blokuje za nią krótsze wieże. Innymi słowy, wieże, które można zobaczyć, są wyższe niż jakakolwiek wieża przed nimi.
Na przykład spójrzmy na pierwszy wiersz.
2 > 4 3 5 2 1 < 3
Ma wskazówkę 2
z lewej, ponieważ możesz zobaczyć 4
i 5
. W 4
blokuje 3
od wzroku i 5
blokuje wszystko. Z prawej strony widać 3
wieże: 1
, 2
, i 5
.
Wymagania programu
Napisz program lub funkcję, która pobiera siatkę liczb i wyników lub drukuje wskazówki, postępując zgodnie z ruchem wskazówek zegara od lewego górnego rogu.
Wkład
n*n
Łacińsko-kwadrat z 2<=n<=9
.
Format jest elastyczny. Możesz użyć dowolnej struktury danych, która reprezentuje siatkę lub listę zawierającą cyfry lub znaki cyfrowe. Może być wymagany separator między wierszami lub brak separatora. Niektóre możliwości to lista, lista list, macierz, ciąg znaków oddzielony tokenami
43521 54132 15243 21354 32415,
lub ciąg bez spacji.
Nie jesteś podany n
jako część danych wejściowych.
Wydajność
Wróć lub wydrukuj wskazówki, zaczynając od lewego górnego rogu i postępując zgodnie z ruchem wskazówek zegara. Więc najpierw górne wskazówki czytają w prawo, następnie prawe wskazówki czytają w dół, następnie dolne wskazówki czytają w lewo, lewe wskazówki czytają w górę.
Tak byłoby 23145 34321 12222 33212
w poprzednim przykładzie
2 3 1 4 5
v v v v v
2 > 4 3 5 2 1 < 3
1 > 5 4 1 3 2 < 4
2 > 1 5 2 4 3 < 3
3 > 2 1 3 5 4 < 2
3 > 3 2 4 1 5 < 1
^ ^ ^ ^ ^
2 2 2 2 1
Podobnie jak w przypadku danych wejściowych, możesz użyć listy, łańcucha lub dowolnej uporządkowanej struktury. Cztery „grupy” można rozdzielić lub nie, w strukturze zagnieżdżonej lub płaskiej. Ale format musi być taki sam dla każdej grupy.
Przykładowe przypadki testowe:
(Twój format wejścia / wyjścia nie musi być taki sam jak te.)
>> [[1 2] [2 1]]
[2 1]
[1 2]
[2 1]
[1 2]
>> [[3 1 2] [2 3 1] [1 2 3]]
[1 2 2]
[2 2 1]
[1 2 3]
[3 2 1]
>> [[4 3 5 2 1] [5 4 1 3 2] [1 5 2 4 3] [2 1 3 5 4] [3 2 4 1 5]]
[2 3 1 4 5]
[3 4 3 2 1]
[1 2 2 2 2]
[3 3 2 1 2]
>> [[2 6 4 1 3 7 5 8 9] [7 2 9 6 8 3 1 4 5] [5 9 7 4 6 1 8 2 3] [6 1 8 5 7 2 9 3 4] [1 5 3 9 2 6 4 7 8] [3 7 5 2 4 8 6 9 1] [8 3 1 7 9 4 2 5 6] [9 4 2 8 1 5 3 6 7] [4 8 6 3 5 9 7 1 2]]
[4 2 2 3 3 3 3 2 1]
[1 3 3 2 2 2 2 3 3]
[4 3 2 1 2 3 3 2 2]
[3 1 2 4 3 3 2 2 5]
Dla Twojej wygody, oto te same przypadki testowe w formacie płaskiego łańcucha.
>> 1221
21
12
21
12
>> 312231123
122
221
123
321
>> 4352154132152432135432415
23145
34321
12222
33212
>> 264137589729683145597461823618572934153926478375248691831794256942815367486359712
422333321
133222233
432123322
312433225
≢¨∪¨↓⌈\(⍉⍪⌽⍪⍉∘⌽∘⊖⍪⊖)