1848 Yılında Max Bezzel, bir kuyuya taş atmış. Yıl olmuş 2017 hala insanları uğraştırıyor. Öyle ki geçtiğimiz günlerde Clay Mathematik enstitüsü Bezzel'in oraya attığı 8 Vezir sorusunu güncelleyerek, makul ve hızlı bir çözüm üreten algoritma için 1 Milyon Dolar Ödül koydu.
Sorunun orijinali şu şekilde: 8x8'lik Satranç tahtasına 8 veziri öyle bir şekilde yerleştirin ki, hiç bir vezir diğerini yemesin.
Sorunun güncel şekli ise şu: Öyle bir yöntem/yazılım olsun ki; NxN'lik Satranç tahtasına N tane veziri yerleştirsin ve hiç bir vezir diğerini yemesin. Hatta yazılım, rastgele sayıda bir birini yemeyen vezirler tahtaya yerleştirildikten sonra çalışmaya başladığında da kalan vezirleri yerleştirsin. Elbetteki bunu makul bir süre içinde yapsın.
NŞA'da sorunun orijinal halinin 4,5 milyar olasılık içinden 92 doğru çözümü var. Ancak soruyu klasik yöntemler kullanan bir yazılım ile çözmek hayli uzun sürüyor. Clay enstitüsü de aslında "teker teker deneme" yönetime alternatif arıyor ve bunun için böyle bir ödül veriyor.
İcraat'a gelelim..
Sorunun cevabı elbetteki burada yok. Güçlü bir alternatif bulmuş olsa idim, şimdi Clay'e yazıyor olurdum ;) Ancak normal bir işleyiş için prototip kabilinden bir kodlamanın nasıl olabileceğine dair yazdığım kodları paylaşacağım.
Bilindiği gibi Vezir, yatay dikey ve çapraz hareket etmekte. (Çapraz'ı da katınca benim makinada sonuç için hayli beklediği için yatay ve dikey eksenine yani aslında Kale için bir çözüm sunmuş olacağız)
- Önce, rastgele seçim için Choice modülü import ediyoruz
- Yatay eksen için harfleri, Dikey eksen için rakamları ayarlıyoruz
- Her karenin yerinin olduğu tahta dizisini elde ediyoruz( a1,a2... b1,b2.. h7,h8 )
- x defa, tekrar edecek şekilde; tahta içinden rasgele bir seçim yapıyoruz, yatay ve dikey koordinatına bakıp o yeri tahtadan çıkarıyor, kaleler'e ekliyoruz.
her seferinde daha az seçenek arasına, rastgele bir kale ekliyor ve bunun yatay ve dikeylerini yine tahtadan çıkarıyoruz.
Markdown Style ile pek de şık görünmedi.from random import choice
harfler=["a","b","c","d","e","f","g","h"]
x=8
tahta=[]
ar=[]
for i in harfler:
for j in range(1,x+1):
ar = [i,j]
tahta.append(ar)
kaleler=[]
for k in range(1,x+1):
r = choice(tahta); kaleler.append(r)
print "random yerlesim:", r
bas=r[0]; son=r[1]
for t in list(tahta):
if t[0]==bas: print "yatay elenen kesisim karesi",t; tahta.remove(t)
if t[1]==son:
print "dikey elenen kesisim karesi",t
try: tahta.remove(t)
except: pass
print "\n\n Birbirini Yemeyen Kale yerlesimleri:\n", kaleler, "\n\n"
Resim olarak da koyayım tab hatası olmasın. Python'da önemli malum..
ilk 6 tane gayet güzel geliyor da 7. ve 8. yi koyana helal olsun boşuna 1 minyun dolar vermiyorlar
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Kaç ihtimal olduğunu hesaplamaya çalıstım fakat çok büyük rakamlar çıkıyor ve ufak bir kısmı bile hesap makinesine sığmadı :)
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
@minnowpond1 has voted on behalf of @minnowpond. If you would like to recieve upvotes from minnowpond on all your posts, simply FOLLOW @minnowpond. To be Resteemed to 4k+ followers and upvoted heavier send 0.25SBD to @minnowpond with your posts url as the memo
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
This post has received a 3.13 % upvote from @drotto thanks to: @banjo.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Peki vezir için düşünürsek algoritmanın içine çapraz kareleri tespit edip ona göre akış sağlayabilecek bir yöntem eklenemez mi? Mesela kaç birim yatay gidiyorsa durduğu yerden aynı birimde dikey gidecek ve harekete başladığı yerden son saptanan kareye kadar olan çapraz eksen de işleme katılmış olacak. Tahtanın dışına çıkıyorsa döngü başa saracak.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Congratulations! This post has been upvoted from the communal account, @minnowsupport, by Murat from the Minnow Support Project. It's a witness project run by aggroed, ausbitbank, teamsteem, theprophet0, someguy123, neoxian, followbtcnews/crimsonclad, and netuoso. The goal is to help Steemit grow by supporting Minnows and creating a social network. Please find us in the Peace, Abundance, and Liberty Network (PALnet) Discord Channel. It's a completely public and open space to all members of the Steemit community who voluntarily choose to be there.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Sizlerinde söylediği üzere çok uzun bir işlem söz konusu. 92 çözümden birisini göreyim niyetiyle Vezir'i yani çapraz fonksiyonu da dahil etmiştim. ~45 dk. civarı çalışıp fan coşmaya başlayınca kapattım.
Tavşanların yavrulama sayılarının borsaya uyması gibi farklı bir bakış açısı lazım belki de..
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit