Program Döküm Eki sayı 24, sayfa 3

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 3

Recursion yardımıyla labirentlerin çözümü:

"Zamanın uç-urumundan ve karanlık gerisinden başka ne görüyorsunuz?" W.M. Shakespeare, Fırtına

"... yorgunluktan ayakta duracak hali kalmamıştı. Saatine baktı, bu karmaşık labirent sistemine düştüğünden beri tam 15 galaktik-gün geçmişti (bir galaktik-gün, kütle numarası 200 olan kurşunun, kütlesinin ilk değerinin yarısına düşmesi için geçen süre olarak tanımlanan 'yarı ömrü'ne eşittir. = 0.895 dünya günü). Yanında bulunan yiyecek tabletleri ve su rezervleri ise üç-galaktik gün önce tükenmişti. Diğer taraftan susuzluk, açlıktan daha önemliydi. Çünkü, bir insan açlığa uzun süre dayanabilirdi ama susuzluğa çok fazla dayanamazdı. Fakat su bulsa bile değişen ne olacaktı ki? Bu labirentten kurtulması için bir mucize gerekliydi. Bunları düşünürken karanlık dehlizlerin içinde yeni bir yol ayrımına geldiğini farketti. Şimdi ne yapacaktı? Hangi yöne doğru gitmeliydi? Kararını verdi ve..."

Kahramanımız Eras, Cuprum gezegenindeki kötü kalplı büyücü Serus'un hazırladığı labirentten ancak robotu Hector'un beraberinde yedek yiyecek tabletleri ve su rezervleri olduğu halde kendisini bulmasıyla kurtuldu.

Böyle bir hikaye gelecekte gerçekleşebilir mi? Bunu şimdiden söyleyemeyiz. Ama bunun yerine, bilgisayarların bu gibi durumlarda kullandığı algoritmaya benzer bir algoritma geliştirebiliriz. Robotlar için labirentlerin çözümü çoğu zaman kolaydır. Çünkü onlar enerjileri yettiği sürece dolaşabilirler ve her şeyden önemlisi sinirlenip psikolojik baskı altına girmezler. Diğer taraftan robotlar, geçtikleri yerlerin bir haritasını çıkararak daha sonra aynı noktaya geldiklerinde oradan daha önce geçip geçmediklerini anlayabilirler. Robotun bilgisayarı, labirentin içindeki herhangi bir noktanın relatif koordinatını nasıl saptayabilir? Şöyle ki, başlangıç noktası referans noktası olarak alınır ve bir uzunluk birimi tespit edilir. Bundan sonra ileriye doğru gidilecek birim uzunlukların (veya adımların) sayısı +y geriye doğru olanlarının sayısı da -y alınır. Aynı şekilde yan taraflara doğru atılacak adımların sayısı da +x ve -x olarak değerlendirilir. Daha sonra her yol ayrımında bu değişkenler ile gidilmesi mümkün olan yönler kayıt edilirler. Bir robotun adımları hep aynı uzunlukta olacağı için bu sistemde hata olmaz ve böylece herhangi bir zamanda varılacak olan yol ayrımına daha önce gelinip gelinmediğine o anki x ve y değerlerinin bellekte aranmasıyla karar verilir. Eğer sonuç olumlu çıkarsa o kavşağa daha önce gelinmiş demektir, robot burada başka bir yön seçerek işine devam eder. Tabii gerçekte robotlar, adımlarını saymaktan başka çok daha kompleks yöntemler kullanarak da yollarını bulabilirler (örneğin bazı sinyalleri takip etmek). Burada geliştirilen 'Adım sayma' sistemi sadece bir örnektir. Diğer taraftan, biz burada labirentin sadece bir düzlem üzerinde olduğunu varsayıyoruz. Aynı şekilde, aşağıda verilen program da bir düzlem üzerindeki (iki boyutlu) labirentlerin çözümünü vermektedir.

Şimdi programımıza dönelim: Simons Basic kullanılarak yazılan programımızın temelli rekürsif programlama tekniğine dayanmakta

Klavyeyle gezinmek için ← ve → tuşları.