Eksik sayı

Ormanın kuşları bir akşam yine Bilge Karga’yı görmeye gelmişler. Kalabalığı gören Bilge Karga ne olduğunu anlamak için dışarı çıkmış. Kuşlardan birine ne istediklerini sormuş.

Kuş: Komşu ormandan bir kuş geldi, Bilge Karga. Kesin büyücü. Çok korkuyoruz.

Bilge Karga: Nasıl büyücü? Neler yapıyor?

Kuş: Beynimizi okuyor.

Bilge Karga: Sakin ol ve bunu nasıl yaptığını anlat.

Kuş: Nasıl yaptığını bilmiyoruz. Belki sen biliyorsundur diye sana geldik.

Bilge Karga: Peki, şimdi sakince bu yeni kuşun ne yaptığını anlat.

Kuş: 1 ile 100 arasında aklımızda bir sayı tutmamızı istiyor. Sonra 1’den 100’e kadar bu tuttuğumuz sayı dışındaki sayıları istediğimiz sırada kendisine söylememizi istiyor. Bunu yapıyoruz ve hemen ardından aklımızda tuttuğumuz sayıyı biliyor.

Bilge Karga: Belki söylediğiniz sayıları not alıyordur.

Kuş: Hayır, hep beraber kontrol ettik. Sadece durup söylediğimiz sayıları dinliyor, başka hiçbir hareket yapmıyor.

Bilge Karga: Peki, yarın gelin, bunu nasıl yaptığını düşüneyim ben de.

Acaba ormana yeni gelen kuş bunu nasıl yapıyordu?

Atlar (Çözüm)

c3 karesinde bulunan atın tehdit ettiği kareler.
c3 karesinde bulunan atın tehdit ettiği kareler.

Yukarıdaki diagram yardımıyla şu basit sonuca ulaşabiliriz. Siyah karedeki bir at sadece beyaz kareleri tehdit edebilir. Aynı şekilde beyaz karedeki bir atın da yalnızca siyah kareleri tehdit edebileceğini çıkarabiliriz. Bu mantığı kullanarak satranç tahtasındaki beyaz (ya da siyah) karelere 32 adet at koyabiliriz. Peki bundan daha iyi bir çözüm var mıdır?

33 atın koyulabildiğini varsayalım. Eğer satranç tahtasını 4×4 şeklinde dört parçaya ayırırsak bir parçada en az 9 at olması gerektiğini görebiliriz. Eğer her parçada en fazla 8 at olsaydı, toplamda en fazla 32 at olacaktı. Şimdi a1-d1-a4-d4 kısmından oluşan 4×4’lük alanı inceleyelim. Bu alanı ikişer kareden oluşan 8 gruba ayıralım. Bu ikili kareleri öyle seçeceğiz ki birinde bulunan bir at diğer kareyi tehdit edecek. Örneğin grupları şöyle seçebiliriz: (a1, b3) – (b1, a3) – (c1, d3) – (d1, c3) – (a2, b4) – (b2, a4) – (c2, d4) – (d2, c4). Bu çiftler 4×4’lük alanın tamamını örtmekte. Şimdi her bir çifte birbirlerini tehdit etmeyecek şekilde birer at koyalım. Böylece 8 grup için 8 at koymuş olduk. Bu aşamada bu kareleri nasıl seçeceğimizi anlatmıyorum, sadece seçebildiğimizi var sayıyorum. Bu 8 atı koyabilirsek 9. atı koymak için yerimiz kalmayacaktır çünkü bu at da diğer 8 gruptan birine düşecektir. Her grupta şimdiden birer at olduğuna göre yeni koyulacak at kesinlikle tehdit altında olacaktır. Bu nedenle 4×4’lük bir alana 9 at koyamıyoruz ve bunu yapamayınca da satranç tahtasına 32’den fazla at yerleştiremiyoruz.

Bir başka ispat yöntemi de şöyle. At turu diye meşhur bir problem vardır. Bu meşhur problemin bir sürü çözümü vardır. Herhangi bir çözümü alıp hamleleri 1’den 64’e kadar numaralayalım. Her bir numara dolayısıyla tahta üzerindeki ayrı bir kareyi göstermektedir. Tahtadaki 33 at elde etmek için bu sayılardan 31 tanesini silmemiz yeterli. Bu sayıların 31 tanesini nasıl silersek silelim en az iki tane ardışık sayı kalacaktır. Bunu görmek için 1’den 64’e kadar sayıları (1, 2), (3, 4), …, (63, 64) şeklinden ikişer sayıdan olan ayrık ardışık sayı gruplarına ayırmak yeterli. Bu şekilde 32 grup elde ettik. Her bir gruptan birer sayı seçtiğimizde 33. at için bir sayı daha seçmemiz gerekecek ve bu da daha önce seçilmiş gruplardan biri olmak zorunda olacak. Böylece bir gruptan iki sayıyı da seçmek zorundayız ve bu iki sayı da ardışıktır. At turunda ardışık iki sayı ise bir atın bir hamlede bir kareden diğer kareye gittiğini söylemektedir. Yani bu iki karedeki atlar birbirlerini tehdit edecektir. Dolayısıyla satranç tahtasında birbirini tehdit edemeyecek şekilde 33 at koyamıyoruz.

Böylece satranç tahtasında birbirini tehdit etmeyen en fazla 32 at konulabileceğini görmüş olduk.

Haftanın çelişkisi

Şirkette yaklaşık bir haftadır şu problemi tartışıyoruz. Makine çalıştırıldığında ekranda makine durumu olarak ‘ABORTED’ yazıyor ama hata listesi boş. Programcı arkadaşlar bunun nedenini araştırdı ve sonunda bir açıklama buldular. Teknik kısmına çok fazla girmek istemiyorum ama kısaca kullanıcı ekranda hata listesini gördüğünü  onayladığında sistemde bütün hatalar giderilmediğinden makine ‘ABORTED’ durumuna geçiyor ve hemen ardından hataların kalanı da gideriliyor ama makine artık onaylama işlemini terk ettiğinden bu değişiklik göz ardı ediliyor.

Sonra problemin çözümünün ne olacağını sorduk ve programcı da kullanıcının tekrar hata onaylama düğmesine basması gerektiğini söyledi. Tabii ki kullanıcının olmayan hata listesini onaylamasını beklemek bizde bir şaşkınlığa yol açtı. Neden böyle olması gerektiğini sorduğumuzda da bize sistemin durumlarının gösterildiği bir diyagram üzerinde ‘ABORTED’ durumundan ‘STOPPED’ durumuna sadece kullanıcı onayıyla geçilebileceğini gösterdi. Bunun üzerine kendisiyle şöyle bir konuşma yaptık:

Biz: ‘ABORTED’ ne demek?

Programcı: Makinenin bir durumu.

Biz: Tamam da diğer durumlardan farkı ne? Mesela neden ‘STOPPED’ değil?

Programcı: Hata varsa ‘ABORTED’ yoksa ‘STOPPED’.

Biz: Peki bu tartıştığımız problem durumunda (hata listesi boş)  sistem neden ‘ABORTED’ durumunda? Tanıma göre bu yasak olmalı.

Programcı: Ama bu diyagrama göre o duruma geçtiğimde sistemde hata vardı, sonra o durumdayken hatalar giderildi ve yine diyagrama göre bu durumdan çıkışın tek yolu kullanıcı onayı.

Biz: İyi de bu diyagram bize söylediğin sistemin durum tanımlarıyla çelişiyor. İkisinden en az biri yanlış olmalı.

Günün kalan kısmındaki tartışmalardan duyabildiğim kadarıyla programcı arkadaş bu çelişkiyi ayakta tutabilmek için öyle şeyler denemiş ki, düzeltilen her problem iki yeni probleme yol açar olmuş. Tabii ki bu o kadar şaşırtıcı olmadı. Ne de olsa bir çelişkiyi çalışabilir yapmak için daha başka hatalara ihtiyaç vardır. Sonuç olarak basit mantık hatalarına karşı direnmenin masrafı böylece yine yüksek çıktı da rahat bir nefes aldım. Yoksa mantık ne işimize yarayacak diye soranlara ne cevap vereceğimi bilemezdim.