Mega Code Archive

 
Categories / Delphi / Examples
 

Neoturk forum - cisko rumuzlu arkadaşımın dikkatine

" NeoTurk rumuzlu arkadaşım çok iddialı bakalım cevap verebilecekmi? 26 Kasım 2005 00:49 Sayın Neoturk öncelikle Kodbank'ı hemen hemen tartışma platformuna çevirdiğiniz için sizi uyarmak gerektiğini belirtmeliyim. Ardından "sudoko" diye adlandırılan bulmaca çözümünde kendinizi yere göğe sığdıramamışsınız. Bu da bir zayıflık.... Kendinize çok güveniyorsanız...Alın size bir soru!. Bulun bakalım bunun algoritmasını... O Zaman sizin ne kadar bilgili olduğunuzu herkes anlasın! Ama sakın buna siz karar vermeyin...Çünkü insan başkasının yumruğunu yemeden kendi yumruğunu balyoz zannedermiş... Benden söylemesi.... İşte Soru: Veritabanında tüm sözcükler kayıtlı. Kullanıcının rastgele belirlediği AXB şeklindeki (maksimum 50X50) bir kare bulmacada yine kullanıcının rastgele kareleri işaretleyerek mantıklı olarak (örneğin 50X50 lik bir bulmacada tek satırı boş bıraktığında muhtemelen o 50 karakter uzunlukta bir kelime bulunmayacaktır) oluşturduğu boş bir bulmaca şablonuna otomatik olarak uygun sözcükleri yerleştirecek (kısaca bulmaca üreteci diyebiliriz) algoritmayı yazın da göreyim sizi ve programcılığınızı...Ama soruma lütfen kodla cevap verin...Aksini kabul etmiyorum...Bu arada veritabanını isterseniz adresinize gönderebilirim... Cisko " cevap: hafta sonları pc başında olamadığım için, hafta sonu polemik partisini kaçırdığım için son derece üzgünüm ! yazınıza ilişkin genişçe cevabımı kodbankta verdim, şimdi devamını getirmek istiyorum, müsadenizle 10x10 luk bir matriste aşağıdaki kelimeleri yerleştiren programı yazdım. aynı soruyu size iade ediyorum, bana bunu çözen programı yazınız: veri tabanı kelimeleriniz: accomplish access erase select as load use enter add cal setup available each cable manage permission among oversee need edit link peer personnel request same space entire own dueto ( kaynak: kursuna devam ettiğim dersanenin ingilizce kitabında çözülmüş bir puzzle ) [ kontrol ettim kelimelerde hata yok ] kullanacağınız kelimeler bunlar.......... içlerinde cevapları içerenler de var, içermeyenler de var. 10x10 luk bir matris çizin kağıda, karalayacağınız kareler şunlar: 1.satır: - 2.satır: 2,4,5,7,8,10 3.satır: 2,4,5 4.satır: 2,4,5,7,8,9,10 5.satır: 8,9,10 6.satır: 2,4,6 7.satır: 2,4,6,8,9 8.satır: 2,3,4,9 9.satır: 5,6,8,9 10.satır: 1,2,3,4,9 [ kontrol ettim, karalanan karelerde hata yok ] uygun olan kelimeleri önce elle yerleştiriniz. elle yerleştirdikten sonra, bana bu işi otomatik yapan programı yazınız. programımın kaynak kodlarını yakın bir tarihte yayınlayabilirim. dediğiniz gibi "dayak yemeyen yumruğunu balyoz sanırmış" haklısınız... dinamik çözüm için de tasarlayacağımı söylemiştim. şu anda programım NxN matrisini destekliyor. stringgrid üzerinde kareleri karalayabiliyorsunuz. ilgili bir text dosyasından da deneyeceği cevap kelimelerini kullanıyor. dediğim gibi 50x50 lik için de bunu çözecektir... ama ne zaman Allah bilir.... 10x10 luk ve küçük bir kelime arşivinde problem yok... kolay gelsin.......... not: ben kendimi biliyorum... seviyemi biliyorum... kimsenin benim hakkımda ne düşüneceği veya düşündüğü inan umrumda bile değil. traja ve reklama ihtiyacım yok. buraya hobi amaçlı takılıyorum. belki ukalalığım tutuyodur zaman zaman, o kadar da olsun artık... yıllarıma sayıyorum......... amacım "al sana cevap" değil... bu sefer mütevazi olmayı tercih ediyorum........... saygılarımla_ neoturk_ ----------------- cisko rumuzlu kardeş, neredesin gözüm yollarda seni arıyor uzaklardan uzaklardan............ 1 Aralık 2005 10:49 neredesin cisko ? söylediğin bulmaca puzzle hazırlama programını dinamik olarak yazdım. NxN matrisli bir karede mouse ile istediğin yerleri karalıyorsun, wordlist kelime db sinden uygun olan olan kelimeleri çakıştırarak bulmacayı yerleştiriyor ( çözüm süresi değişkendir ! ) şimdi daha hızlı nasıl dağıtabilir ve yerleştirebilir mantığına kasıyorum arkadaşım. ve inat ettim bunun örnek example demosunu da gazetelere göndereceğim, ama önce sana gönderecem, sonra burada yayınlayacam. haklısın, "dayak yemeyen yumruğunu balyoz zanneder"... polemik için yanlış seçimdi............. kutlarım ! görüşmek üzre, neoturk_ ----------------- ******************************************** Sevgili Neoturk, Sizin cevabınızı verdiğimi sanıyordum... Ama anlaşılan o ki; yazdığımı okumamışsınız. Sayın Webmasterin veritabanını dolduracağım ama yazdığımı bir kez de bu TDİ nin yorumuna kopyalayıp-yapıştırayım... Bu arada soruma aynı soru ile cevap verişin doğrusu tuhafıma gitti. Bende de çözüm var. Hız sorunu için database ve kod optimizasyonu yaptıktan sonra ben de alternatifini demo sürümü olarak gaztelere, dergilere dağıtmayı düşünüyorum... Ama ne zaman olur onu pek bilemiyorum. Çünkü şu anda ne yazık ki kodla uğraşacak zaman pek bulamıyorum. Bu yüzden Programın tamamlanması Morfy'nin "bir işin bitim zamanı hesabı" kuralına dayanıyor: İşin Bitirme Zamanı= İşin normal bitiş süresini ikiyle çarp sonra bir sonraki zaman dilimi ile değiştir (dakika ise saat, gün ise hafta ay ise yıl.... Yani 5 dakikalık iş 5*2=10 dk=>10 saat :) Orijinal Cevap 28.11.2005 tarihli saat 21:12 deki Kodbank'daki bana hitaplı cevabınızın yorum kısmında yer almaktadır. Ordan buraya kopyalayıp yapıştırdım. Sayın Neoturk arkadaşım; Öncelikle hiç üşenmeden açıklamada bulunduğun cevap için teşekkür ederim. Ayrıca; programcılık hobisinin arkasında yatan gerçeğin paradan çok takdir edilme duygusunun olduğunu bir an unutmuş olacğım ki, eleştirinin dozunu abartmışım. Hakkını helal et!. Ama; üzüldüğüm ve yanlış anlaşıldığım bir noktayı belirtmekte fayda görüyorum. İnsanların emeğine çok saygı duyarım ve hiç kimseyi yaptığı işler için "saçma" diyecek kadar küçültmem!. Bunun yanında hiç kimseyi de karşımda ağırlığından daha fazlası için havalandırmam.(Terazinin kefeleri misali). Yazımı yeniden okursanız hiçbir yerinde "saçma" kelimesinin geçmediğini göreceksiniz. Yine umarım "yeni yetme" ibaresini de benim için kullanmadınız. Çünkü 1991 yılında işe girdim ve işyerindeki ilk bilgisayarım 8088 bir pc'ydi(hdd si olmayan,5 1/4" disket sürücülü bir pc sadece 640 kb memory) ve gw-basic programlama ile program yazmaya başladım. Anlayacğın ben Delphi den önce de vardım. Delphi nin ilk sürümünü edinip Win 3.1 e kurduğum o anı hala hatırlarım. Tahmin ettiğim gibi, beklediğim yanıtı verdin. Yani kod değil, düz yazı! Maalesef cevap alamadım ve açıklamalarınız bana bir fıkrayı hatırlattı: Bir gün sonra biyoloji dersinde yazılaya girecek sınıfa hoca son hatırlatmaları yapmaktadır: -"Çocuklar! Leylek ve karganın biyolojisine iyi çalışın. Soru 50 puan değerindedir, haberiniz olsun!",der. Öğrencilerden biri akşam iki kuşun biyolojisine çalışacak zamanının kalmadığını anlar ve bu hoca muhtemelen leyleği soracaktır deyip başlar leyleğin biyolojisini çalışmaya ve tabi su gibi yutar...Aksilik değilmi hoca sınavda kargayı sorar. Çocuk ters köşeye yatmıştır. Ama yine de çaresiz bişeyler kağıda yazar... Kargada leyleğe benzer...ve başlar leyleğin özelliklerini anlatmaya... ********************************************* merhaba cisko, öncelikle gülümsüyorum.... dikkat, gülmek değil gülümsemek... dün akşam 01.11.2005 saat 21.45 itibari ile kısa bir fırsat yakalayıp önceki yazınızı okumuştum. buranın forum sistemi sürekli aşağıya kayan bir yapıda olduğu için ve sizden de ses seda çıkmadığı için yeni bir mesajla cevap vermiştim, daha sonra eski başlığa cevap verdiğinizi gördüm. eğer o cevabınızı okusaydım yukarıdaki başlığı daha "tatlı" bir usluple yazar ve işi de yokuşa sürmezdim doğrusu... bu yüzden, kaba tavrımı tatlıya dönüştürmek istiyorum, ve aynı kuşağın (sanırım aynı dönemin geçmişine sahibiz, bilirsin ben de amstrat ve sinclair spectrum+2 ve amiga500 lerle büyüdüm sene 1988 lerde. voltran çizgifilmlerimiz vardı bizim her pazar hevezle izlediğimiz, dimi ? ) gençleri olduğumuzu düşünüyorum. bana bulmaca sorusunu sorduğunuz anda sizin maziniz hakkındaki önsezgisel tahminlerimde yanılmadım ve ms-dos kuşağından yetişen ( commodor64 pc lerle yetişmiş ) bir yaşıtım olarak tahmin ettim. herneyse, daha fazla depresyona girip de yaşlandığımı kabullenmek istemiyorum artık tekrar bizim şu "meşhur" polemiğimize geri dönmek istiyorum, nacizane aynı düşünceye sahip olduğumuzu da en içten samimiyetimle belirtmek istiyorum bu arada. önce biraz daha geriye dönüyorum, 1) size sorduğum soruları programladınız mı? veya programlayabildiniz mi? samimi olarak soruyorum. eğer programlayamama veya mantığını kuramama durumu olursa ( ki sorduğum sorular zor algoritmalardır ) kaynak kodları ile birlikte size gönderebilirim. 2) bulmaca programınız şu anda çalışır durumda mı? mümkünse bir exe demosunu gönderebilir misiniz? eğer hala kodlama ve tasarım aşamasında iseniz ikimiz de aynı noktadayız demektir, aramızdaki tek fark benim programım neredeyse bitti sayılır, teknik açıklamasına değineceğim. şu anki yazdığım bulmaca programım: - dinamik oldu. NxN matrisler için bir stringgrid ortamı sağlıyor ve kareleri kullanıcı mouse ile karalıyor. - kullanıcı wordliste müdahale ediyor ve yerleştir tuşuna bastığında uygun tüm kelimelere yerleştirilip yerleştirilmeyeceğini analiz etmeye başlıyor. ( %98 oranında programı bitti gözüyle bakıyorum artık ) 2 gündür bahsettiğim "akıllı analiz nasıl yapılmalı" sorununu da hallettim ve gerçekten beynimden şüphe etmeye başladım, çünkü, böyle bir mantığı nasıl olup da koda dökebildiğimi hala anlamış değilim. ki her gece genelde göl aleminde kafa çeken birisiyim..... inan bana kendimden şüphe ediyorum, bazen rüyadaymışım gibi geliyor bana... gündüzleri zombi moddayım... ilk versiyonu yazdığımda, ( 5 gün önce - sizin soruyu sorduğunuzun ertesi günü ! ) tüm denemelerimi 10x10 matrisinde yaklaşık 30-40 kelimelik bir wordlistten çözümü bulmasını istedim. ( daha önce çözülmüş ve kareleri karalanmış bir bulmaca örneğini baz aldım. size sorduğum soru ) "aptal denemelerle" yaklaşık olarak 24 Milyar ( yanlış yazmıyorum ) deneme yapmasına kadar bekledim. yaklaşık 30 dakika süre aldı. ekrana her 100.000 işlemde bir refresh çektirdim ve bekledim. kullandığım pc P4 - 2GB Ram'a sahip. bunun üzerine size söyledim ki "bunu nasıl hızlandırabilirim", akıllı arama-tarama nasıl yaptırabilirim. ve 4 saat odama kapandım ve masa başında enine boyuna çok derin hesaplar planlar yaptım. tek tek sözel cümleleri kağıda yazdım ve bunları nasıl programlayabilirim diye düşünürken bir taraftan da kafamdan programı yazmaya başladım. ve hemen akabinde sabahladım. pc başında beyin ameliyatı yaparcasına ve full konsantre olarak sözel bahsettiğim mantıklarımın hepsini koda döktüm. çok dikkatli kodlama yaptım. çünkü oluşan mantıksal hataları yakalamam çok güç oldu. en sonunda da gerçekten akıllı analiz yapan algoritmayı da başardım ve ekledim. aynı matris için 30 dk süren işlemi ( 40 kelime için ) 5 sn de çözümü yakalatmayı sağladım. akıllı olan tüm alternatifleri çok hızlı deniyor ve gereksiz hiç bir kelimenin alt varyasyonlarını taratmıyor. bu da milyarlarca gereksiz kombinasyonu elemesine neden oluyor ki istediğim de buydu. akşam olduğunda bunu arkadaşım "shadow"a gösterdim onun yanına gittim. sizinle olan polemiğimizden bahsettim ve bu programı "cisko" için yazdığımı söyledim. zaten formumun caption kısmında da "word puzzle by neoturk for cisko!" yazdığını görünce o da benim ne kadar hırslandığımı farketti. detaylı olarak kareleri karalayarak akıllı analiz örneklerine baktık. saçma karalama işlemlerinde hemen bana "bu puzzle çözülemez" uyarısını verdiğini görünce "mantığımdan" çok memnun kaldım. ve gerçekten de elle de uğraşılsa öyle bir puzzlenin çözülemeyeceğini çünkü yatay ve dikeyde ilgili kelimeler olsa dahi hangi yerde tıkanacağını program gösteriyordu. bunu şu anda tekrar bana kodla deseler inan yapamayabilirim yani !... o anlık bir duygu ve sezgiydi sabahladığım gün... daha sonra "shadow" arkadaşım bana yeni bir fikir verdi, hocam dedi, programa ikinci bir alternatif eklet. wordlistlerden herhangi bir kelime seçsin, ve bu kelimeye dayanarak örneğin 20 tane kelimeyi bulmacaya yerleştirsin, kalan boş kareleri kendisi karalasın dedi. tamam dedim uygundur. şimdi bunu yapacağım. daha sonra bu işin ticareti yapılabileceğini farkettim. öncelikle yerel gazetelere "hergün 1 bulmaca" promosyonu fikri ortaya çıktı. belki de inşallah bu iş sayesinde ekmek parası da bulabileceğim. malum hayat zor... parasız kalınca da insan her şeyi yapıyor... ve akabinde göle içmeye gittim her zamanki olduğu gibi.. "shadow" ile birlikte çok kulaklarını çınlattık, bilmiyorum çınladı mı ? bana şu öneriyi de sundu, "hocam bu programı cisko ya da gönderelim o da bunun satışını yapsın para kazanalım en azından" dedi, ben de "olumlu" karşıladım... yani sonuç olarak dostum ( dostum diyorum mahsuru yok ise ), bu projeyi birleştirelim derim..... ve tekrar söylüyorum, bulmaca çözen programı yazmak gerçekten "zor"..... herkesin yazabileceği bir harç değil... 40 fırın deneyim ve tecrübe mantığı gerekiyor. kodlarını tahmin edersin artık. iç içe geçmiş bir sürü fonksiyon. dantel gibi işlenmiş....... tv de online yarışma olsa katılırdım yani.... artık durumu polemik olarak görmüyorum, ve allah sizden de razı olsun, belki de ekmek paramı çıkartmamı sağlamama vesile oldunuz, belki de kader bizi buluşturdu... programım bitince exe demosunu göndereceğim... kendine iyi bak dostum, görüşmek üzere... neoturk_