October 21, 2012

Şu satıra bakalım (iginç olanları harflerle isimlendiriyorum):
'
. . . 1 4 4 4 3 3 3 3 . . . . . . . . .
a b c ç d e f g'

a dilimi şu: [ 1 ]

b diliminde en sonda 4 var ama onun altında 1'in parçası var: [ 1, 4 ]

c diliminde en önce 1 vardı; sonra üstüne 3 gelmişti; en sonunda da 4 geldi: [ 1, 3, 4 ]

ç de aynı [ 1, 3, 4 ]

d'deki 3'ün altında 1'in parçası var: [ 1, 3 ]

e, f, ve g'nin altında hiçbir dörtgen yok. Hepsi de yalnızca 3'ten oluşuyor: [ 3 ]

Bu dilimlerin elemanlarını aşağıdan yukarıya kule gibi üst üste düşünürsek aslında şöyleler:
'
4 4
4 3 3 3
. . 1 1 1 1 1 3 3 3 . . . . . . . . .
'

4 numaralı dörtgen silinince şu kalıyor:

'
3 3 3
. . 1 1 1 1 1 3 3 3 . . . . . . . . .
'

Sonra 3 numaralı dörtgen silinince de şu kalıyor:

'
. . 1 1 1 1 1 . . . . . . . . . . . .
'

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

October 24, 2012

Ali hocam öncelikle iyi ki varsın...

Tabi bir de küçük bir sitem, böyle güzel bir ortamda herkes olsaydı madem...:)

Belli ki bayram arefesi telaşı; malum Kurban Bayramı. Bu vesileyle herkesin bayramlarını da tebrik ederim. Çünkü hemen akabinde 29 Ekim Cumhuriyet Bayramı da var. Büyüklerin ellerinden, küçüklerin gözlerinden...:D

Böyle bir renkli girişten sonra konuya tekrar dönelim. Çünkü anlayamayınca bir süre ara verdim; bir de bilgisayar değiştirdim. Tavsiye de ederim çünkü önceki yaptıklarımın tümünü bir kenara ittim. Her şeye sıfırdan başladım ve yeni bir temel oturttum. O temelin ekran görüntüleri ve kodu hemen aşağıda:

Alıntı:

>

'salih@NB:~/d.ders$ ./kutular salih@NB:~/d.ders$ ./kutular
#0 [ 50, 30 ] [ 250, 120 ] blue #0 [ 150, 0 ] [ 150, 10 ] blue
#1 [ 190, 0 ] [ 110, 100 ] cyan #1 [ 170, 0 ] [ 130, 60 ] cyan
#2 [ 150, 0 ] [ 150, 30 ] green #2 [ 10, 40 ] [ 90, 100 ] green
#3 [ 0, 30 ] [ 140, 120 ] yellow #3 [ 180, 0 ] [ 120, 120 ] yellow
#4 [ 100, 0 ] [ 200, 110 ] red #4 [ 190, 10 ] [ 110, 10 ] red
#5 [ 50, 40 ] [ 210, 60 ] white #5 [ 30, 20 ] [ 270, 130 ] white

         TEST 1                                        TEST2'

http://imageshack.us/a/img255/1390/1kutular.png http://imageshack.us/a/img707/4006/2kutular.png

   import std.string, std.random, std.range;
   import std.stdio, sdlmini;

   immutable genişlik  = 30;         /* Hesabın kolay olması için */
   immutable yükseklik = 15;         /* gerçeğin onda biridir!    */

   class Kutu {
       size_t id;                    /* 1, 2, 3 ... n+1 */
       SDL_Rect rect;                /* x, y, w, h      */
       clr renk;                     /* uint enums      */

     private:
       static size_t _id;
       static size_t nextId() {            /* sıralı sayı üreteçi */
           immutable id = _id++;
           return id;
       }
     public:
       this(clr color, short[] noktalar ...) {
           renk = color;
           rect.x = noktalar[0];
           rect.y = noktalar[1];
           rect.w = cast(ushort)(noktalar[2]);
           rect.h = cast(ushort)(noktalar[3]);
           this.id = nextId();
       }

      void exec(SDL_Surface * screen) @property {   /* kutu çizer */
           SDL_FillRect(screen, &rect, renk);
      }

      override
      string toString() const { /* kutunun özelliklerini döndürür */
           auto r = appender!string();
           std.format.formattedWrite(r, "%s", renk);
           return format("#%d [ %d, %d ]\t[ %d, %d ]\t( %s )",
                  id, rect.x, rect.y, rect.w, rect.h, r.data);
      }
   }

void main() {
 clr[6] renkler; with(clr) {
        renkler = [ blue, cyan, green, yellow, red, white ];
 }
 Kutu[renkler.length] kutular; /* renk adeti kadar nesne oluşturur */

 with( new scene(genişlik*10, yükseklik*10, "Kutular...", clr.black) ) {

     assert(scr != null);        // Sahne kuruldu mu?

     foreach(i, c; renkler) {
         auto solüst = [ uniform(0, genişlik-10),
                         uniform(0, yükseklik-10)];
         auto sağalt = [ uniform(solüst[0], genişlik),
                         uniform(solüst[1], yükseklik) ];

         short[] noktalar;
                 noktalar ~= cast(short)(solüst[0] * 10);
                 noktalar ~= cast(short)(solüst[1] * 10);
                 noktalar ~= cast(short)(sağalt[0] * 10);
                 noktalar ~= cast(short)(sağalt[1] * 10);
         kutular[i] = new Kutu(c, noktalar);
     }
     /* Yukarıda, rasgele sayılarda (sahne ölçülerinin onda biri)
      * kutu başlangıç (solüst) ve büyüklük (sağalt) değerleriyle
      * nesneler oluşturulurken;
      * Aşağıda bunlar, sırasıyla sahneye alınmaktadır...
      */
     do {
         foreach(kutu; kutular) {
              kutu.exec(scr);
              kutu.writeln;
              kutu.clear;
         }
     } while(escEvent(0)); // ESC için bekle ve çık...
 }
}

Bu kodun bir özelliği olabildiğince sade oluşu. Öyle ki SDL kütüphanesinin tüm özelliklerine başvurulmuş (SDL_Rect ve SDL_FillRect) ve temsilcilerden uzak durulmuştur. Şimdi Ali hocamın emeklerini buna uyarlamaya çalışacağım...

Teşekkürler...

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

October 24, 2012

Hakikaten kafayı yetirtecek bir şey bu...:)

Sanırım istediğimiz gibi çalışmıyor çünkü 3 ile 2 numara aynı satırda (iki_numara = 1) ise önce, "3 numaralı dörtgen silindi" diyor ama 2 numarayı silmeye çalışması gerekiyor ve sonra 3 numara olmadığı için "Nokta(1, 10) konumunda dörtgen yok" hatası veriyor ve son aşamada doğru bir şekilde 2 numaralı kutuyu siliyor... :rolleyes:

   immutable genişlik  = 30;
   immutable yükseklik = 15;
   immutable iki_numara = 1;

void doldur(ref Kağıt kağıt)
{
   kağıt.yerleştir(Dörtgen(Nokta(1, 16), Nokta(14, 20)), 1);
   kağıt.yerleştir(Dörtgen(Nokta(iki_numara, 15), Nokta(4, 26)), 2);
   kağıt.yerleştir(Dörtgen(Nokta(1, 10), Nokta(12, 24)), 3);
}

void çiz(ref Kağıt kağıt) {
   writeln(replicate(" 0 1 2 3 4 5 6 7 8 9", genişlik/10));
   kağıt.çiz();
}

void main()
{
   auto kağıt = Kağıt(yükseklik, genişlik);
   doldur(kağıt);
   çiz(kağıt);

   kağıt.kaldır(Nokta(iki_numara, 15)); çiz(kağıt); // 2 numara
   kağıt.kaldır(Nokta(1, 10)); çiz(kağıt);          // 3 numara
   kağıt.kaldır(Nokta(iki_numara, 15)); çiz(kağıt); // 2 numara
}

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

October 25, 2012

Alıntı (acehreli):

>

Ben bir yanlışlık görmüyorum.

>     kağıt.kaldır(Nokta(iki_numara, 15)); çiz(kağıt); // 2 numara
> ```

> diyorsun ama o anda Nokta(1, 15) 3 numaralı dörtgene ait. O yüzden 3 numaralı dörtgen siliniyor. Ondan sonra gerçekten de Nokta(1, 10) konumunda dörtgen yok.
Sanırım eksik ifade etmişim, yorgunluk işte...

Öncelikle iki_numara değişkeni (2. dikdörtgenin solüst noktasını değiştirir) 0 yaptığınızda algoritma istediğimiz gibi çalışıyor. Çünkü "2 numaralı dörtgen serbest değil" yazıyor. Belki de ilk noktalar (solüst) dörtgen altında kalınca böyle oluyor, değil mi?

Değiştirdiğim kodu, ilk kodun yapıları ile birlikte çalıştırırsanız her aşamada ekrana kağıdı (sütun değeri 0..9 ile birlikte) bastığını göreceksiniz. Bahsettiğim iki_numara ile oyayınca bir satır yukarı aldığımızı ve aynı sütunları paylaşmadığını görebilirsiniz:

'' 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9'
. . . . . . . . . . . . . . . 2 2 2 2 2 2 2 2 2 2 2 2 . . .
. . . . . . . . . . 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 2 2 . . .
. . . . . . . . . . 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 2 2 . . .
. . . . . . . . . . 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 2 2 . . .
. . . . . . . . . . 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 2 2 . . .
. . . . . . . . . . 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 . . . . .
. . . . . . . . . . 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 . . . . .
. . . . . . . . . . 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 . . . . .
. . . . . . . . . . 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 . . . . .
. . . . . . . . . . 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 . . . . .
. . . . . . . . . . 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 . . . . .
. . . . . . . . . . 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 . . . . .
. . . . . . . . . . 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 . . . . .
. . . . . . . . . . . . . . . . 1 1 1 1 1 . . . . . . . . .
. . . . . . . . . . . . . . . . 1 1 1 1 1 . . . . . . . . .
'2 numaralı dörtgen serbest değil'
' 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9'
. . . . . . . . . . . . . . . 2 2 2 2 2 2 2 2 2 2 2 2 . . .
. . . . . . . . . . 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 2 2 . . .
. . . . . . . . . . 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 2 2 . . .
. . . . . . . . . . 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 2 2 . . .
. . . . . . . . . . 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 2 2 . . .
. . . . . . . . . . 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 . . . . .
. . . . . . . . . . 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 . . . . .
. . . . . . . . . . 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 . . . . .
. . . . . . . . . . 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 . . . . .
. . . . . . . . . . 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 . . . . .
. . . . . . . . . . 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 . . . . .
. . . . . . . . . . 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 . . . . .
. . . . . . . . . . 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 . . . . .
. . . . . . . . . . . . . . . . 1 1 1 1 1 . . . . . . . . .
. . . . . . . . . . . . . . . . 1 1 1 1 1 . . . . . . . . .
'3 numaralı dörtgen silindi'
' 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9'
. . . . . . . . . . . . . . . 2 2 2 2 2 2 2 2 2 2 2 2 . . .
. . . . . . . . . . . . . . . 2 2 2 2 2 2 2 2 2 2 2 2 . . .
. . . . . . . . . . . . . . . 2 2 2 2 2 2 2 2 2 2 2 2 . . .
. . . . . . . . . . . . . . . 2 2 2 2 2 2 2 2 2 2 2 2 . . .
. . . . . . . . . . . . . . . 2 2 2 2 2 2 2 2 2 2 2 2 . . .
. . . . . . . . . . . . . . . . 1 1 1 1 1 . . . . . . . . .
. . . . . . . . . . . . . . . . 1 1 1 1 1 . . . . . . . . .
. . . . . . . . . . . . . . . . 1 1 1 1 1 . . . . . . . . .
. . . . . . . . . . . . . . . . 1 1 1 1 1 . . . . . . . . .
. . . . . . . . . . . . . . . . 1 1 1 1 1 . . . . . . . . .
. . . . . . . . . . . . . . . . 1 1 1 1 1 . . . . . . . . .
. . . . . . . . . . . . . . . . 1 1 1 1 1 . . . . . . . . .
. . . . . . . . . . . . . . . . 1 1 1 1 1 . . . . . . . . .
. . . . . . . . . . . . . . . . 1 1 1 1 1 . . . . . . . . .
. . . . . . . . . . . . . . . . 1 1 1 1 1 . . . . . . . . .
'2 numaralı dörtgen silindi'
'
Henüz yeni kodu denemedim. Sanırım daha lezzetli ve müsait bir vakitte satır satır incelemeye can atıyorum...:)

-- 
[ Bu gönderi, <http://ddili.org/forum>'dan dönüştürülmüştür. ]
October 24, 2012

Ben bir yanlışlık görmüyorum.

   kağıt.kaldır(Nokta(iki_numara, 15)); çiz(kağıt); // 2 numara

diyorsun ama o anda Nokta(1, 15) 3 numaralı dörtgene ait. O yüzden 3 numaralı dörtgen siliniyor. Ondan sonra gerçekten de Nokta(1, 10) konumunda dörtgen yok.

Doldurma adımlarından sonra da çiz() koyunca daha iyi anlaşılıyor.

Bu arada, herhalde o kadar önemli değil ama ben bu kodla biraz oynamıştım. Bence aşağıdaki gibi daha iyi oldu. Önemli bir fark, artık sağ alt noktası Dörtgen'e dahil değil. Böylece D dilimleriyle filan daha tutarlı oldu:

import std.stdio;
import std.array;
import std.string;
import std.conv;

struct Nokta
{
   size_t satır;
   size_t sütun;
}

struct Dörtgen
{
   Nokta solÜst;
   Nokta sağAlt;

   int opApply(int delegate(Nokta nokta) işlem) const
   {
       int sonuç = 0;

       foreach (satır; solÜst.satır .. sağAlt.satır) {
           foreach (sütun; solÜst.sütun .. sağAlt.sütun) {
               sonuç = işlem(Nokta(satır, sütun));

               if (sonuç) {
                   return sonuç;
               }
           }
       }

       return sonuç;
   }
}

struct Düzlem(T)
{
   T[][] konumlar;          // Üç boyut: satır, sütun, ve dörtgen numaraları

   this (size_t boy, size_t en)
   {
        konumlar = new T[][](boy, en);
   }

   auto ref opIndex(Nokta nokta)
   {
       return konumlar[nokta.satır][nokta.sütun];
   }

   auto ref opIndex(Nokta nokta) const
   {
       return konumlar[nokta.satır][nokta.sütun];
   }

   int opApply(int delegate(const(T)[] satırElemanları) işlem) const
   {
       int sonuç = 0;

       foreach (satır; konumlar) {
           sonuç = işlem(satır);

           if (sonuç) {
               return sonuç;
           }
       }

       return sonuç;
   }
}

struct Kağıt
{
   Düzlem!(size_t[]) konumlar;
   Dörtgen[size_t] dörtgenler; // Numaradan dörtgene eşleme tablosu

   this (size_t boy, size_t en)
   {
       this.konumlar = Düzlem!(size_t[])(boy, en);
   }

   void yerleştir(Dörtgen dörtgen, size_t numara)
   {
       // Her konumun en üstüne bu dörtgenin parçası gelir
       foreach (nokta; dörtgen) {
           konumlar[nokta] ~= numara;
       }

       // Daha sonra numarasından dörtgen elde edebilmek için
       dörtgenler[numara] = dörtgen;
   }

   // Dörtgeni oluşturan konumların en üstünde 'numara' varsa true döndürür
   bool serbest_mi(size_t numara) const
   {
       auto dörtgen = numara in dörtgenler;
       // Daha önce yerleştirdiğimize göre eşleme tablosunda da bulunmalı.
       assert(dörtgen, format("%s numaralı dörtgen bulunamadı"));

       foreach (nokta; *dörtgen) {
           if (konumlar[nokta].back != numara) {
               // Bu dörtgenin en üstte olmadığı bir konum bulduk
               return false;
           }
       }

       // Buraya geldiysek dörtgeni oluşturan bütün noktalarda en üstte
       // 'numara' var demektir. Yani, dörtgen serbest.
       return true;
   }

   enum Kaldırıldı { evet, hayır };

   Kaldırıldı kaldır(Nokta nokta)
   {
       Kaldırıldı sonuç = Kaldırıldı.hayır;
       auto konum = konumlar[nokta];

       if (konum.empty) {
           writefln("%s konumunda dörtgen yok", nokta);

       } else {
           auto dörtgenNumarası = konum.back;  // En üstteki dörtgenin numarası
           auto dörtgen = dörtgenNumarası in dörtgenler;

           // Daha önce yerleştirdiğimize göre eşleme tablosunda bulunmalı.
           assert(dörtgen, format("%s numaralı dörtgen bulunamadı"));

           if (serbest_mi(dörtgenNumarası)) {
               sil_(dörtgenNumarası);
               writefln("%s numaralı dörtgen silindi", dörtgenNumarası);
               sonuç = Kaldırıldı.evet;

           } else {
               writefln("%s numaralı dörtgen serbest değil", dörtgenNumarası);
           }
       }

       return sonuç;
   }

   // Bu işlev arayüzün parçası değil; yalnızca bu yapı çağırsın diye...
   private void sil_(size_t dörtgenNumarası)
   {
       auto dörtgen = dörtgenNumarası in dörtgenler;
       // Daha önce yerleştirdiğimize göre eşleme tablosunda bulunmalı.
       assert(dörtgen, format("%s numaralı dörtgen bulunamadı"));

       foreach (nokta; *dörtgen) {
           konumlar[nokta].popBack();
       }

       dörtgenler.remove(dörtgenNumarası);
   }

   void çiz() const
   {
       foreach (satır; konumlar) {
           foreach (konum; satır) {
               // Her konumda en üstte olanı çizeceğiz
               auto görünüm = konum.empty ? "." : konum.back.to!string;
               writef(" %s", görünüm);
           }

           writeln();
       }
   }
}

void doldur(ref Kağıt kağıt)
{
   kağıt.yerleştir(Dörtgen(Nokta(3, 3), Nokta(8, 8)), 1);
   kağıt.yerleştir(Dörtgen(Nokta(8, 15), Nokta(11, 19)), 2);
   kağıt.yerleştir(Dörtgen(Nokta(5, 5), Nokta(10, 11)), 3);
   kağıt.yerleştir(Dörtgen(Nokta(4, 4), Nokta(7, 7)), 4);
}

void main()
{
   auto kağıt = Kağıt(20, 20);

   doldur(kağıt);
   kağıt.çiz();

   kağıt.kaldır(Nokta(0, 0));    // Boş bir nokta
   kağıt.kaldır(Nokta(8, 8));    // Kaldırılamaz çünkü serbest değil
   kağıt.kaldır(Nokta(4, 4));    // Serbest
   kağıt.kaldır(Nokta(8, 8));    // Şimdi kaldırılabilir çünkü artık serbest
   kağıt.çiz();
}

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

October 25, 2012

Ama 3 numaralı kutu 1, 10 (on)'da o yüzden 1, 15 (onbeş) verdiğimizde bunun kalkması doğru mu?

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

October 25, 2012

Estağfurullah hocam yazı olayı böyle...:)

Ancak şaka maka Nokta ve Kağıt yapıları bayağı gelişti. Ben derslerden beri hatırlarım, bununla çok örnek çözülüyor. Acaba diyorum; bu yapıları bir sınıf altında toplayıp "universal" bir hale getirsek mi? Çünkü çıktı yönünü değiştirip, bir dosya hatta grafik ekranı bile yapabiliriz. Düşünsene nokta basacağına setpixel() işlevini çağıracak.

Hoş bir kaç ay evvel kutuyu kapat oyununda da benzer bir şey denemiştin ya da ben şununla karıştırıyorum: Ekran dışına taşan ve ok yönleri ile kağıt üzerinde gezen başka bir uygulaman vardı. Evet, evet karıştırıyor olmalıyım ne alaka kutu!

Kutular ile kafayı bozdum...:)

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

October 25, 2012

Oldu! Biraz kafayı bozmak gerekiyormuş...:)

Olayı eşleştirme ile hallettim. Yani tıklanan kutunun o an ki görüntüsünü ekrandan kesip kendisi ile XOR'ladım. Şu işlev şimdilik işimi görüyor:

bool eşMi(SDL_Surface * a, SDL_Surface * b) {
 bool AYNI = true;
 size_t SINIR = a.w * a.h;

 while(SINIR+1) {
     if((cast(uint*)a.pixels)[SINIR] ^
        (cast(uint*)b.pixels)[SINIR]) {
       AYNI = false;
       break;
     }
     SINIR--;
 }
 return AYNI;
}

http://imageshack.us/a/img90/3861/kutular.gif

Gerçi bazen tıklama güçlüğü hissediyorum. Herhalde keyEvent() ile mouseEvent() arasında bir anlaşmazlık var. Onu sdlmini'yi geliştirdiğim zaman çözebileceğimi zannediyorum. Üstteki ekran görüntüsü ve işlev ise aşağıdaki do while döngüsünde dönmekte. Meğer olay bu kadar basitmiş ama ne kadar sistem kaynağı harcıyor bilmiyorum... :rolleyes:

     int mX, mY;
     do {
       SDL_Clear();
       foreach(kutu; kutular) kutu.exec(scr);

       if(!mouseEvent(mX, mY)) {
         int sil = int.max;
         foreach(kutu; kutular) with(kutu.rect) if(
               ( ( x <= mX ) && ( y <= mY ) ) &&
               ( (x+w >= mX) && (y+h >= mY) )     ) {
            sil = kutu.id;
           kutu.id.write("\t");
         } else sil = int.max;

         if(sil != int.max) {
           if(eşMi(crop(kutular[sil].rect), kutular[sil].copy)) {
             kutular[sil].clear;
             kutular = kutular[0..sil] ~ kutular[sil+1..$];
           }
         }
         writeln(mX, "/", mY);
       }
     } while(escEvent(1)); // ESC için bekle ve çık...

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

October 25, 2012

Programda tabii ki hata olabilir ama yine de sorun yok. :) İki durum çok farklı sayılır.

iki_numara == 0 durumu:

  1. Nokta(0, 15)'teki dörtgeni kaldırmak istiyorsun; ama olmuyor çünkü orada 2 var onun üstünde de 3 var.

  2. Nokta(1, 10)'daki dörtgeni kaldırmak istiyorsun; oluyor ve 3 gidiyor.

  3. Nokta(0, 15)'teki dörtgeni kaldırmak istiyorsun; orada 2 var ve üstü boş; gidiyor.

iki_numara == 1 durumu:

  1. Nokta(1, 15)'teki dörtgeni kaldırmak istiyorsun; orada 3 var; gidiyor. (Bence zaten fark tam da burada: 2 numarayı kaydırıyorsun ama deneyini de değiştirmiş oluyorsun. Bu deneyde 2'nin köşesi dediğin yerde bambaşka bir dörtgen var. O gidince bütün olay değişiyor. Örneğin, bir sonraki adım zaten bu yüzden başarısız oluyor.)

  2. Nokta(1, 10)'daki dörtgeni kaldırmak istiyorsun; orada dörtgen yok çünkü 3 bir önce silindi.

  3. Nokta(1, 15)'daki dörtgeni kaldırmak istiyorsun; oraada 2 var; üstü boş; gidiyor.

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

October 25, 2012

Ben seni başından beri yanlış anlamışım galiba çünkü evet, 1,15 verildiğinde de 3 numaralı dörtgen kalkmalı çünkü o nokta seçildiğinde de 3 numaralı dörtgen var.

Sen ise dörtgenler yalnızca sol üst köşeleriyle belirlensinler istemişsin. Benim programın senin istediğinle bir ilgisi yok. :) Benimki "şu noktaya tıkladığımda rastladığım dörtgeni üstünde başka dörtgen yoksa kaldır" mantığına yardım ediyor. Pardon... :blush:

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]