Arka fon
Picross veya Griddlers olarak da bilinen Nonogram , amacın 2B ızgaradaki her bir hücrenin, her bir satırdaki ardışık renkli hücrelerin sayıları kullanılarak renklendirilmesi veya boş bırakılması gerekip gerekmediğini belirlemek olduğu bir bilmecedir.
Aşağıdaki çözüm ile örnek bir Nonogram bulmacası.
Sorun şu ki, bazı ticari Nonogram oyunlar / mobil uygulamalar elle çözülemeyen bulmacalara sahipler (örneğin, birden çok çözümü var veya derinlemesine izlemeyi gerektiren). Bununla birlikte, oyuncuya, doğru cevabı boş olan bir hücreyi renklendirmeye çalıştığınızda bir canın kaybolduğu bazı hayatlar da sunar . Öyleyse şimdi bu kötü "bulmacaları" zorla uygulama zamanı!
Görevi basitleştirmek için ipucuyla yalnızca bir satır hayal edin ve başka bir şey yapmayın:
3 7 | _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
[3,7]
İpuçları, ve hat uzunluğu 15 hücreleri. Birden fazla olası çözümü olduğundan, bu çizgiyi tamamen çözmek için bazı yaşamları riske atmamız gerekiyor (yani tüm renkli hücreleri belirlemek).
Meydan okuma
İpuçlarını içeren bir çizgi (pozitif tamsayıların bir listesi) ve çizgi uzunluğu göz önüne alındığında, çizgiyi en uygun strateji ile kaba bir şekilde zorladığınızı varsayarak kaybedeceğiniz maksimum yaşam sayısını bulun.
Renkli hücreleri her zaman tahmin edebileceğinizi unutmayın . Gerçek oyunlarda, boş hücreleri tahmin etmenin (doğru ya da yanlış) yaşamınız üzerinde bir etkisi yoktur, dolayısıyla bulmacayı bu şekilde “çözemezsiniz”.
Ayrıca, girişin her zaman geçerli bir Nonogram çizgisini temsil ettiğini varsayabilir, bu nedenle böyle bir konuda endişelenmenize gerek yoktur [6], 5
.
açıklama
İlk önce daha basit örneklere bakalım.
[1,2], 5
Bu çizgi için tam olarak üç olasılık vardır ( O
renkli bir hücredir, .
boş bir tanedir):
O . O O .
O . . O O
. O . O O
Hücre 0'ı (soldan 0 temelli dizin) renklendirmeyi denersek, aşağıdakilerden biri olur:
- Hücre doğru renklendirilmiş. Şimdi iki ihtimalimiz var ve çizgiyi tam olarak çözmek için hücre 2 ile hücre 4 arasında seçim yapabiliriz. Her iki durumda da, en kötü durumda bir canını kaybedeceğiz.
- Hücre boş ve bir canımızı kaybediyoruz. Bu durumda, bu çizginin benzersiz çözümünü zaten belirledik, bu yüzden 1 hayatımızı kaybettik.
Bu nedenle, cevap [1,2], 5
1'dir.
[5], 10
Ikili arama? Hayır!
En belirgin ilk seçenek 4 veya 5'tir; bu, boş olması durumunda (1 hayat pahasına) bir olasılığı ortaya çıkarır. Diyelim ki önce 4 tane seçtik. Hücre 4 gerçekten renkliyse, sola doğru uzatırız, yani bir hayat kaybolana kadar 3, 2, 1 ve 0'ı deneyin (ya da hücre 0 renkli olana kadar, o zaman hiç hayat geçirmeyiz). Ne zaman bir hayat kaybedilirse, çözümü benzersiz bir şekilde belirleyebiliriz, örneğin böyle bir şey görürsek:
_ _ X O O _ _ _ _ _
o zaman cevabın bu olduğunu zaten biliyoruz:
. . . O O O O O . .
Bu nedenle, cevabı [5], 10
da 1'dir.
[3,7], 15
Boşsa, hemen aşağıdaki çözümü ortaya çıkaracak olan hücre 11 ile başlayın.
O O O . O O O O O O O X . . .
Sonra 12'yi deneyin; eğer boşsa, 1 ekstra ömür pahasına çözülebilecek iki olasılık sunar.
O O O . . O O O O O O O X . .
. O O O . O O O O O O O X . .
Şimdi 2 deneyin. Boşsa, [1,2], 5
örneğe benzer şekilde çözülebilecek üç olasılık ortaya çıkar .
. . X O O O . O O O O O O O .
. . X O O O . . O O O O O O O
. . X . O O O . O O O O O O O
Bu şekilde riski en aza indirmeye devam ederseniz, max ile herhangi bir çözüme ulaşabilirsiniz. 2 hayat geçirdi.
Test Kılıfları
[1,2] 5 => 1
[2] 5 => 2
[1] 5 => 4
[] 5 => 0
[5] 10 => 1
[2,1,5] 10 => 0
[2,4] 10 => 2
[6] 15 => 2
[5] 15 => 2
[4] 15 => 3
[3,7] 15 => 2
[3,4] 15 => 3
[2,2,4] 15 => 4
[1,1,1,1,1,1,1] 15 => 2
[2,1,1,3,1] 15 => 3
[1,1,1,2,1] 15 => 5
Son iki durumda, en uygun strateji minimum boşluklardan geçmek değil , sadece soldan sağa (veya sağdan sola) geçmek. Onu işaret ettiği için @crashoz teşekkürler.
kurallar
Standart kod-golf kuralları geçerlidir. Bayt cinsinden en kısa geçerli gönderim kazanır.
cömertlik
Biri polinom-zaman algoritmasıyla (doğruluk ispatıyla) gelirse, böyle bir çözüme +100 ödül vereceğim.
[6], 5
?