8 Vezir ve 4x4 lük Satranç tahtası

4*4 lük satranç tahtasına 8 vezir yerleştircez.
Şartlar şunlar herhangi sütün satır veya çaprazda en fazla 2tane vezir olacak bu şartı sağlayan kaç durum vardır.
Dikkat! 3 lü çaprazları unutmayalım
Örnek olarak
0110
1001
1001
0110

Cevap 11 mi?

from itertools import combinations

class Taş():
    __slots__ = ("x", "y")

    def __repr__(self):
        return f"Taş({self.x}, {self.y})"

vezir_sayısı = 8

santranç_tahtası_genişliği = 4

santranç_tahtası = [i for i in range(santranç_tahtası_genişliği ** 2)]

olasılıklar = combinations(santranç_tahtası, vezir_sayısı)

sonuçlar = []

vezirler = tuple(Taş() for i in range(vezir_sayısı))

for olasılık in olasılıklar:
    for i, j in zip(vezirler, olasılık):
        i.y, i.x = divmod(j, santranç_tahtası_genişliği)

    for v1, v2, v3 in combinations(vezirler, 3):
        if v1.x == v2.x == v3.x:
            break

        if v1.y == v2.y == v3.y:
            break
        
        if abs(v1.x - v2.x) == abs(v1.y - v2.y) and abs(v1.x - v3.x) == abs(v1.y - v3.y) and abs(v2.x - v3.x) == abs(v2.y - v3.y):
            break

    else:
        sonuçlar.append(olasılık)

print(len(sonuçlar))

1 Beğeni

Cevap yok ama bende 11 bulmuştum doğru olduğunu düşünüyorum

import itertools
a=itertools.product([0,1],repeat=16)
liste=[]
for i in a:
    if sum(i)==8:
        if i[0]+i[1]+i[2]+i[3]<3 and i[4]+i[5]+i[6]+i[7]<3 and i[8]+i[9]+i[10]+i[11]<3 and i[12]+i[13]+i[14]+i[15]<3:
            if  i[0]+i[5]+i[10]+i[15]<3 and i[3]+i[6]+i[9]+i[12]<3:
                if  i[0]+i[4]+i[8]+i[12]<3 and i[1]+i[5]+i[9]+i[13]<3 and i[2]+i[6]+i[10]+i[14]<3and i[3]+i[7]+i[11]+i[15]<3:
                    if i[1]+i[4]<3 and i[2]+i[7]<3 and i[8]+i[13]<3 and i[11]+i[14]<3:
                        if i[1]+i[6]+i[11]<3 and i[2]+i[5]+i[8]<3 and i[4]+i[9]+i[14]<3 and i[7]+i[10]+i[13]<3:
                            liste.append(i)

print(((liste)))
print(len(liste))

çözümünüzü gayet iyi anladım ama öğrenmek istediğim bazı şeyler var birincisi repr nedir?
ikincisi slots nedir?
__xx__alt tirelerin işlevi nedir?
Alt tire kullanmadan slots diye ifade etsek veya başka isim versek değişen ne olurdu?
Birde class yapısı ve özyineleme ile ilgili karşılaştığım örnekler hep basit kalıyor kendimi bu iki konuda eksik görüyorum nasıl geliştirebilrim kendimi
Örneğin önceki konudaki aib in özyineleme li fonksiyonları nı anlayamadım

Cift alt tireli (“sihirli”, “dunder”) fonksiyonlarin/degiskenlerin tamaminin aciklamasini burada bulabilirsin.

Klasik yapidan oteye gidilmis, aslinda x ve y member’lari olan ve str’ye cevrilebilen (print edilebilen) bir sinif tanimlaniyor. Bu sinifi yeniden, daha basitce yazmayi da ezgersiz olarak vereyim mi? Test kodu hazir; kodun geri kalani degismeden ayni sekilde calisacak.

Buna diger konuda elimden geldigince yardim etmeye calistim.

1 Beğeni

kontrol ettim ve aynı sonucu veriyor.

Sonuç aynı olabilir ama yapılan işlemler farklı.

1 Beğeni

evet kesinlikle haklısınız