Basit vektör işlemleriyle ilgili bir oyun (Toplama)

Bu seferki test oyunumuz da vektör işlemleri üzerine. İlk olarak toplama işlemini ele aldım. Koordinat sisteminde verilen iki vektörün toplamını bulmaya dayalı bir oyun. Cevap, toplam vektörünün bitiş ucunu seçerek veriliyor, vektörün başlangıcı (0,0) noktası olarak kabul ediliyor.

Eğer verilen cevap doğruysa seçilen vektör yeşil renkle gösteriliyor, yanlışsa kırmızıyla. Bu durumda doğru cevap tabii ki yeşil bir vektörle gösteriliyor. Her doğru cevap 100 puan. Belki ileride doğru cevapla beraber toplanan vektörlerin oluşturduğu paralelkenarı da çizdirebilirim, ya da vektörlerden birini diğer vektörün ucuna kaydırıp toplamı gösterebilirim.

 

Oyun

 

Doğru denklemleri oyunu – 2

Bu oyunda da geçen oyunun tersi yapılıyor. Her soruda değişik renklerde dört doğru grafiği veriliyor ve altta verilen denklemin hangi grafiğe ait olduğu soruluyor.

Tablet ve cep telefonları için tuşları ve ekran büyüklüklerini bir aksilik çıkmazsa bu hafta iyileştirmeyi düşünüyorum.

Oyun

Bir doğru denklemi bulma oyunu

Geçen yıl bir veli toplantısında bir velinin sorduğu şu soru beni hayretlere düşürmüştü:

– Çocuklar matematik çalışmak için ders kitabından başka nereden soru bulabilir? Ders kitabında çok az soru var.

Ders kitabında çocuğun öğrenmesi beklenen her fikir ya da yöntem için normalde en fazla on tane soru oluyor. Bunların da çoğu derste yapılıyor ya da ev ödevi olarak veriliyor. Sınava hazırlanmak için kitaptaki soruları çöz deyince de çocuklar genelde biz onları zaten yaptık diyorlar. Anlaşılan bu veli de böyle bir cevap almıştı ve daha başka soru kaynağı arıyordu. Oysa sonsuz sayıda sayı olduğuna göre yeni soru üretmek çocuk oyuncağıdır. Kitaptaki örnek sorular alınır ve değişik sayılarla sonsuz adet soru yapılır. Tabii ebeveynler bu iş için zaman harcamak istemez. Ne de olsa sorunun kolay çözülebilmesi için sayıları doğru seçmek biraz enerji gerektiren bir işlemdir.

Geçenlerde çocuklar eve gelince bana bir android uygulaması gösterdi. Verilen bir tamkare sayının kare kökünü bulmaya dayanan bir oyun. Nedense çocuklar bunu sevmişti. Ben de matematik soru üretme işini böyle denemeye karar verdim. İlk programımda x-y koordinat sisteminde verilen bir doğru grafiğinin y = mx + n şeklindeki denklemini seçeneklerden bulma şeklinde bir test oyunu yaptım. Her doğru cevaba 100 puan veriliyor. Bakalım çocukların ilgisini hiç çekecek mi?

Oyun

google translate oyunu

Yapay zekanın yakın gelecekte ele geçiremeyeceğine inanılan alanlardan çeviri konulu bir oyun. Üç kelimeden oluşan bir cümle ve iki adet dil seçip oyuna başlıyoruz. Bu cümleyi ait olduğu dilde sisteme giriyoruz ve diğer seçtiğimiz dile tercüme ettiriyoruz. Sonra her adımda tercümeyi ve dili yeni girdi olarak kullanıp diğer dile geri tercüme ettiriyoruz. Şansımız yaver giderse bir süre sonra tercümeler kararlı bir duruma ulaşıyor, bunu da en son elde ettiğimiz tercüme adımının daha önce de elde edildiğinden anlayabiliriz, yani kısaca bir döngü elde ettiğimizde duracağız. Oyunun amacı bir döngü için en yüksek adım sayısını bulmak.

Örnek: Türkçe – İngilizce

Ölme eşeğim ölme                         Dying my butt dying

Dying my butt dying                      Popom ölüyor ölüyor

Popom ölüyor ölüyor                      Popom is dying and dying

Popom is dying and dying             Popom ölüyor ve ölüyor.

Popom ölüyor ve ölüyor.                Popom is dying and dying.

Popom is dying and dying.            Popom ölüyor ve ölüyor.

Altı adımda döngüye ulaşmık olduk.

Yıpratma savaşı

Bu oyunda bireyler yine ortak kaynaklar için mücadele ediyor. Bu sefer mücadele kazanç ya da kayıplarını bir tablo şeklinde göstermeyeceğiz. Bunun yerine bireylerin bu ortak kaynak için ne kadar masrafa gireceğine bakacağız. Bu oyunda da kaynak ve masraf tabii ki çok çeşitli şeyler olabilir.

Örnek: İki birey de yiyecek için kavga ediyor olabilir. Burada yiyecek ortak kaynak. Kavganın ne kadar süreceği de masraf olabilir. Kavga uzadıkça yaralanma riski artabilir ve eğer bu yiyecek kazanılamazsa bir başka kavga için hem zaman hem de enerji yetmeyebilir. İki bireyin aynı yiyecek için planladığı masraflar da farklı olabilir. İkisi de aynı derecede aç olmayabilir.

A ve B türü bireylerin aşağıdaki tabloya göre davrandıklarını varsayalım.

 

[table id=9 /]

\(V \) : kaynağın değeri

\(m_{a} \) : A bireyinin bu kaynak için yapmaya hazır olduğu masraf

\(m_{b} \) : B bireyinin bu kaynak için yapmaya hazır olduğu masraf

Daha yüksek masrafa girmeye hazır olan birey mücadeleyi kazanıyor. Tabloya göre iki birey de daha düşük masraf kadar harcama yapmış oluyor. Örnek olarak eğer masraf mücadele zamanıysa iki birey de hangi birey daha kısa mücadele etmeyi tercih etmişse o kadar süre mücadele ettiğinden, o kadar masraf yapmıştır. Mücadeleyi kazanın birey yaptığı masrafa karşın ödülü (kaynağı) de tek başına kazanıyor.

Eğer iki birey de eşit masrafta bulunmuşsa, net kazançları kaynağın yarısı (eşit paylaşıyorlar) eksi yaptıkları masraf kadardır.

Eğer bütün bireyler \(M\) masraflı stratejiyi benimserse o zaman \(M+\delta M \) masrafa (çok az bir ek masraflar) hazır bir mutant populasyonu işgal edebilir.

Örnek: \(V=4 \), \(m_{a}=1 \) olsun. Bu populasyona \(m_{b}=1.1 \) olan bir mutant katılsın. A bireyleri birbirleriyle karşılaştığında net kazançları \(\frac{4}{2} – 1=1 \) olacak. Buna karşın B bireylerinin A bireylerine karşı net kazançları \(4-1=3 \) olacak. A bireyleri ise bu karşılaşmalarda \(-1 \) kaybedecekler. Buna göre B stratejisi A stratejisine göre avantajlı olacak.

Başka bir örnek: Eğer populasyondaki bireyler kaynağın değerinin yarısından daha fazla masrafa girmeye hazırsa ilginç bir strateji bu populasyonu işgal edebiliyor. Hiç masrafa girmemek. Mutantların çok az olduğunu dikkate alırsak populasyondaki normal bireylerin çoğunlukla birbirleriyle karşılaşacağını görebiliriz. Bu durumda mutantlar hiçbir mücadeleyi kazanamayacak ama masrafa girmediklerinden kayıpları da olmayacak. \(\frac{V}{2}-m_{a} \) değeri bu senaryoda negatif olacağından normal bireyler birbirleriyle karşılaşmalarından hep kayıpla çıkacaklar. Bu da mutantları daha avantajlı duruma getirecek, çünkü aynı başlangıç durumuyla bir kayıpları olmayacak.

Bu örneklerden anlaşılıyor ki sabit bir stratejiyle populasyon mutantlara karşı korunamıyor. Peki nasıl bir strateji güdülmeli?

Problemi matematiksel olarak çözdüğümüzde (Çözümün nasıl yapıldığını burada vermeyeceğim) şöyle bir dağılım çıkıyor:

\(p(x)=\frac{1}{V}\cdot{e^{\frac{-x}{V}}} \)

Bireyler bu dağılıma göre rastgele bir x değerini masraf olarak seçmeli. Bu işlemin nasıl yapılacağı ilk bakışta karışık tabii. Özellikle doğada ‘basit’ canlıların bunu nasıl yaptığı. Bu dağılım daha basit bir şekilde söyle ifade edilebilir. Bu stratejiye göre davranan birey başlangıçta bir sabit sayı (\(\frac{1}{V}\)) seçiyor. Bu seçim tabii ki evrim sürecinde oluşmuş da olabilir, yani genetik olarak nesilden nesile ufak değişimlerle aktarılan bir sabit. Birey her birim zaman sonunda eğer rakibi hala mücadeleye devam ediyorsa bu sabit olasılıkla ya mücadeleye devam edecek ya da bırakacak. Bu davranış şeklini her birim zamandan sonra uygularsa yukarıda verilen dağılıma ulaşmış olur. Örneğin, sabit olasılık değeri 0.5 ise, mücadele sırasında her dakikadan sonra birey yazı tura atabilir. Eğer rakip devam ediyorsa ve tura gelirse devam eder, yazı gelirse çekilir. Bir sonraki dakikanın sonunda aynı işlemi takrarlar.

Bu yöntem aslında kısmen kolayca anlaşılabilir. Eğer rakipler birbirlerinin durumundan ek bilgi (acaba rakip mücadeleye devam edecek mi yoksa etmeyecek mi) elde edemiyorsa o zaman her adımda kullanılan olasılığı değiştirmek için bir neden yok. İlk başta hangi olasılık kullanılmışsa o olasılıkla devam edilebilir.

Ayrıca bu çözümün başka bir güzel tarafı da bazen en iyi stratejinin rastgele hareket etmek olduğunu göstermesi.

Aşağıdaki oyun linkinden bu oyunun oynanabileceği sayfaya erişilebilir. Oyunda sadece sabit stratejiler yer almakta. Ayrıca bu sabit stratejiler oyun başlamadan önce belirleniyor. Bu oyunun değişik varyantları da programlanabilir (ileride yapmayı düşünüyorum). Örneğin, bireyler rakibinin görünüşünden ek bilgiler elde edebilir. Büyüklüğünden, saldırganlığından ve daha başka özelliklerinden ne kadar masraf yapmaya eğilimli olduğunu çıkarıp ona göre değişken stratejiler uygulayabilir.

Oyun linki

Bir Kelime

Sonunda JavaScript öğrenme programım altında bir zamanlar televizyon ekranı başında oynadığımız “Bir Kelime Bir İşlem” yarışmasının “Bir Kelime” kısmını da bitirdim. Aşağıdaki linkten oyunu oynayabilirsiniz.

Sayfa ilk yüklendiğinde bütün imla kılavuzu da beraber yükleniyor. Bu şimdilik yaklaşık 1.5 MB yer tutuyor. Bundan sonra sayfa kapatılana kadar bir daha böyle bir yüklemeye gerek yok, yani oyun çevrimdışı da oynanabilir.

Oyun için önce rastgele yedi harf seçmek gerekiyor. Bu seçimi oyuncu ünlü ya da ünsüz olacak şekilde yapıyor. Bu tuşlar solda. Yedi harf de seçildiğinde oyun başlıyor. Oyuncu harflerin üzerine basarak kelimesini renkli alanda oluşturabiliyor. Bu sırada bir tane de joker harf kullanma hakkına sahip. Bu harfi joker tuşuna (ortadaki) bastıktan sonra aşağıda çıkan klavyeden seçerek yapıyor. Oyuncu en iyi kelimeyi bulduğunu düşündüğünde kabul tuşuna basarak çözümünü kontrol ettiriyor. Eğer kelime imla kılavuzunda mevcutsa puan alıyor, değilse alamıyor. Oyunun her anında programa o harflerle yazılabilecek en uzun kelimeler sorulabiliyor. Çözüm tuşuna basıldığında program bulunabilecek en uzun kelimeleri alttaki alanda gösteriyor.

Kullandığım çözüm bulma algoritması da basit bir şey. Önce her harf için bir map oluşturuyorum. Bu map içinde o harfin bulunma adedine göre kelimeleri grupluyorum. Yani bir grup içinde bir adet a harfi bulunan kelimelerden oluşuyor, bir başka grup içinde iki adet a harfi bulunduran kelimelerden. Bu şekilde bütün imla kılavuzunu hazırlıyorum. Oyunda çözüm istendiğinde seçilmiş harflerin N’li (N maksimum harf sayısı olan 7’den 2’ye kadar) kombinasyonlarını oluşturuyorum ve içinde bu harfleri seçildikleri adet kadar barındıran kelime gruplarının kesişimlerini buluyorum. Sonra bu kesişim kümesindeki kelimelerin uzunluklarına bakıyorum. Eğer kelimenin uzunluğu kombinasyondaki harf adedi kadarsa jokersiz, harf adedinden bir fazlaysa bir jokerli çözüm bulunmuş oluyor. Bu çözümlerin hepsini de çözüm kümesine ekliyorum.

 Bir Kelime

Bir İşlem

Yurt dışında “Countdown”, Türkiye’de ise “Bir Kelime Bir İşlem” adıyla bilinen yarışma programının işlem kısmını sonunda bir Web uygulaması olarak bitirmiş bulunuyorum. Sayfa düzeni şimdilik mobil cihazlar göz önünde tutularak hazırlanmış durumda.

Oynanış: Oyunda hedef verilen altı adet sayıyyla dört işlem yaparak hedef sayıya mümkün olduğunca yaklaşmak. Bir kullanılan sayı bir daha kullanılamıyor. Bu sayılar kırmızı kenarlarla gösteriliyor. Sarı kenarlı sayılar kullanılabilecek sayıları gösterirken, seçilmiş sayı da yeşil kenarla gösteriliyor. İşlemin ilk sayısını seçtikten sonra bir işlem seçiliyor. Ardından da bu işlem için gereken ikinci sayı seçiliyor. Bu aşamada program işlemin sonucunu ilk seçilen sayının yerine yazıyor ve ikinci sayıyı kullanılmayacak şekilde işaretliyor. Bir sonraki adımda işlemin sonucu hemen kullanılabilsin diye bu sayı otomatik olarak seçiliyor. Eğer başka bir sayı ile işlem yapılmak istenirse kullanıcı sarı sayılardan birini seçebilir. Bu durumda seçilen sayı değişecektir.

İşlemlerin altındaki sırada ise oyunla ilgili tuşlar bulunmakta. En soldaki tuş o ana kadar bulunmuş en yakın sonucu çözüm olarak değerlendirmeye sokuyor. Bu tuşa basılınca kalan zamana ve hedefe ne kadar yaklaşıldığına göre bir skor hesaplanıyor. Onun yanında çözüm tuşuna basılınca program hedefe olası en yakın çözümü hesaplıyor ve bu tuşların altındaki alana bu çözümü yazıyor. Geri al tuşuna basınca son yapılan işlem geri alınıyor ve kullanıcı başka bir işlem yapabiliyor. Bu şekilde oyunun en başına dönmek mümkün. En sağdaki tuşla da yeni bir oyun başlatılıyor.

Programla ilgili biraz da bilgi vereyim. Oyun HTML, CSS ve Javascript kodlarından oluşuyor. Çözüm algoritması verilen sayılarla olası bütün işlemleri yapıyor ve her işlemden sonra sonuçla karşılaştırıyor. Eğer ciddi bir hata yapmadıysam çözüm tuşuna (ampule) basınca program en iyi çözümü gösterecektir. Bu en iyi çözüm sırasında bazen gereksiz işlemler de oluyor ama sonucu etkileyen bir durum değil bu. Henüz bu gereksiz işlemleri çözümden çıkaracak kısmı programlamadım.

Program mobil cihazlarda CSS viewport birimleri destekleyen tarayıcılarda doğru gösteriliyor. Şimdilik sadece Chrome (51 ve sonrası) ve Firefox (48) versiyonlarıyla test edebildim. Android standard tarayıcıda doğru çalışmadığına dair ekran görüntülerini de gördüm.

Programın geliştirilmesi aşamasında fikirlerinden (Kullanıcı ara birimi ve oynanış) faydalandığım Hatice Savaş’a da teşekkürlerimi sunarım.

Bir İşlem