Lukantima

Advent of Code: 11. Gün

Sondan önceki günden herkese selamlar! Ne yazık ki bazı durumlar sebebiyle bu gönderiyi önce paylaşıp sonra doldurmam gerekti, sürekliliği bozmamak için yerini önceden ayrıdım. Gerçi paylaşım zamanını değiştirebilirdim de ama uğraşmadım onunla pek.

10. güne kıyasla bu gün çok da zor değildi açıkçası. Temel çizge (graph) dolaşım (traversal) problemiydi aslında. İlk kısım için dümdüz bir şekilde çizgeyi A'dan başlatıp B'ye ulaşana kadar olan yolları saydım. Sonradan düşününce aslında çalışmayabilecek bir yöntem olmasına rağmen, birçok uç durumu (edge case) görmediği için, tek seferde çözüme ulaşmamı sağladı bu.

İkinci kısım belirgin derecede daha zordu. İlk başta aynı algoritmayı bu sefer soruda belirtilen iki düğümden (node) geçirmeye zorladım, geçmiyorsa son düğüme ulaşsa bile fark etmiyordu. Fakat nedense sonsuz döngüye girdiği izlenimine kapıldım. Meğersem aslında sadece çok uzun sürüyormuş. Ezberleme (memoization) tekniği kullanmam gerektiğini düşündüm ama neyi tabloya koyup ezberleteceğimi tam bilmiyordum. Ta ki Reddit'e bakana kadar. Hayır, cevabı görmedim. Başka birisi daha ezberleme gerektiğini söylediğini yazmıştı ve ben bu yorumu gördüğümde neyi ezberleyeceğimi bir anda fark ettim. Bu iki zorunlu düğümden geçip geçmediği ve mevcut düğüm, bu üç değişkeni ezberlemek yeterli. Bu sayede en fazla O(n*4) (geçişler bool, yani iki tane iki değer alabilen değişken ile toplam dört olasılık var, hangi düğüm olduğu da n zaten) yani O(n) zamanda soruyu çözebiliyor hâle getirmiş oldum. Oldukça hızlı bir şekilde bana doğru cevabı da verdi nitekim.

#aoc2025 #c3 #programlama