Це питання ґрунтується на головоломці "Вежі-розміщення чисел" (також відомі як "Хмарочоси"), в яку можна грати в Інтернеті . Ваша мета - прийняти рішення головоломки та визначити підказки - кількість башт, видимих уздовж кожного ряду та стовпця. Це кодовий гольф, тому виграє найменше байтів.
Як працює Вежа
Рішення головоломки Towers - це латинський квадрат - n*n
сітка, в якій кожен рядок і стовпець містить перестановку чисел 1
наскрізь n
. Прикладом 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
Кожен рядок і стовпець позначені підказкою на кожному кінці, як:
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
Кожен ключ являє собою число від 1
до , n
який говорить вам , скільки веж ви «бачите» , дивлячись уздовж рядка / стовпця з цього напрямку, якщо ці номери розглядаються як вежі з цією висотою. Кожна вежа блокує за нею короткі вежі. Іншими словами, вежі, які ви можете бачити, - це ті, що вище, ніж будь-яка вежа перед ними.
Наприклад, давайте подивимось на перший ряд.
2 > 4 3 5 2 1 < 3
Він має підказку 2
зліва, тому що ви можете бачити 4
і 5
. У 4
перегороджує 3
з поля зору і 5
блокує все інше. Справа ви можете побачити 3
вежі: 1
, 2
і 5
.
Вимоги до програми
Напишіть програму або функцію, яка містить сітку чисел і виводить або друкує підказки, рухаючись за годинниковою стрілкою вгорі ліворуч.
Вхідні дані
n*n
Latin-квадрат з 2<=n<=9
.
Формат гнучкий. Ви можете використовувати будь-яку структуру даних, яка представляє сітку або список, що містить числа чи цифри. Вам може знадобитися роздільник між рядками або взагалі немає роздільника. Деякі можливості - це список, список списків, матриця, рядок, розділений маркером
43521 54132 15243 21354 32415,
або рядок без пробілів.
Вам не надано n
частину введення.
Вихід
Повертайте або друкуйте ключі, починаючи з верхнього лівого кута і рухаючись за годинниковою стрілкою. Отже, спочатку верхній ключ читає праворуч, потім правий, читаючи вниз, потім нижній, читаючи ліворуч, лівий ключі читає вгору.
Це було б 23145 34321 12222 33212
для попереднього прикладу
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
Як і для введення, ви можете використовувати список, рядок або будь-яку упорядковану структуру. Чотири "групи" можуть бути відокремленими або ні, у вкладеній або плоскій структурі. Але формат повинен бути однаковим для кожної групи.
Приклади тестових випадків:
(Ваш формат вводу / виводу не повинен бути таким, як цей.)
>> [[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]
Для вашої зручності ось такі самі тестові приклади у форматі плоскої струни.
>> 1221
21
12
21
12
>> 312231123
122
221
123
321
>> 4352154132152432135432415
23145
34321
12222
33212
>> 264137589729683145597461823618572934153926478375248691831794256942815367486359712
422333321
133222233
432123322
312433225
≢¨∪¨↓⌈\(⍉⍪⌽⍪⍉∘⌽∘⊖⍪⊖)