Bu soru, çevrimiçi olarak oynayabileceğiniz sayı yerleştirme bulmaca Kuleleri (Gökdelenler olarak da bilinir) üzerine kuruludur . Amacınız bulmacanın çözümünü bulmak ve ipuçlarını belirlemek - her bir satır ve sütun boyunca görülebilecek kulelerin sayısı. Bu kod golf, yani en az bayt kazanıyor.
Kuleler nasıl çalışır?
A - Bir Towers bulmacanın çözümü Latince bir kare n*n
her satır ve sütun numaralarının bir permütasyon içerdiği ızgara 1
içinden n
. Bunun bir örneği 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
Her satır ve sütun aşağıdaki gibi her bir uçta bir ipucu ile etiketlenir:
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
Her ipucu bir sayıdır 1
için n
sayıların o yüksekliğe sahip kuleleri olarak kabul edilir eğer, bu yönden satır / sütun boyunca bakarak "görmek" kaç kuleleri olduğunu söyler. Her kule arkasındaki kuleleri daha kısa tutar. Başka bir deyişle, görebileceğiniz kuleler, onlardan önceki kulelerden daha uzun boylu olanlardır.
Örneğin, ilk satıra bakalım.
2 > 4 3 5 2 1 < 3
Bu bir ipucu vardır 2
Gördüğünüz çünkü soldan 4
ve 5
. 4
Bloklar 3
gelen görme ve 5
else blokları her şeyi. Sağdan görebilirsiniz 3
kuleleri: 1
, 2
, ve 5
.
Program gereksinimleri
Rakamların ızgarasına giren ve ipuçlarını çıkaran veya basan, soldan itibaren saat yönünde ilerleyen bir program veya işlev yazın.
Giriş
Bir n*n
Latin-kare ile 2<=n<=9
.
Format esnek. Bir ızgarayı temsil eden herhangi bir veri yapısını veya sayı veya rakam karakter içeren bir liste kullanabilirsiniz. Satırlar arasında bir ayırıcı gerekebilir veya hiç ayırıcı gerekmeyebilir. Bazı olasılıklar bir liste, bir liste listesi, bir matris, tokenle ayrılmış bir dizedir.
43521 54132 15243 21354 32415,
veya boşluksuz bir dize.
n
Girişin bir parçası olarak verilmemişsin .
Çıktı
Sol üstten başlayıp saat yönünde giden ipuçlarını iade edin veya yazdırın. Bu nedenle, ilk önce üstteki oklar sağa, sonra sağdaki oklar aşağıya, daha sonra soldaki oklar aşağı, soldaki oklar yukarı okuyor.
Bu 23145 34321 12222 33212
önceki örnek için olurdu
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
Giriş için olduğu gibi, bir liste, dize veya herhangi bir sipariş edilen yapı kullanabilirsiniz. Dört "grup", iç içe geçmiş veya düz bir yapı içinde ayrılabilir veya ayrılamaz. Ancak, format her grup için aynı olmalıdır.
Örnek test durumları:
(Giriş / çıkış biçiminiz bunlarla aynı olmak zorunda değildir.)
>> [[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]
Size kolaylık sağlamak için, burada aynı sınama örnekleri düz dize biçiminde.
>> 1221
21
12
21
12
>> 312231123
122
221
123
321
>> 4352154132152432135432415
23145
34321
12222
33212
>> 264137589729683145597461823618572934153926478375248691831794256942815367486359712
422333321
133222233
432123322
312433225
≢¨∪¨↓⌈\(⍉⍪⌽⍪⍉∘⌽∘⊖⍪⊖)