Düzenleme: Sorunun sonunda bonus bulmacanın ilk çözücüsü için 100 itibar ödülü vereceğim !
Soruya sadece bu ödülün son tarihi olmadığı için cevap göründüğünde soruya ekleyeceğim.
Bir basamaklı pozitif tamsayıların azalmayan bir listesi verildiğinde, basamakların ne kadar derin zindan kazacağını belirlemelisiniz.
███ ███ A dungeon with 5 blocks removed and a depth of 3.
███ ███
███ ████
████████
Kazmaya başlamadan önce zemin düz.
Her hane tam olarak bir toprak bloğunu altından kaldırabilir, ancak zindanın dışından bu konuma ulaşmalı ve kaldırıldıktan sonra blok zindandan ayrılmalıdır. Bunu yaparken , herhangi bir yatay adımda bir rakam sayısal değerinden daha fazla inemez veya yükselemez .
Rakamlar kazmak için aşağıdaki stratejiyi kullanır:
- En küçük değere sahip basamak ilkleri kazar ve bundan sonra bir sonraki kazıcı her zaman basamakların geri kalanından sonraki en küçük değerdir.
- İlk hane herhangi bir konumda kazabilir. (Bütün zemin aynı.)
- Aşağıdaki rakamlar her zaman en soldan başlatılmış sütunda kazıp çıkabilecekleri yerde kazmaktadır. Böyle bir sütun yoksa, en sağdaki sütunun sağ tarafında yeni bir sütun kazmaya başlarlar.
Örneğin, rakamlar 1 1 1 2 3 3
aşağıdaki zindanı kazar (bu pozisyonu hangi rakamın kazdığını belirten sayılarla adım adım görselleştirme):
███1████ ███11███ ███11███ ███11███ ███11███ ███11███
████████ ████████ ███1████ ███1████ ███1████ ███13███
████████ ████████ ████████ ███2████ ███2████ ███2████
████████ ████████ ████████ ████████ ███3████ ███3████
████████ ████████ ████████ ████████ ████████ ████████
Örnek için açıklama:
- İkincisi
1
, eğer onu derinlemesine derinlemesine derinlemesine2
incelerse , sadece mevcut sütundan çıkamazdı. - Üçüncüsü
1
, en2
derin sütunda1
kazabilir ve -deep sütununa, sonra da zemin seviyesine hareket edebildiğinden bir -deep sütun oluşturabilir . - Bir sonraki
2
ve3
her ikisi de en soldaki sütunda kazabilir. - Sonuncusu
3
en soldaki sütunda kazamaz ancak bir sonraki sütunda olabilir.
Giriş
- En az bir elemanı olan pozitif tek basamaklı tam sayıların azalmayan listesi.
Çıktı
- Tek bir pozitif tam sayı, inşa edilen zindanın derinliği.
Örnekler
Girdi => Çıktı (çıktının bir parçası olmayan açıklama olarak zindan sütunlarının derinliklerini soldan sağa doğru)
[3] => 1
(column depths are [1])
[1, 1, 1, 2, 3, 3] => 4
(column depths are [4, 2])
[1, 1, 1, 1, 1, 1, 1, 1] => 3
(column depths are [3, 2, 2, 1])
[1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 5, 5, 5, 5, 5, 5, 5, 5] => 11
(column depths are [11, 6, 2])
[1, 1, 1, 1, 1, 2, 2, 9, 9, 9] => 7
(column depths are [7, 2, 1])
[2, 2, 2, 2, 2, 5, 5, 5, 7, 7, 9] => 9
(column depths are [9, 2])
[1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5] => 10
(column depths are [10, 5])
[1, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 5, 5, 5, 5, 7, 7, 9] => 13
(column depths are [13, 5])
[1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9] => 13
(column depths are [13, 5])
[1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9] => 21
(column depths are [21, 12, 3])
Bu kod golf bu yüzden en kısa giriş kazanır.
Bonus bulmaca
"Rakamlar kazmak için aşağıdaki stratejiyi kullanır" bölümünde açıklanan stratejinin her zaman verilen rakamlar için mümkün olan en derin zindanı verdiğini kanıtlayabilir (veya çürütebilir) ?