Öncelikle eğer direkt videoya ulaşmak istiyorsanız: LINK
Bu problemi ilk etapta “python’da bundan 50 kere çözdük ne var ya :D” diyerek küçümsedim. Çok yanılmışım arkadaşlar. C’nin ne kadar gudubet bela bir şey olabileceğini unutmuşum… Neyse ki üstesinden bir şekilde gelebildik. Video da söylüyorum ama burada tekrar söylemekte fayda olduğunu düşünüyorum. Veri yapıları teoride herkesin bir sonuç üretebileceği ancak genelin daha verimli sonuçlar istediği bir problem çözme yeteneğidir, geliştirilebilir. Elimden geldiğince keşfettiğim şekilde verimli çözmeye çalışıyorum teşekkürler.
Probleme bir bakalım;
-> Elimizde 0 ve 1’lerden oluşan n uzunluğunda bir array var, birde elimizde bir desenimiz var. Bu arrayin içindeki bu desenleri bulup çıkarmamız gerek.
İskeletimiz;
Yukarıda görüldüğü üzere bir adet ‘solve’ fonksiyonu tanımladım, bu fonksiyon arrayimizi ve desenimizi parametre olarak alıyor. Buradan sonrasında arrayimizin elemanını tek tek gezmemiz gerekiyor.
Şu anda arrayimizi tek tek geziyoruz ancak yeterli değil arrayin her elemanının desenimizle uyuşmasına bakmalıyız.
Arrayimiz ve desenimiz tek tek inceleniyor ve eğer uyuşmazlarsa döngü kırılıyor, peki ya eşleşirlerse? Bu noktada eşleştikleri durumu da kodumuza ekleyelim.
Varsayalım ki kodumuz eşleşti, bu durumda eşleştiği elemanın yerini desenin bittiği yerdeki eleman alması gerekiyor. Birazcık netleştirelim
Bunun üzerine sürekli olarak bu işlemi yapmasını istediğimiz için kendisini tekrar tekrar çağırıyoruz ta ki içinde desen bulunmayana kadar. İlk part için bu kadar bundan sonrası bir dosyadan okuma üzerine.
Tam olarak yukarıdaki fonksiyonu yazıyoruz, dosya açma/kapama bunları geçiyor ve ‘fseek’ kısmına kadar geliyorum.
Bunun üzerine ‘ptr’ pointerımız dosyanın sonunda olduğundan kendisini tekrar tanımlayıp arrayimizi ‘realloc’ ediyoruz, bununla birlikte counterımıza null karakterini de ekleyip (+1) string olarak verimizi çekiyoruz, ardından pointerımızı kapatıyoruz.
Bunun üzerine main() üzerinde değişiklikler yapıyoruz. Bu değişiklikler şu şekilde;
get_array()’daki çift pointer **arr olayi önemli şundan dolayı, get_array() içinde ‘realloc’ yapıyoruz bunun için pointer atmamız gerekiyor tek *arr ile sadece stringimizin adrresini atabiliyoruz o yüzden bu şekilde yapıyoruz. Daha fazla okumak istersen bu konu ile alakalı LINK