Nonogramlarımızı nasıl yapıyoruz

Buradaki her bulmaca sıradan bir resim olarak başlar ve yalnızca mantıkla çözebileceğiniz bir ızgara olarak biter. Arada, görseli rasterleştiren, sonucun gerçekten çözülebilir olup olmadığını test eden ve olmayanları atan otomatik bir işlem hattından geçer. Bu sayfa o süreci dürüstçe anlatır — başarısız olan kısımlar dahil, çünkü işin çoğu iyi bulmacalar yapmaktan çok kötü bulmacaları elemekten ibarettir.

1. Bir resimle başlar

Bir nonogram her zaman yalnızca siyah-beyaz bir siluettir — gölgeleme yok, renk yok, iç ayrıntı yok. Dolayısıyla ilk adım, biçimi minik bir çözünürlükte açıkça okunan bir kaynak resim seçmektir: bir hayvan, bir meyve, bir burç simgesi, bir ev eşyası. Vektör sanatından (SVG), saydam PNG'lerden ve düz fotoğraflardan çalışırız; bunlar temalı varlık paketlerine düzenlenir, ayrıca uygulama içi bir görsel aramasıyla getirilen görseller de eklenir.

Bu aşamada önemli olan resmin ne kadar güzel olduğu değil — konturunun 15×15 veya 20×20'lik bir ızgaraya ezilmeye ne kadar iyi dayandığıdır. Belirgin, iyi ayrılmış bir biçim işe yarar. Çok sayıda küçük, üst üste binen parçadan oluşan yoğun bir sahne neredeyse hiç yaramaz, nedenini aşağıda göreceğiz.

2. Bir resmi ızgaraya dönüştürmek

Resim gerçek bir görüntüleme kütüphanesiyle (tarayıcıların SVG için dayandığı aynı kütüphaneyle) rasterleştirilir, ardından hücre başına tek bir siyah ya da beyaz değere indirgenir. Bunu yapmanın tek bir «doğru» yolu yoktur, bu yüzden işlem hattı birkaçını dener: resmin varsa kendi saydamlığına dayanarak, düz parlaklığa (koyu = dolu) dayanarak veya — düz bir arka plan üzerindeki parlak, renkli bir özne için, parlaklığın tek başına onu güçlükle ayırdığı durumda — arka plandan renk uzaklığına dayanarak. Beyaz üzerindeki açık turuncu bir tilki parlaklıkta neredeyse beyazdır ama renkte ondan uzaktır; renk uzaklığı maskesi onu temizce yalıtır.

«Dolu» ile «boş» arasındaki eşik, resmi en temiz biçimde iki gruba bölen parlaklık eşiğini bulan standart bir teknik olan Otsu's method kullanılarak otomatik olarak seçilir. Hangi boyut, kırpma ve eşiğin en iyi okunacağını önceden bilmenin bir yolu olmadığından, işlem hattı resim başına birçok aday ızgara üretir — farklı boyutlar, farklı eşikler — her birini dolu içeriğine kırpar ve biçimi ızgaranın oranlarına uydurur, böylece geniş bir taç bir kareye sıkıştırılmak yerine geniş bir ızgara elde eder.

3. Gerçekten çözülebileceğini kontrol etmek

Bir insana iyi görünen bir resim otomatik olarak geçerli bir bulmaca değildir. Gerçek bir nonogram yalnızca satır ve sütun ipuçlarından çözülebilmeli ve — kritik olarak — tam olarak tek bir çözümü olmalıdır. İki farklı dolu desen her ipucunu karşılıyorsa, bulmaca belirsiz ve haksızdır, çünkü saf mantığı izleyen bir çözücü doğru bir şekilde «yanlış» resme ulaşabilir.

Bu yüzden her aday bir çözücüye verilir: bir kişinin yapacağı satır satır çıkarımların aynısını uygular ve mantığın tek başına takıldığı yerde, kaç tam çözümün var olduğunu saymak için kapsamlı bir aramaya başvurur. Sıfır çözümü (çelişkili) veya birden fazla çözümü (belirsiz) olan herhangi bir ızgara oracıkta reddedilir. Bu teklik kontrolü, tüm işlem hattındaki tek en önemli kapıdır.

4. Mantık olduğundan emin olmak, tahmin değil

Tek bir çözümün olması tam olarak yeterli değildir. Bir bulmaca teknik olarak benzersiz olabilir ama yalnızca deneme yanılmayla ulaşılabilir olabilir — bir hücreyi doldurup onu ızgaranın derinliklerine kadar izlemek ve çeliştiğinde geri dönmek. Bu çözmek değildir; tahmin etmektir ve sinir bozucu bir bulmaca yapar.

Bunu yakalamak için, her bulmacanın akıl yürütmesinin ne kadar zor olduğunu sınıflandırırız. Dolaysız satır satır mantıktan çıkan bulmacalar «basit»tir. İkinci, iyi araştırılmış bir çıkarım katmanı (Batenburg and Kosters'ın yayımlanmış nonogram zorluğu araştırmasına dayanan) geri kalanın çoğunu hiç tahmin olmadan halleder. Deneme yanılma olmadan hâlâ çözülemeyen her şey tahmin-gerektiren olarak işaretlenir — ve günlük katalog için bunlar yayımlanmak yerine kenara ayrılır.

5. Neden birçok görsel asla başaramaz

Herhangi bir çözüm işinden önce, işlem hattı ayrıca bir görselin denemeye değip değmediğini de iki kaba ama dürüst sinyal kullanarak öngörür. Biri ayrılabilirliktir: görselin genel olarak iki tona ne kadar temiz bölündüğü — bulanık, düşük kontrastlı bir kaynak her boyutta kötü bir bahistir. Diğeri ayrıntı-çözünürlük uyumudur: ızgaranın sahip olduğu hücreden çok daha fazla ince ayrıntıya sahip bir görsel yalnızca bir lekeye dönüşecektir.

Kendi testlerimizden somut bir örnek: Eyfel Kulesi'nin gerçek bir fotoğrafı, her çözülebilirlik kontrolünü geçen 40×40'lık bir aday üretti — tek bir benzersiz çözüm, makul bir doldurma oranı — ama dolu bir dikdörtgen olarak gösterildi. Kulenin kafes ayrıntısı ve altındaki karmaşa, tek bir ayırt edilemeyen bloğa yassıldı. Teknik olarak geçerli bir nonogram; görsel olarak işe yaramaz. Tam da bu tür durumları durdurmak için bu ön kontroller ve bir de insan bakışı vardır. Sınırlar konusunda net olmak gerekirse: burada bir görme modeli yoktur — işlem hattı bir resimde *ne* olduğunu asla tanımaz, yalnızca biçiminin ne kadar iyi dönüştüğünü ölçer. İşte bu yüzden nihai karar hâlâ bir insanındır.

6. Bir puanlama ve son bir insan bakışı

Her kapıyı geçen bulmacalar, çözüm katmanlarından ve biçim istatistiklerinden (ızgaranın ne kadar dolu olduğu, resmin kenarlardan taşıp taşmadığı vb.) bir zorluk puanı alır; bu da onları kolay, orta ve zor koleksiyonlarına ayıran şeydir. Ardından bir kişi kataloğa gidecek olanları ızgara düzenleyicimizde açar, resmin gerçekten olması gereken şey olarak okunup okunmadığını kontrol eder ve otomatik kontrollerin geçirdiği ama geçirmemesi gereken her şeyi ayarlar veya atar.

Bu, bilinçli olarak gösterişsiz bir süreçtir ve mesele de tam olarak budur: otomasyon adaleti garanti etmek için vardır — tek bir çözüm, mantıkla çözülebilir — bir insan ise bir bilgisayarın yargılayamayacağı şeyi, yani bitmiş resmin iyi olup olmadığını korur.

Kodu saymazsak işlem hattının tamamı bu. Nasıl inşa edildiğini okumaktansa bir tanesini çözmeyi tercih ederseniz, bugünün bulmacası başlamak için iyi bir yer.