• Home
  • About
    • 康青旭 - Germán Caggianese photo

      康青旭 - Germán Caggianese

      Refactoring entropy in my Mind

    • Learn More
    • Email
    • Instagram
    • Github
    • Codeberg   Codeberg
  • All Posts
  • Projects
  • Areas
  • Resources

Advent of Code 2025 - 第 3 天:D

30 Dec 2025

Reading time ~3 minutes

「某種電湧似乎把它們燒壞了。我會試著盡快讓它們上線。」

本文翻譯自英文原文。

Github: GCaggianese/AoC-2025/D3

  • D programming language

題目 第 3 天:Lobby

第一部分:

  1. int jolt = 0;
  2. 建立輸入的列表與副本:og、aux1。
  3. aux1 會丟掉最後一個值。例如:987654321111118 -> 98765432111111
  4. 在這裡取最大值 -> jolt += aux1.max*10
  5. 建立第二個列表 aux2,它是 og 從前一個最大值下一個位置開始的 slice。 例:98765432111111,max = 9 -> aux2 = 87654321111118
  6. 在這裡取最大值 -> jolt += aux2.max

第二部分:

  1. long jolt = 0;
  2. multiplier = 10^11(因為要建立 12 位數)
  3. i 從 0 到 11(選 12 個數字):
    • remaining~needed~ = 12 - i
    • window = og[0 .. og.length - remaining~needed~ + 1](保留 足夠元素給之後的選擇)。例:第一次從 234234234234278 選,要 12 位數,window = [2,3,4,2](必須留下 11 個給後面)。
    • 從 window 選 maxVal -> jolt += maxVal * multiplier
    • 從 maxIdx+1 開始切掉 og(丟掉直到且包含所選項目的所有元素)。 例:在 idx 2 選到 4 -> og 變成 [2,3,4,2,3,4,2,7,8]
    • multiplier /= 10
  4. 摘要:選擇目前可用的最高數字,同時仍保留足夠數字完成 12 次選擇。

除非另有說明,否則本網站的內容均根據 知識共享姓名標示 4.0 國際 授權協議獲得許可。

© 2026 Germán Caggianese(康青旭)