Advent of Code – 1. Gün: Trebuchet?!

Advent of Code (AoC), noel öncesi dört hafta takvimini takip eden Noel temalı bilgisayar programlama bulmacalarından oluşan her yıl aralık ayında başlayan bir challange’dir. 2015’ten beri devam etmektedir. Programlama bulmacaları çeşitli beceri setlerini kapsar ve herhangi bir programlama dili kullanılarak çözülebilir. Katılımcılar ayrıca hem küresel hem de özel liderlik tablolarında hıza dayalı olarak rekabet ederler. Sorular, genellikle bir hikayenin bir parçası olarak sunulur ve katılımcıların soruları çözerek hikayeyi takip etmeleri gerekir. Advent of Code, birçok programcının kendilerini geliştirmek için harika bir fırsattır ve genellikle çok eğlencelidir.

DALL.E 3 ile oluşturulmuştur
Takvim Arayüzü

Hadi gelin ilk günün bulmacasını çözelim.

Aralık ayının soğuk ve karanlık günleri, programlama dünyasında bir ışık huzmesi gibi parlayan Advent of Code (AoC) ile aydınlanıyor. Her yıl olduğu gibi bu yıl da AoC, dünya çapında binlerce programcıyı ve kod severi, zekice tasarlanmış ve zorlu programlama bulmacalarıyla karşılamaya hazır. 2015 yılından beri devam eden bu geleneksel etkinlik, her seviyeden katılımcıya açık olup, farklı programlama dillerinde çözümler üretme ve algoritmik düşünce yeteneklerini geliştirme fırsatı sunuyor.

Bu yılki AoC maceramız, “Trebuchet?!” isimli ilk gün bulmacasıyla başlıyor. Bulmacamız, global kar üretiminde yaşanan bir sorunu çözmek için seçilen kişinin hikayesini anlatıyor. Elfler, problemlerin yoğun olduğu elli farklı noktayı işaretledikleri bir harita veriyor ve bizden bu yerleri 25 Aralık’a kadar kontrol etmemizi istiyorlar. Her bulmacayı çözerek, ihtiyaç duyulan sihirli yıldızları toplamamız gerekiyor.

Hikayemiz, Elflerin sizi neden bir hava makinesi kullanmadıkları (“yeterince güçlü değil”), sizi nereye gönderdikleri (“gökyüzü”) ve haritanızın neden çoğunlukla boş göründüğü (“çok fazla soru soruyorsunuz”) gibi sorularınıza cevap verirken başlıyor. Ve evet, doğru duydunuz – gökyüzü. Elfler, karın nereden geldiğini düşündüğünüzü sorarken, sizi bir mancınığa yüklediklerini fark ediyorsunuz (“lütfen hareketsiz durun, sizi bağlamamız gerekiyor”).

Son ayarlamalar yapılırken, Elfler kalibrasyon belgelerinin (bulmaca girdiniz), sanat becerilerini sergilemekten heyecanlanan çok genç bir Elf tarafından değiştirildiğini keşfederler. Böylece, Elfler belgedeki değerleri okumakta zorlanıyor. Yenilenmiş kalibrasyon belgesi, her satırda özgün bir kalibrasyon değeri içeren metinlerden oluşuyor. Her satırda, kalibrasyon değeri, ilk ve son rakamı (bu sırayla) birleştirerek tek bir iki basamaklı sayı oluşturarak bulunabilir.

Bu giriş bölümünde, bu ilginç ve eğlenceli bulmacanın genel bir özeti sunuldu. Şimdi, bulmacanın ilk kısmının ayrıntılarına ve çözüm sürecine daha yakından bakalım.


Bulmacanın İlk Kısmı

Advent of Code’un ilk gün bulmacası, Elflerin kalibrasyon belgesi üzerindeki rakamları doğru okumamızı gerektiriyor. Her satırda, belirli bir kalibrasyon değeri, ilk ve son rakamın birleştirilmesiyle oluşuyor.

Bu kısım için yazılan Python kodu, belgedeki her satırı okuyarak ilk ve son rakamı tespit edip, bu rakamları birleştirerek yeni bir sayı oluşturuyor. İşte bu sürecin bir örneği:

Örnek Metin:

1abc2
pqr3stu8vwx
a1b2c3d4e5f
treb7uchet

Kod:

with open("calibration_document.txt", "r", encoding="utf-8") as f:
    lines = f.readlines()

list_of_numbers_each_line = []
list_of_numbers = []
for line in lines:
    for character in line:
        if character.isdigit():
            list_of_numbers_each_line.append(int(character))
    list_of_numbers.append(list_of_numbers_each_line)
    list_of_numbers_each_line = []

count = 0
for number in list_of_numbers:
    count = count + int(f"{str(number[0])}" + f"{str(number[-1])}")

print('Kalibrasyon değerlerinin toplamı:', count)

Bu kodun çıktısı, örnek metinde verilen her satırın ilk ve son rakamlarının birleştirilmesiyle oluşan sayıların toplamını verir. Örneğin, 1abc2 satırı için 12, pqr3stu8vwx için 38 ve bu şekilde devam eder.

Çıktı:

Kalibrasyon değerlerinin toplamı: 142

Bu basit ama etkili çözüm yöntemi, verilen metni analiz ederek aradığımız bilgilere nasıl ulaşabileceğimizi gösteriyor. Programlama dillerinin, özellikle Python’un, metin işleme ve veri analizi konusundaki gücünü ve esnekliğini ortaya koyuyor.

Bu bölümde, bulmacanın ilk kısmının çözümü için gerekli kod ve yöntem üzerinde durduk. Gelecek bölümde, ikinci kısım için gerekli olan ek bilgiler ve bu yeni zorluğun üstesinden gelme stratejimizi ele alacağız.


Bulmacanın İkinci Kısmı

Advent of Code’un ilk günü olan “Trebuchet?!” bulmacasının ikinci kısmı, ilk bölüme kıyasla biraz daha karmaşık bir zorluk sunuyor. Bu bölümde, Elflerin kalibrasyon belgesinde bazı rakamların aslında harflerle yazıldığını öğreniyoruz: “one”, “two”, “three”, “four”, “five”, “six”, “seven”, “eight” ve “nine” kelimeleri de geçerli rakamlar olarak kabul ediliyor.

Bu yeni bilgiyle donanarak, şimdi her satırda gerçek ilk ve son rakamı bulmamız gerekiyor. İşte bu süreçte kullanılan kod ve bir örnek:

Örnek Metin:

two1nine
eightwothree
abcone2threexyz
xtwone3four
4nineeightseven2
zoneight234
7pqrstsixteen

Kod:

with open("calibration_document.txt", "r", encoding="utf-8") as f:
    lines = f.readlines()

list_of_numbers_each_line = []
list_of_numbers = []
for line in lines:
    line = line.replace("one", "o1e").replace("two", "t2o").replace("three", "th3ee").replace("four", "fo4r").replace("five", "fi5e").replace("six", "s6x").replace("seven", "se7en").replace("eight", "ei8ht").replace("nine", "ni9e")
    for character in line:
        if character.isdigit():
            list_of_numbers_each_line.append(int(character))
    list_of_numbers.append(list_of_numbers_each_line)
    list_of_numbers_each_line = []

count = 0
for number in list_of_numbers:
    if number:
        count = count + int(f"{str(number[0])}" + f"{str(number[-1])}")

print("Kalibrasyon değerlerinin gerçek toplamı:", count)

Bu kod, her satırda rakamları temsil eden kelimeleri gerçek sayı değerleriyle değiştiriyor ve daha sonra ilk ve son rakamları tespit ederek onları birleştiriyor. Bu yöntem, metin işlemede daha gelişmiş bir yaklaşımı ve dikkatli analizi gerektiriyor.

Çıktı:

Kalibrasyon değerlerinin gerçek toplamı: 281

Bu bölümde, ilk bölüme kıyasla daha karmaşık bir problemle karşı karşıya kaldık ve metin işleme becerilerimizi daha ileri bir seviyeye taşıdık. Bulmacanın bu kısmının çözümü, metin üzerinde daha derinlemesine işlem yapma ve dikkatli okuma gerektiriyor.

Bulmacanın bu ikinci kısmı, programlama ve problem çözme yeteneklerimizin nasıl geliştiğinin güzel bir örneğini sunuyor. Şimdi, “Sonuç ve Öğrenimler” bölümünde, bu bulmacanın bize kattığı deneyimler üzerine düşüncelerimizi paylaşalım.


Sonuç ve Öğrenimler

“Advent of Code – 1. Gün: Trebuchet?!” bulmacasının her iki kısmını da başarıyla tamamladık. Bu süreçte, temel metin işleme tekniklerinden başlayarak, metin içerisindeki gizli bilgileri nasıl çıkaracağımızı öğrendik. Rakamların ve harflerin bir arada kullanıldığı bu tür problemler, algoritmik düşünceyi ve problem çözme yeteneklerimizi geliştirmemize yardımcı oldu.

Bu bulmaca, özellikle Python gibi güçlü bir programlama dilinin, metin işleme ve veri analizi konularında ne kadar esnek ve etkili olabileceğini gösterdi. Kod yazarken karşılaştığımız zorluklar ve bunların üstesinden gelme yollarını bulma süreci, programlama becerilerimizi daha da ileriye taşıdı.

Bu deneyim, programlama dünyasında her zaman yeni şeyler öğrenmenin ve kendimizi geliştirmenin önemini bir kez daha hatırlattı. Her gün yeni bir bulmaca ile karşılaşacak olmamız, Aralık ayını heyecan verici bir öğrenme serüvenine dönüştürüyor.


Advent of Code’un ilk gününü tamamladığımız için kendimizle gurur duyabiliriz. Her gün yeni bir bulmaca, yeni bir zorluk ve yeni bir öğrenme fırsatı demek. Bu serüvene katılan herkese teşekkür ederim ve umarım bu yazılar, sizlere de ilham vermiş ve faydalı olmuştur.

Herhangi bir sorunuz olursa veya benimle iletişim kurmak isterseniz tüm sosyal medya hesaplarıma bu linke tıklayarak ulaşabilirsiniz. Ayrıca tüm çözümlerimi görebilmeniz için bir github reposu açtım. Bu repoya da bu linkten ulaşabilirsiniz.

Yarınki bulmacada görüşmek üzere!

Yorum bırakın