Her hücrenin boş ( .) veya dolu ( 0) olabileceği dikdörtgen iki boyutlu bir ızgara düşünün .
Örneğin
..00....
0000....
.00000..
000...00
..000000
000.00..
Izgara sonsuz olarak kabul edilir, tasvir edilen bölgenin dışındaki tüm hücreler boştur.
Amaç, doldurulmuş boşlukları örtmek ve her birinin ızgaranın 4 hücresini (2 × 2) kapladığı 7 farklı şekilli tuğladan oluşan bir dizi kullanarak boş alanları açık bırakmaktır.
Bunlar 7 tuğla:
Bloklar - 1 varyant
11 11Döşemeler - 2 varyant
.. 2233 ..Merdivenler - 4 varyant
.4 445. 5566 .677 7.
Bu tuğlalar her zaman hücreleri giriş ızgarasının hücrelerinden iki kat daha geniş ve uzun olan bir ızgaraya hizalanmalıdır. Her tuğla, bu büyük ızgaranın yalnızca bir hücresini işgal edebilir, ancak daha küçük ızgara, bir kapak bulmak için daha fazla seçenek sunmak üzere daha büyük ağın altına çevrilebilir (yukarı, aşağı, sola, sağa). Ne ızgaralar ne de münferit tuğlalar döndürülemez.
Yukarıdaki örneği kapsamanın (diğer adıyla çözmenin) bir yolu şöyledir:
..11....
2211....
.47733..
447...22
..771133
227.11..
(Özdeş komşu tuğlalar hala belirsizliğe neden olabilir, ancak daha büyük ızgarayı dikkatlice belirlemek bunu çözer.)
İçin geçersiz bir çözüm
000000
000000
dır-dir
566774
556744
çünkü tuğlaların hepsi daha büyük ızgaraya hizalanmaz veya sadece bir hücresini işgal etmez.
Burada geçerli bir çözüm arka arkaya 3 bloktur:
111111
111111
Ve başka bir geçerli çözüm 6 levha içerir:
......
222222
333333
......
Bu nedenle, bazı giriş ızgaralarının birden çok çözümü olduğunu unutmayın .
İçin geçersiz bir çözüm
00.00
00...
dır-dir
11.33
11...
çünkü tuğlalar daha büyük ızgaraya hizalanmıyor. Döşemenin sola veya sağa birer birer hareket etmesi gerekir, ancak daha sonra kapak eksik olacaktır. Bu giriş ızgarasının çözümü yoktur .
Meydan okuma
Kapsanacak bir ızgarayı temsil eden 's .' ve 0' slerinden oluşan dikdörtgen bir blok içeren (stdin / komut satırı aracılığıyla) bir program yazın .
(Stdout'ta ile) geçerli bir kaplama çözeltisi, baskı eğer varsa , bir tüm ile değiştirilmesi ile aynı şekilde bir çözüm, 0'uygun olan s 1boyunca 7tuğla.
Çözüm yoksa, programınız hiçbir şey vermemelidir, sadece sessizce normal şekilde bitmelidir.
notlar
Giriş ve çıkışın aynı dikdörtgen boyutlara sahip olması gerekmez. Çıktınızda, tüm satırların yabancı satırları ve / veya sütunları olabilir (
.çözümü geçersiz kılmadığı sürece)..Doldurulmuş alanları etkilemezse, satırların ve sütunların kırpılması da uygundur. Örneğin222222 333333geçerli bir çözümdür
000000 000000Tersine,
00..00doldurulmuş boşlukları düzenleyemeyeceği için içindeki iki boş sütun kaldırılamadı.İsteğe bağlı olarak, girdinin tek bir satırsonu olduğunu varsayabilirsiniz. Çıktıdaki tek bir satırsonu da, çözüm olmasa bile iyidir.
Tamamen boş olan ızgaralar (tümü
.) ve önemsiz 0 × 0 ızgarası, endişelenmeniz gereken giriş durumları değildir. Ancak 1 × 10ızgara, en az bir tane içeren diğer tüm ızgaralar gibi0. (Giriş ızgarasının genişliğinin veya yüksekliğinin eşit olduğunu varsayamazsınız!)Bir program yerine, girdiyi dize bağımsız değişkeni olarak alan ve çıktıyı normal olarak yazdıran veya dize olarak döndüren bir işlev yazabilirsiniz. Herhangi bir çözüm yoksa herhangi bir falsy değeri iade edilebilir.
Bunun yerine 9 farklı yazdırılabilir ASCII karakteri kullanabilirsiniz
.01234567. Sadece değişikliklerinizin ne olduğunu söylediğinizden emin olun! Yeni satırlar olduğu gibi kalmalıdır.
puanlama
Bayt cinsinden en kısa kod kazanır. Tiebreaker en yüksek oy alan yazı.
Bu zorluk esinlenerek bloklar , levhalar ve merdiven de Minecraft Burada anlatılan aynı kurallara uyar. PPCG ve Minecraft'tan hoşlanıyorsanız , PPCG Minecraft Sunucusuna göz atmak isteyebilirsiniz .