Advent of Code: 6. Gün
Advent of Code'un 6. gününden herkese selamlar!
"AoC'nin her geçen gün daha da kolaylaşması hk." güzel bir e-posta başlığı olur bence. Gerçekten 6. gün fazlasıyla kolaydı. İlk kısımda zaten hiçbir şey yok, sayıları satır satır okuyup bir dizi dizisine koyduktan sonra son satır yani işleçler geldiğinde işleçleri bir düşürüm (reduce) işlemi ile uygulamaktan ibaretti. Girdiyi okumak çıktıyı okumaktan daha kolaydı, öyle diyeyim.
Her ne kadar ikinci kısım da zor olmasa da yine de birkaç dakika oyaladı diyebilirim. Fakat fark ettim ki aslında girdideki sayıların hizalanması belirli bir şekilde hazırlanmış, ve sonuç da bu hizaya bağlı. Bu da soruyu aslında basit bir transpoze sorusu hâline getiriyor. Satırların hepsinin biriktirdikten sonra bütün girdiyi transpoze edip en sağ tarafta (transpoze öncesi en alta denk geliyor) kalan karakterin işlecine göre her bir satırdaki oluşan sayının kendisini uygulayınca soru çözülüyor. Göstermek gerekirse:
312 41 2 798
966 365 23 32
793 444 201 5
+ * * +
girdisini transpoze edince
397+
169
263
434*
164
54
22*
230
1
7 +
93
825
oluyor. Dikkat ederseniz son karakteri saymadığımızda her bir satırın tıraşlı (trim) hâli bize birer sayı veriyor. Son karakter de bir sonraki işlece gelene kadar yapmamız gereken işlemi söylüyor. 397 + 169 + 263'ten sonra 434 * 164 * 54 diye gidiyor sayılarımız. Bunları toplayınca da sonucumuz çıkıyor nitekim.