Yorumlar için teşekkürler. :)
Alıntı (canalpay):
> Türkiyede bu oyun bilinmiyor. Yada ben Türkiyede bu oyunun bilindiğini bilmiyorum.
Küçükken bende İngiltere'den gelmiş Master Mind adında vardı. Rakamlarla değil, renkli plastik düğmelerle oynanıyordu. Sonra Türkiye'de Süper Zeka adıyla da gördüm ve oynadım. :)
Sonra okulda kağıt üzerine yazılarak da oynamıştık. Hey gidi günler... :P
Alıntı:
> Oyun gerçekten güzel hemde biraz zorluymuş. Zorlanınca 2 haneli şekilde oynayıp 4.de bildim :-)
Çok az hane olunca da ipucu şansı azalıyor. On rakama karşılık 4 hane iyi. Mantık hatası yapılmadığı zaman 5-7 hamlede bulunuyor.
Fikir: Oyun biraz akıllı olabilir ve şöyle önerilerde bulunabilir:
- "ikinci hamlede hiç + vermemiştim, demek ki hiçbir rakamın yeri doğru değildi; ama bak 1'i yine aynı yerde kullandın"
- "üçüncü hamlede hiç + veya - vermemiştim; demek ki onların dördü de yok; ama bak 2'yi yine kullandın"
- vs. :)
Aslında güzel olan, oyunu bilgisayara oynatmak olur. ;) Ben bu programı daha önce Sinclair BASIC, C, ve C++'da da yazmıştım ama hiç bilgisayara oynatmamıştım. Belki Can yapar! :)
Alıntı:
> Kodda anlamadığım hiçbir yer yok ama bin yıl düşünsem aklıma gelirmiydi emin olamadığım şeyler var.
Aynısı bana da olur. Başkalarının kodlarına bakmak her zaman için yararlıdır.
Alıntı:
>
- Bu kesin aklıma gelmezdi :
> bool tekrarsız_mı(in char[] tahmin)
> {
> foreach (i; 0 .. tahmin.length - 1) {
> if (find(tahmin[i + 1 .. $], tahmin[i]) != "") {
> writefln("Aynı rakam kullanılamaz");
> return false;
> }
> }
>
> return true;
> }
> ```
Aslında onun da bir kütüphane işlevi olmalı ama hızlıca baktığımda görememiştim. Aslında şimdi bakınca, '!= ""' yerine de '.length' demek biraz daha mantıklı geliyor.
Alıntı:
>
> Ben yapmış olsaydım:
>
> bool tekrarsız_mı(in char[] tahmin)
{
foreach (i; tahmin) {
if (count(tahmin,i) != 1) {
writefln("Aynı rakam kullanılamaz");
return false;
}
}
return true;
}
> Herhalde benimki sizinkinden daha fazla işletiliyor.
Bu kadar küçük dizgilerde hiç önemi yok ve ikisi de O(N^2) (N kare) düzeyinde algoritma.
Eğer hiç tekrar yoksa, benimki de seninki de toplam NxN işlem yapmak zorunda.
Eğer tekrar varsa, ve tekrarlanan ilk rakam rastgele bir noktadaysa, ortalama olarak N/2'nci hanede olduğunu varsayabiliriz. Benimki ortalamada NxN/2 işlem yapar, seninki yine NxN.
Algoritma karmaşıklığında çarpanlar atıldığı için, ikisinin de N'e bağlı en büyük terimi N üzeri 2 düzeyindedir. Yani "aynılar" :) ama benimki bazen ortalamada yarısı kadar işlem yapıyor olabilir.
Alıntı:
> karşılaştır işlevide çok güzel yazılmış. Herhalde onun en pratik ve hızlı çözümü sizin yazdığınızdır. Çok sevdim bu çözümü.
Düşünsem benim aklıma böyle bir çözüm gelir miydi ? Sanmıyorum. O j==i çözümü asla aklıma gelmezdi.
Güzel, güzel! :) Amaç o zaten. Fikir alış verişi olsun... Aslında 'karşılaştır''ı for döngüsüyle de bir kaç kere yazdım. Sanki bu daha okunaklı oldu.
Alıntı:
> Kodları okurken fark ettimde, sizce işlevi istediğimiz yerde tanımlayabilmemiz iyi bir şey mi ? Eğer çok işlev tanımladıysak kodu baştan sona okumak yerine ilk işlevin kodunu okuyoruz, ondan sonra ilk işlevde kullanılan diğer işlevin kodunu. O diğer işlevde de kullanılan diğer işlevin kodunu okuyoruz. Kodun bir aşağısına bakıyoruz bir yukarısına.
Bunun iyi bir çözümü yok. Ben C ve C++ programlarında (ve D.ershane'deki örneklerde) main'i en sona yazıyorum. Böylece C ve C++'da işlevlerin ayrıca bildirilmeleri gerekmiyor.
Ama bunun önüne yine de iyi bir şekilde geçilemiyor. Alt düzey işlevlerin yukarıda olmasına çabalarken kod sürekli değiştirilebiliyor. Eskiden aşağıda bulunan bir işlev başa taşınıyor.
Aynı düzeyde bulunan işlevlerin sorunu da ayrı: haneAdediDoğru_mu ve tekrarsız_mı'dan hangisi önce tanımlanmalı?
Alıntı:
> Bu bence okunabilirliği azaltıyor.
Kabul. Ama öteki türlü olunca da asıl ne olduğunu bilmeden, önce alt düzey işlevleri öğrenmeye başlıyoruz, okuyoruz, okuyoruz, ondan sonra anlıyoruz...
Alıntı:
> Ddilindeki kendi projelerimiz için sizce bunu önlemek için bir standart belirleyelim mi ?
Gördüğün gibi, ben kararsızım. :) Hangi durumda hangisi mantıklı oluyorsa; kabul...
Ali
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]