Pertanyaan ini didasarkan pada Menara puzzle penempatan angka (juga dikenal sebagai Pencakar Langit), yang dapat Anda mainkan online . Tujuan Anda adalah untuk mengambil solusi untuk teka-teki dan menentukan petunjuk - jumlah menara terlihat di sepanjang setiap baris dan kolom. Ini adalah kode golf, byte paling sedikit menang.
Bagaimana Towers bekerja
Solusi untuk teka-teki Towers adalah kotak Latin - n*n
kotak di mana setiap baris dan kolom berisi permutasi angka yang 1
dilewati n
. Contoh untuk n=5
adalah:
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
Setiap baris dan kolom diberi label dengan petunjuk di setiap ujungnya seperti:
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
Setiap petunjuk adalah angka dari 1
ke n
yang memberitahu Anda berapa banyak menara yang Anda "lihat" melihat sepanjang baris / kolom dari arah itu, jika angka-angka diperlakukan sebagai menara dengan ketinggian itu. Setiap menara memblokir menara yang lebih pendek di belakangnya. Dengan kata lain, menara yang Anda lihat adalah menara yang lebih tinggi dari menara mana pun sebelumnya.
Sebagai contoh, mari kita lihat baris pertama.
2 > 4 3 5 2 1 < 3
Ini memiliki petunjuk dari 2
kiri karena Anda dapat melihat 4
dan 5
. The 4
blok 3
dari pandangan dan 5
blok segala sesuatu yang lain. Dari kanan, Anda dapat melihat 3
menara: 1
, 2
, dan 5
.
Persyaratan program
Tulis program atau fungsi yang menggunakan kotak angka dan keluaran atau cetak petunjuk, searah jarum jam dari kiri atas.
Memasukkan
Kotak n*n
Latin dengan 2<=n<=9
.
Formatnya fleksibel. Anda dapat menggunakan struktur data apa pun yang mewakili kisi atau daftar yang berisi angka atau karakter digit. Anda mungkin memerlukan pemisah antara baris atau tidak ada pemisah sama sekali. Beberapa kemungkinan adalah daftar, daftar daftar, matriks, string yang dipisahkan dengan token seperti
43521 54132 15243 21354 32415,
atau string tanpa spasi.
Anda tidak diberikan n
sebagai bagian dari input.
Keluaran
Kembalikan atau cetak petunjuk mulai dari kiri atas dan searah jarum jam. Jadi, pertama membaca petunjuk atas ke kanan, kemudian petunjuk kanan membaca ke bawah, lalu petunjuk bawah membaca ke kiri, petunjuk kiri membaca ke atas.
Ini akan menjadi 23145 34321 12222 33212
contoh sebelumnya
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
Sama seperti untuk input, Anda dapat menggunakan daftar, string, atau struktur yang dipesan. Keempat "kelompok" dapat dipisahkan atau tidak, dalam struktur bersarang atau datar. Tapi, formatnya harus sama untuk setiap grup.
Contoh kasus uji:
(Format input / output Anda tidak harus sama dengan ini.)
>> [[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]
Untuk kenyamanan Anda, berikut adalah kasus uji yang sama dalam format string datar.
>> 1221
21
12
21
12
>> 312231123
122
221
123
321
>> 4352154132152432135432415
23145
34321
12222
33212
>> 264137589729683145597461823618572934153926478375248691831794256942815367486359712
422333321
133222233
432123322
312433225
≢¨∪¨↓⌈\(⍉⍪⌽⍪⍉∘⌽∘⊖⍪⊖)