Câu hỏi này dựa trên Tháp câu đố số vị trí (còn được gọi là Tòa nhà chọc trời), mà bạn có thể chơi trực tuyến . Mục tiêu của bạn là đưa ra lời giải cho câu đố và xác định manh mối - số lượng tháp có thể nhìn thấy dọc theo mỗi hàng và cột. Đây là mã golf, vì vậy ít byte nhất sẽ thắng.
Tháp hoạt động như thế nào
Giải pháp cho câu đố Tháp là một hình vuông Latin - một n*n
lưới trong đó mỗi hàng và cột chứa một hoán vị của các số 1
thông qua n
. Một ví dụ cho n=5
:
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
Mỗi hàng và cột được dán nhãn bằng một đầu mối ở mỗi đầu như:
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
Mỗi đầu mối là một số từ 1
để n
cho bạn biết có bao nhiêu tháp bạn "nhìn thấy" tìm kiếm dọc theo hàng / cột từ hướng đó, nếu những con số được coi là tòa tháp với chiều cao đó. Mỗi tháp chặn các tháp ngắn hơn phía sau nó. Nói cách khác, những tòa tháp bạn có thể nhìn thấy là những tòa tháp cao hơn bất kỳ tòa tháp nào trước chúng.
Ví dụ, chúng ta hãy nhìn vào hàng đầu tiên.
2 > 4 3 5 2 1 < 3
Nó có một đầu mối 2
từ bên trái bởi vì bạn có thể thấy 4
và 5
. Các 4
khối 3
từ tầm nhìn và các 5
khối khác. Từ bên phải, bạn có thể nhìn thấy 3
tháp: 1
, 2
, và 5
.
Yêu cầu chương trình
Viết chương trình hoặc hàm lấy trong lưới các số và đầu ra hoặc in các đầu mối, đi theo chiều kim đồng hồ từ trên cùng bên trái.
Đầu vào
Một n*n
hình vuông Latin với 2<=n<=9
.
Các định dạng là linh hoạt. Bạn có thể sử dụng bất kỳ cấu trúc dữ liệu nào đại diện cho lưới hoặc danh sách chứa số hoặc ký tự chữ số. Bạn có thể yêu cầu một dấu phân cách giữa các hàng hoặc không có dấu phân cách nào cả. Một số khả năng là danh sách, danh sách danh sách, ma trận, chuỗi được phân tách bằng mã thông báo như
43521 54132 15243 21354 32415,
hoặc một chuỗi không có khoảng trắng.
Bạn không được đưa ra n
như một phần của đầu vào.
Đầu ra
Quay trở lại hoặc in các đầu mối bắt đầu từ trên cùng bên trái và đi theo chiều kim đồng hồ. Vì vậy, đầu tiên các đầu mối phía trên đọc sang phải, sau đó các đầu mối bên phải đọc xuống dưới, sau đó các đầu mối bên dưới đọc bên trái, các đầu mối bên trái đọc lên trên.
Đây sẽ là 23145 34321 12222 33212
ví dụ trước
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
Cũng như đối với đầu vào, bạn có thể sử dụng một danh sách, chuỗi hoặc bất kỳ cấu trúc được sắp xếp nào. Bốn "nhóm" có thể được tách ra hoặc không, trong một cấu trúc lồng nhau hoặc phẳng. Nhưng, định dạng phải giống nhau cho mỗi nhóm.
Các trường hợp thử nghiệm ví dụ:
(Định dạng đầu vào / đầu ra của bạn không nhất thiết phải giống như thế này.)
>> [[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]
Để thuận tiện cho bạn, đây là các trường hợp thử nghiệm tương tự trong một định dạng chuỗi phẳng.
>> 1221
21
12
21
12
>> 312231123
122
221
123
321
>> 4352154132152432135432415
23145
34321
12222
33212
>> 264137589729683145597461823618572934153926478375248691831794256942815367486359712
422333321
133222233
432123322
312433225
≢¨∪¨↓⌈\(⍉⍪⌽⍪⍉∘⌽∘⊖⍪⊖)