Aralık ayının ikinci gününde, Advent of Code’un benzersiz ve heyecan verici dünyasında yeni bir macera başlıyor. Bugün karşımıza çıkan bulmaca, “Küp bilmecesi” adını taşıyor ve bizi, yükseklerde uçan bir adaya, Snow Island’a götürüyor.
Hikayemiz, gökyüzünde yüksek bir yolculuktan sonra, adanın yüzeyine yumuşak bir yaprak yığınına nazikçe iniş yapmamızla başlıyor. Hava soğuk, ancak beklediğimiz kadar kar yok. Bu durumu merak ederken, bir Elf yanımıza koşarak geliyor ve durumu açıklamaya başlıyor.
Elf, Snow Island’a vardığımızı anlatıyor ve karın azlığı için özür diliyor. Durumun ayrıntılarını anlatmaya hazır, ancak biraz yürüyüş gerektireceğini söylüyor. Yürüyüş sırasında, Elf, sizinle bir oyun oynamayı teklif ediyor. Çeşitli renklerdeki küplerden oluşan bir oyun bu. Oyunun amacı, Elf’in çantaya gizlediği renkli küplerin sayısını tahmin etmek.

Elf, çantaya küpleri yerleştirdikten sonra, çantadan rastgele bir avuç küp alıp size gösteriyor ve sonra tekrar çantaya koyuyor. Bu işlemi her oyun için birkaç kez tekrarlıyor. Siz de oynadığınız her oyunun bilgilerini kaydediyorsunuz.
Bugünün bulmacası, bu oyun sırasında gözlemlenenleri ve bu gözlemlerin çözümlemesini içeriyor. İlk kısımda, belirli bir sayıda kırmızı, yeşil ve mavi küp içeren bir çantanın hangi oyunları mümkün kılacağını bulmamız isteniyor. İkinci kısımda ise her oyun için çantanın içermesi gereken en az küp sayısını ve bu küplerin gücünü hesaplamamız gerekiyor.
Bu giriş bölümünde, bulmacanın genel temasını ve hikayesini ele aldık. Şimdi ise bulmacanın ilk kısmının ayrıntılarına ve çözüm stratejisine daha yakından bakacağız.
Bulmacanın İlk Kısmı
“Küp Bilmecesi” adlı bulmacanın ilk kısmında, Elf’in renkli küplerle dolu çantasından hangi oyunların mümkün olduğunu belirlememiz isteniyor. Bu bölüm, analitik düşünme yeteneğimizi ve veri yorumlama becerilerimizi sınayan bir meydan okumayı içeriyor.
Elf, her oyun için çantadan rastgele küp grupları çekiyor ve bu küpleri size gösteriyor. Görevimiz, belirli bir sayıda kırmızı, yeşil ve mavi küp içeren bir çantayla hangi oyunların oynanabileceğini belirlemek. Örneğin, çantada sadece 12 kırmızı, 13 yeşil ve 14 mavi küp olduğunu varsayarsak, hangi oyunların mümkün olacağını anlamamız gerekiyor.
Örnek Oyun Kayıtları:
Game 1: 3 blue, 4 red; 1 red, 2 green, 6 blue; 2 green
Game 2: 1 blue, 2 green; 3 green, 4 blue, 1 red; 1 green, 1 blue
Game 3: 8 green, 6 blue, 20 red; 5 blue, 4 red, 13 green; 5 green, 1 red
Game 4: 1 green, 3 red, 6 blue; 3 green, 6 red; 3 green, 15 blue, 14 red
Game 5: 6 red, 1 blue, 3 green; 2 blue, 1 red, 2 green
Bu oyunlardan bazıları, belirlenen küp sınırlamaları içinde mümkün olabilirken, bazıları imkansızdır. Örneğin, bir oyun sırasında Elf, bir seferde 20 kırmızı küp gösteriyorsa ve çantada sadece 12 kırmızı küp varsa, bu oyun mümkün değildir.
Çözüm için yazdığımız Python kodu, her oyunu inceleyerek, verilen sınırlamalar altında hangi oyunların mümkün olduğunu belirliyor. İşte bu analiz için kullanılan kodun bir örneği:
with open("games.txt", "r", encoding="utf-8") as f:
lines = f.readlines()
cube_max = {"red": 12, "green": 13, "blue": 14}
count = 0
for line in lines:
game_id = int(line.split(":")[0][4:])
line = line.split(":")[1].strip()
cubes = line.split(";")
for cube in cubes:
flag = False
cube = cube.replace(",", "").split()
for i in range(len(cube)):
if i % 2 == 0:
if int(cube[i]) > cube_max[cube[i + 1]]:
flag = True
break
if flag:
count += game_id
break
print("Mümkün olan oyunların ID toplamı:", sum(range(1, 101)) - count)
Bu kod, her oyunun her bir küp grubunu inceliyor ve belirlenen renk sınırlamalarına göre bu grupların mümkün olup olmadığını kontrol ediyor. Eğer bir grup mümkün değilse, oyunun ID’si toplama ekleniyor ve oyun imkansız olarak işaretleniyor.
Bu bölümde, bulmacanın ilk kısmının çözümü için gerekli analitik düşünceyi ve kodlama stratejisini inceledik. Simdi ise bulmacanın ikinci bölümünü ve bu yeni zorluğun çözümünü ele alacağız.
Bulmacanın İkinci Kısmı
Advent of Code’un ikinci gün bulmacasının bu bölümünde, “Küp Bilmecesi”nin daha detaylı ve derinlemesine bir analizine giriş yapıyoruz. Bu kısımda, her oyun için çantada bulunması gereken en az sayıda küpün ne olduğunu belirlememiz isteniyor.
Bu bölüm, ilk kısmın sunduğu zorluğu bir adım daha ileri taşıyor ve bizden her renkteki küplerin minimum sayısını hesaplamamızı talep ediyor. Böylece, her oyunun gerçekleşmesi için gerekli olan “küp setinin gücünü” anlamamız gerekiyor.
Örnek Oyun Kayıtları:
Game 1: 3 blue, 4 red; 1 red, 2 green, 6 blue; 2 green
Game 2: 1 blue, 2 green; 3 green, 4 blue, 1 red; 1 green, 1 blue
Game 3: 8 green, 6 blue, 20 red; 5 blue, 4 red, 13 green; 5 green, 1 red
Game 4: 1 green, 3 red, 6 blue; 3 green, 6 red; 3 green, 15 blue, 14 red
Game 5: 6 red, 1 blue, 3 green; 2 blue, 1 red, 2 green
Her oyun için, oyunun mümkün olabilmesi için çantada bulunması gereken en az sayıda küpü belirlemek zorundayız. Örneğin, bir oyunda bir seferde en fazla 6 mavi küp gösterilmişse, çantada en az 6 mavi küp olmalıdır.
Bu zorluğu çözmek için Python diliyle yazılmış bir kod kullanıyoruz. Kod, her bir oyun için en fazla gösterilen küp sayılarını belirleyerek, her renkteki minimum küp sayısını hesaplıyor. İşte bu sürecin kod örneği:
with open("games.txt", "r", encoding="utf-8") as f:
lines = f.readlines()
cube_temp = {"red": 0, "green": 0, "blue": 0}
count = 0
power = 1
for line in lines:
game_id = int(line.split(":")[0][4:])
line = line.split(":")[1].strip()
cubes = line.split(";")
for cube in cubes:
cube = cube.replace(",", "").split()
for i in range(len(cube)):
if i % 2 == 0:
cube_temp[cube[i + 1]] = max(cube_temp[cube[i + 1]], int(cube[i]))
for color in cube_temp:
power *= cube_temp[color]
count += power
power = 1
cube_temp = {"red": 0, "green": 0, "blue": 0}
print("Küp setlerinin toplam gücü:", count)
Bu kod, her bir oyunun her bir küp grubunu inceliyor ve her renkteki küplerin en yüksek sayısını belirliyor. Daha sonra bu sayıları çarpıyor ve her oyunun küp setinin gücünü hesaplıyor.
Sonuç ve Öğrenimler
“Küp Bilmecesi” bulmacasının her iki bölümünü de tamamladık. Bu bulmaca, veri analizi ve mantıksal düşünme becerilerimizi önemli ölçüde zorladı. İlk kısımda, belirli sınırlamalar altında hangi oyunların mümkün olduğunu belirlemek için detaylı bir analiz yapmamız gerekiyordu. İkinci kısımda ise her oyun için çantada bulunması gereken en az sayıda küpü hesaplamak zorundaydık.
Bu deneyim, programlamadaki esnekliğimizi ve problemlere yaklaşım şeklimizi geliştirmemize yardımcı oldu. Her iki bölüm de, verilen verileri çeşitli şekillerde analiz etme ve yorumlama konusunda bize derin bir kavrayış sağladı. Bu tür bulmacalar, gerçek dünya problemlerine benzer zorluklar sunarak, pratik düşünme ve uygulamalı programlama becerilerimizi geliştirmemize olanak tanıyor.
Bu bulmaca üzerinde çalışmak, hem eğlenceli hem de öğreticiydi. Umarım bu yazı, sizin de bulmacayı çözme sürecinizde size yardımcı olmuştur. Bu blog serisinin devamını takip etmek isteyenler ve daha fazla bilgi almak isteyenler için 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!