Tzv oyun eski yıllar soruları ,sorumaratonu soruları,puzzleup,emrehan halicinin zeka oyunları kitaplarından birde projecteuler sitesinden genelde
Bu soru Tzv oyun2020 yarıfinal sorusuydu
Ne yapmak istediğinizi anlayamadım
Benim de ne yapmam gerektiğini anlamam zaman almıştı
Cevabımdan eminim bir yandan sizede güveniyorum bilemedim
Mesela üç hücreyi bağlama ne oluyor
Arama işinin çok az kod içerdiğini fark etmişsinizdir, bunu yapmamı sağlayan şey her hücrenin etrafındaki hücreleri bir liste olarak barındırması.
Şöyle bir mantıkmı var yani her hücrenin etrafındakileri bir listeye alıp
Eğer hücre 2ise hücrenin listesine gir ordan 0 ı seç bu sefer sıfırın listesine gir oradan 2yi seç
Şeklinde ilerlediniz?
Evet.
Aslında şekil simetrik olduğundan sadece 3 tane hücrenin sonuçlarını bulunca 6ile çarpmak yeterli budavar Ortadaki 2ve dışdakilerden ortadaki ile kenardakini
Simetriye dayanırsak olasılıklar eksik çıkar diye düşünüyorum.
Matematiksel olarak mesela en üstteki 2 ile en alttaki 2den oluşan 2020 sayısı aynı sayma işlemini kolaylaştırmak için simetriden faydalanmak işi kolaylaştırır ama
Algoritma üzerine etkisi nasıl olur siz daha iyi bilirsiniz
Algoritmayı koda yanlış aktarmış olabilirim, şimdi ufak sayılarla deniyorum.
Evet bir hata var.
Tebrik ediyorum
class Cell(list):
def __init__(self, t):
self.t = t
list.__init__(self)
def connect(self, l): # üç hücreyi birbirine bağlama
k, n = l
self.append(k)
self.append(n)
k.append(self)
k.append(n)
n.append(k)
n.append(self)
def __repr__(self):
return f"{self.__class__.__name__}({self.t})"
def build(l):
cells = [[Cell(j) for j in i] for i in l]
for satır_index, satır in enumerate(cells[:-1]):
alt_satır = cells[satır_index+1]
for i, c in enumerate(satır):
c.connect(alt_satır[i:i+2])
other = cells
cells = [[Cell(j) for j in i] for i in l[:-1]]
for satır_index, satır in enumerate(cells[:-1]):
alt_satır = cells[satır_index+1]
for i, c in enumerate(satır):
c.connect(alt_satır[i:i+2])
alt_satır = other[-1]
satır = cells[-1]
for i, c in enumerate(satır):
k, n = alt_satır[i:i+2]
c.append(k)
c.append(n)
k.append(c)
n.append(c)
return [j for i in cells + other for j in i]
l = [(0, 0, 0, 0), (0,2,2,2,0), (0,2,0,0,2,0), (0,2,0,2,0,2,0)]
##l = [(0,), (0, 2)]
cells = build(l)
# buraya kadar şekli oluşturduk, şimdi kontrol ediyoruz
twos = [i for i in cells if i.t == 2]
check = lambda c, s = (0,2,0): sum(check(i, s[1:]) for i in c if i.t == s[0]) if len(s) > 1 else sum(1 for i in c if i.t == s[0])
print(sum(check(i) for i in twos))
Bende sizi tebrik ediyorum bravo
Sonra detaylıca inceleyip anlamaya çalışıcam kodunuzu