En çok tanınan bulmaca sürgülü olup Onbeş . 4 x 4 ızgara, 15 kiremit ve bir boş ızgara alanı vardır. Fayanslar sadece boş alana hareket edebilir ve her zaman ızgara ile aynı hizada olmalıdır.
Genelleştirilmiş bir kayan bulmacayı, iki adet W genişliğinde H yüksek ızgarası ( W , H her iki pozitif tamsayı) olarak , ızgaraya tutturulmuş bazı aynı işaretlenmemiş karoları (0 ile G × H arasında) içeren, herhangi bir şekilde (üst üste binmeden), alanın geri kalanını dolduran boş ızgara boşlukları ile.
Örneğin, W ve H 3 ise ve bir kutucuk T
ve boş bir alan E
olası birçok dış cephe kaplaması bulmaca düzenlemelerinden biridir.
TTT
TET
EET
Bu bulmacalar için 4 olası hareket vardır: her şeyi yukarı it, her şeyi aşağı it, her şeyi sola it veya her şeyi doğru it . Bir yöne 'itmek', tüm karoları başka bir karo veya ızgara sınırına çarpana kadar mümkün olduğunca bu yönde hareket ettirir. Bazen itmek ızgaranın düzenini değiştirmez,
Örnek ızgara doğru itilirse sonuç
TTT
ETT
EET
Sonuçta sola itildi
TTT
TTE
TEE
Sonuç aşağı itildi
EET
TET
TTT
(her ikisinin de en solda T
taşındığına dikkat edin)
Yukarı itmek bu durumda ızgara düzenini değiştirmez.
Fayans ayırt edilemez olduğundan, bu bulmacalar 'çözüldü' devletleri yoktur. Ayrıca, bir bulmacanın bir itişme yapıldıktan sonra geri dönmesi imkansız bir düzende başlayabileceğini unutmayın (örn. 3'e 3 ızgaranın ortasında bir taş).
Meydan okuma
Yalnızca yazdırılabilir ASCII kullanarak , hem M karakter genişliğinde hem de N karakter yüksekliğinde iki dikdörtgen kod bloğu yazın ( M , N pozitif tamsayıları için ). Bir kod bloğu kayan bir bulmacanın döşemesini, diğer kod bloğu boş bir ızgara alanını temsil edecektir.
Bu iki kod bloğunu bir W by H ızgarasına yerleştirmek, bir metin dosyası olarak kaydedilebilen ve normal bir program olarak çalıştırılabilen, kodla temsil edilen kayan bir bulmaca oluşturacaktır. Çalıştırıldığında, bu tür programlar kullanıcıyı 1'den 4'e kadar bir sayı için stdin aracılığıyla istemelidir; 1 yukarı, 2 aşağı, 3 sol, 4 sağ içindir . Kullanıcı numaralarını yazıp isabet girdiğinde, program kaynak kod döşemelerini bu yönde nasıl iteceğini hesaplar ve yeni bulmaca düzenini bir dosyaya (yeni bir dosya veya aynı dosya) kaydeder, ardından sonlandırır.
Bu işlem, her itişten sonra oluşturulan yeni kayan bulmaca kod dosyası ile süresiz olarak tekrarlanabilir.
Misal
Döşeme kodu bloğumun aşağıdaki gibi olduğunu varsayalım
// my
// tile
ve boş ızgara alan kod bloğum şöyle görünüyor
//empty
//space
( M = 7, N = 2, bu elbette gerçek kod değil)
Bu iki bloğun herhangi bir geçerli sürgülü bulmaca düzenlemesi, kullanıcının bir yönde kıpırdamasına izin vermek için çalıştırılabileceğim bir program oluşturmalıdır.
Örnek kılavuzun kod gösterimi:
// my// my// my
// tile// tile// tile
// my//empty// my
// tile//space// tile
//empty//empty// my
//space//space// tile
Bu yüzden bunu çalıştırıp 2'ye (aşağı doğru) basarsanız Enter bunu başka bir dosyaya (veya aynı dosyaya) yazar:
//empty//empty// my
//space//space// tile
// my//empty// my
// tile//space// tile
// my// my// my
// tile// tile// tile
Bu dosya daha sonra aynı şekilde çalıştırılabilir ve itilebilir.
notlar
W tarafından H kayan bulmacanın herhangi bir kod temsili çalıştırılabilir olmalı ve kendini doğru şekilde itebilmelidir. Bu, 1'den 1'e kadar bazı makul maksimumlara (2 16 x 2 16 veya daha fazla) tüm ızgara boyutlarını içerir .
Bir program olabilir , kendi kaynak kodunu okuyun. Ayrağa dayalı kısıtlamalar yoktur. Her türlü yorum da iyidir.
Kırılacak kiremit olmasa veya kiremit itilemese bile, program kıpırdatmak için bir yön sormalıdır. Bilgi istemi sadece bir sayı yazmak için bir yerdir, mesaj gerekmez.
Girişin her zaman geçerli olduğunu varsayabilirsiniz (1, 2, 3 veya 4).
Kod bloklarınızı boşluklarla doldurmak iyidir. Yalnızca yazdırılabilir ASCII olabileceğini unutmayın, bu sekme ve yeni satır (kod bloklarını oluşturmaya yardımcı olan yeni satırların yanı sıra) anlamına gelmez.
Diliniz stdin'i desteklemiyorsa, en yakın giriş yöntemini kullanın.
Kod-bulmaca dosyalarınızın sonunda bir satırsonu olmasını isteyebilirsiniz. (Veya orada olmamasını isteyin.)
Yeni dosyaları nasıl adlandırdığınız önemli değildir.
f.txt
ya da sadecef
iyi.İki kod bloğu aynı olmayabilir.
puanlama
Amaç bunu en küçük kod boyutuyla yapmaktır (bu yüzden kod golfü olarak etiketlenmiştir). En küçük kod bloğu alanına ( M × N ) sahip gönderim kazanır. Tie-breaker en yüksek oyu alan cevaba gider.
f.txt
? Evet.