Lukantima

Advent of Code: 5. Gün

Advent of Code'un 5. gününün gönderisinden herkese selamlar!

5. gün biraz ilginç oldu diyebilirim. Şu aralar hesapsal geometri dersi almaktayım, ve ilginç bir şekilde tam olarak görmekte olduğumuz konulardan birisine ilişkin bir problem çıktı bugünün problemi. Temel olarak elimizde n tane aralık varken m tane sayının bu aralıklardan herhangi birisine düşüp düşmediğini bulma sorusu. Aklıma ilk olarak aralık ağaçları (range tree) geldi derslerden fakat bu problem için fazla verimli olduğunu düşündüğüm için kullanmaktan vazgeçtim. Her ne kadar O(logn) sürede düşüp düşmeme sorusunun cevabını bulabiliyor olsa da yazması oldukça karmaşık olur diye düşündüm. Sonuç olarak bütün aralıkları teker teker döndüm. O(mlogn) yerine O(nm) olsa da yine bir saniyeden kısa sürede cevabı bulabildi çözümüm. Uğraşmadım pek sonrasında.

İkinci kısım biraz daha zordu. İlk başta düz bir şekilde aralıkların boyutlarını topladım ama mükerrer sayıları da topladığım için tutmadı. Burada sayıların hepsini kümeye ekleyip kümenin boyutunu dönme olabilirdi fakat onun yerine aralıkları birleştirip o şekilde aralık uzunluklarını toplamak geldi. Aslında daha zor bir işlem, önişleme kısmı O(n2), teknik olarak daha yavaş denebilir yani, sonuçta üzerine sadece O(n) döngü dönüyoruz. Kümeye eklesem O(nlogn) olacaktı aslında. Buna rağmen fazlasıyla hızlıydı, yine saniyenin altında cevaba ulaştı.

Kısacası, basit çözümlerden kaçmamak lazım, kod çok daha karışık hâle geliyor yoksa.

#aoc2025 #c3 #programlama