Perşembe, Eylül 14, 2017

Satranç tahtasında bir birini yemeyen Kaleler (Python 2)

Python ile Satranç tahtasına 8 Kaleyi, bir birini yemeyecek şekilde nasıl yerleştirirsiniz?

sorusuna cevap vermek için uğraşırken, aşağıdaki gibi bir kod yapısına ulaştım.

Bu esnada;
for item in liste döngüsü içinde ;
 liste.remove(item) işlemi yaparken, her seferinde listedeki item sayısı değiştiği için kodun sağlıklı işlemediğini öğrendim.

Bunu çözmek için ya iki ayrı liste kullanmak
ya da for item in list(liste) yapısını tercih etmek gerekiyormuş.

Kod aşağıdaki gibi,
bir birini yemeyecek şekilde Random Kale yerleşimleri üretiyor.







# Birbirini Yemeyen Kaleler
# twitter.com/MuratTatar


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"


Hiç yorum yok: