Altıgenler ve 2020


Kaç tane 2020 olduğunu sayma yöntemlerini uygulayarak buldum
Ama bir algoritma kuramadım varmıdır bir yol gösterecek

"Merkezden başlayıp"daki merkez ne?

Aslında o merkeze takılmayalım örnekler üzerinden anlaşılıyor demek istediği tüm 2020leri bulcaz
(Orada demek istediği herhalde her 2 bir altıgenin merkezinde ya o olsa gerek)

Aslında 2den başlıyoruz komşu 0 a gidiyoruz ondan komşusu olan 2ye (burada başladığımız 2ye de dönebiliriz) sonra oradan tekrar komşu 0 diyip bitiriyoruz

102 buldum ama kodunu yazmadım. Cevap belli mi yada bulduğumuz cevabı kontrol edebiliyor musunuz?

Bence az bulmuşsunuz.

Merkezdan başladığımızı varsaydım. Merkezden başlamazsak soruyu çözmek çok zor oluyor.

Bulunan 2020 leri sil.Bundan önce kaç tane sıfır ve kaç tane 2 olduğunu biliyorsan farklı bir yol deneyebilirsin.Yada OpenCv kendi bulsun :smiley:

En zor yöntem bu olurdu herhalde.


Kodu yazıyorum bu arada, atarım.

Ben insan gücü ile karşılaştırma yapmak istemiştim :slight_smile:

102den fazla merkezdekilerde 108tane oluyor

Asıl sıkıntı şekli oluşturmakda, kontrol işlemi kolay olur.

Opencv nedir bilgim yok

2020leri silmeyle olmaz çünkü aynı rakamları tekrar tekrar kullanıcaz

Ben iki kısımdada zorlandım altıgen yerine kare olsa çok daha kolay olurdu algoritma bencede

Yapmamız gereken her hücreye yanındaki hücrelere işaret eden bir nitelik eklemek.

Görüntü işleme kütüphanesi

@Orhan61 yanlış anlamayın sadece merakımdan soruyorum bu soruları nerden buluyorsunuz?

Cevap kaç bu arada? 1024 mü?

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):
        c.connect(alt_satır[i:i+2])
    
    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)]

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))

Ben 648 bulmuştum eminim aslında ama daha doğru cevaplar açıklanmadı