|
kalktı ve silkindi üşengeçliğinden.
yeraltı kodlayıcı uzun bir geceye daha uyanıyordu. içindeki his yeni bir
projenin doğum sancılarını anımsatır gibiydi. garip bir sıkıntı sarmıştı dört
yanını. aynaya baktı, sonra döndü ve şöyle dedi:
-hanoi kuleleri...
bilinmezdi yeraltı kodlayıcının aklından geçenler. zordu anlaşılması
gözlerindeki ışığın. bilinen tek şey, amacının bilgiyi her ne olursa olsun
insanlarla paylaşmak olduğuydu. ona göre bilgi tüm insanlığın malıydı ve bilgi
saklayanlar onun en büyük düşmanıydı. yeraltı kodlayıcının düşmanı olmak:
hayatta en son isteyeceğim şey...
peki ama neydi bu hanoi kuleleri?
ve şöyle dedi yeraltı kodlayıcı:
- bir oyundur hanoi kuleleri, eski dostum. bilmiyor olman ne garip...
asıl garip olan kendisiydi ama bunu yüzüne söyleyip bana vereceği
yanıtlardan mahrum kalmak istemedim. ben sustukça anlatmaya devam etti.
- her şey kainatın yaratılışıyla başladı. bir tapınak vardı ve 64 altın taş.
kainatın sonunu getirecek 64 taş... taşlar her gün bir taş hareket ettirmek
koşuluyla eski kadim ırkların en bilgili rahiplerinin korumasına
verildi. bu taşlar bir kıyamet sayacı gibiydi. 2^64-1 gün sonra kıyamet
kopacaktı. hangi hareketin yapılacağı yalnızca rahipler tarafından biliniyor ve
bu bilgi bir sır gibi saklanıyordu. ve ben, eski dostum, bu sırrı çözeceğim.
- ama bu sırrı çözmek kainatın sonu demek değil mi?
- bu bilgi kötü insanların eline geçerse, evet, ama ben bunu yalnızca bilgiye
ulaşmak için yapacağım. benim susuzluğum bilgiyedir dostum, iyi bilirsin.
- haklısın. her oyunun olduğu gibi bu oyunun da kuralları olmalı sanırım...
- "yanyana dikilmiş üç kutsal gümüş çubuk, en soldakine üstüste dizilmiş 64
altın taş, hepsi farklı büyüklükte, büyük taş altta, küçük taş üstte... bütün
taşlar en sağdaki çubuğa dizilecek, büyük taş altta, küçük taş üstte. hiç bir
zaman, hiç bir büyük taş, hiç bir küçük taşın üstüne gelmeyecek." der saklı
kitap.
- anladım. ne yapacaksın? kodlayacak mısın?
- elbette eski dostum. bana yeraltı kodlayıcı derler. bir çok güçlükle
karşılaşacağımı şimdiden sezebiliyorum. bu da bu işi daha zevkli kılıyor.
görebiliyorum. n-1 tane taşı alacağım ve ortadaki çubuğa koyacağım.
n.taşı alıp en sağdaki çubuğa koyacağım. sonra da n-1 tane taşı alıp o taşın
üstüne koyacağım.
- bir seferde yalnızca bir taşı hareket ettirebileceğimizi düşünmüştüm ben.
- doğru düşünmüşsün. ben de farklı bir şey söylemiyorum dostum, yalnızca çözmeye
çalıştığımız problemi genellemeye çalışıyorum. şimdi genelden özele doğru
ineceğiz ya da başka bir deyişle her adımda problemi alt problemlere
böleceğiz. örneğin n-1 taşı ortadaki çubuğa yerleştirmek için önce n-2 tane
taşı sağdaki çubuğa yerleştirmek, (n-1). taşı ortadaki çubuğa koymak, sonra da
sağdaki çubuğa koyduğumuz n-2 tane taşı ortadaki çubuğun üstüne koymak gerek.
- anlıyorum. hem de çok iyi anlıyorum yeraltı kodlayıcı.
- buna sevindim kadim dostum. o zaman söyle bakalım bu problemi hangi kodlama
yöntemiyle çözeceğiz?
- özyineleme?
- hadi yapalım o zaman...
yeraltı kodlayıcı lambayı söndürdü ve en büyük dostunun karşısına oturdu. kısa
bir aradan sonra heyecanlı tuş sesleri gelmeye başlamıştı bile.
önce çözümü sağlayan özyinelemeli fonksiyonu yazdı ve bu fonksiyon içinde
taşların hareketini ekrana çizdirdi. her bir hareket arasına belli bir gecikme
süresi ekledi. daha sonra bu süreyi çalışma esnasında değiştirebilmeyi istedi.
yani uygulamanın aynı anda kulanıcıdan da girdi alması gerekiyordu. ancak
ortada büyük bir sorun vardı. özyinelemeli fonksiyon çağrıldıktan sonra ancak
çözüm bittiğinde geri dönüyordu. bu durumda aklına foksiyonu bir thread içinde
çalıştırmak geldi. ama sdl, thread içinde çizim yapmaya izin vermiyordu. bu
durumda çizim için ayrı bir süreç yaratmaya karar verdi. bu süreç içinde bir de
thread yaratıp bir pipe aracılığı ile ilk yaratılan süreçten kullanıcıdan alınan
girdileri okumaya karar verdi. bu yöntem çalıştı ancak çok karmaşık olduğu için
kontrolü zordu. oluşan hataları bulmak çok uzun zaman alıyordu. bu yüzden yeni
bir yöntem geliştirmenin gerekliliğine karar verdi.
çözüm için yeni bir thread yaratmaya karar verdi yeraltı kodlayıcı. ancak bu
thread çizim yapmak yerine yalnızca yapılacak çizimleri bir kuyruğa yazacaktı.
birincil thread içinde ise bu kuyruktaki bilgiler okunarak gerekli çizimler
yapılacaktı. düşündüğü gibi de yaptı. aldığı sonuçtan oldukça tatmin olmuştu.
eserini bir süre izledikten sonra hareketlerin kesik kesik değil canlandırılmış
olması gerektiğini düşündü. çünkü bu ilk sürümde bir taşın hareketi
başlangıç çubuğunun ve hedef çubuğun üzerinde olmak üzere iki adımda
gösteriliyordu. aradaki geçiş hareketinin eğrisel olmasını istiyordu
yeraltı kodlayıcı. bunun için y=(x^2/n)+c fonksiyonunun yardımına başvurdu.
elde ettiği sonucu zevkle izlerken hayranlıkla dolu gözlerime doğru döndü ve
şöyle dedi:
- bilgi her yerdedir. elbette herkeste bir giz vardır. bize de bu gizi çözmek
düşer eski dostum.
|