Advent of Code 2025 挑战全手写代码 Day 1 - 秘密入口

🎄Advent of Code 2025 挑战全手写代码 Day 1 - 秘密入口


终于等到 AoC 2025 开赛啦!🎉 第一天题目 Secret Entrance 难度简单(一星⭐),主要考察对 循环结构(Circular Buffer) 的理解和模运算的运用。

📖 题目速览

题目地址:adventofcode.com/2025/day/1

我们在北极秘密入口遇到一个保险箱转盘,刻度 0-99,初始位置 50。 输入是一串旋转指令(如 L68, R48)。

  • Part 1 :统计每次旋转结束时 ,指针停在 0 的次数。
  • Part 2 :统计旋转过程中 (包含结束点)指针指向 0 的总次数。

💡 解题思路 (Python 🐍)

  1. 巧用取模 % : 转盘是环形的,Python 的模运算 % 就能搞定
    • 右转:(current + amount) % 100
    • 左转:(current - amount) % 100
    • Python 的 % 能完美处理负数(例如 -1 % 100 = 99),直接省去了繁琐的边界判断,代码瞬间清爽!
python 复制代码
current: int = 50
out: int = 0

for direction, amount in self.sequence:
    match direction:
        case "R":
            current = (current + amount) % 100
        case "L":
            current = (current - amount) % 100

    if not current:
        out += 1
  1. Part 2 的优化陷阱 : 题目提示可能会有像 R1000 这种大旋转。如果一步步模拟(for loop),效率会很低。
    • 数学解法 :使用 divmod(amount, 100)
    • 整圈 :商 (div) 表示转了几整圈,每圈必然经过一次 0。
    • 残余步数 :余数 (mod) 是剩下的位移。只需判断这最后一段位移是否跨越了 0 界限(R 跨越 99->0,L 跨越 0->99)。
python 复制代码
current: int = 50
out: int = 0

for direction, amount in self.sequence:
    div, mod = divmod(amount, 100)
    out += div

    match direction:
        case "R":
            if current + mod >= 100:
                out += 1

            current = (current + mod) % 100
        case "L":
            if current > 0 and mod >= current:
                out += 1

            current = (current - mod) % 100

return out

✨ 代码复盘 最终代码将"计算经过次数"和"更新位置"解耦,逻辑非常清晰。相比于暴力模拟,数学计算法不仅快,而且更能体现算法思维。

完整代码:访问 github

Happy Coding! 冲刺排行榜!🚀

相关推荐
CoderJia程序员甲13 小时前
GitHub 热榜项目 - 日榜(2026-04-28)
人工智能·ai·大模型·github·ai教程
Pkmer13 小时前
古法编程: Python OOP 井字棋游戏
python
hhhhhh_we13 小时前
再定义“皮肤人格”:从Baumann 16型分型到预颜美历的AI时序人格
前端·图像处理·人工智能·python·aigc
石榴树下的七彩鱼13 小时前
OCR API价格对比2026:身份证/发票/医疗票据识别哪家性价比最高?含Python对接+成本公式
开发语言·人工智能·python·ocr·图像识别·文字识别·api接口
小苗卷不动13 小时前
Python的小知识
python
星空ξ13 小时前
OpenCode + Oh-My-OpenCode 配置指南:集成 GitHub Copilot 模型与 Java LSP (jdtls)
java·github·copilot·opencode·oh-my-opencode
程序员小远13 小时前
如何编写测试用例?
自动化测试·软件测试·python·功能测试·测试工具·职场和发展·测试用例
旦莫13 小时前
AI生成测试用例:一个Prompt模板让AI从Excel模板生成自动化脚本
人工智能·python·测试开发·自动化·prompt·测试用例
东北洗浴王子讲AI13 小时前
从零搭建AI文学创作助手:基于API聚合站+Flask实现智能写诗、小说生成神器
人工智能·python·flask
2301_7662834413 小时前
Golang怎么实现防重复提交_Golang如何用Token机制防止表单重复提交【技巧】
jvm·数据库·python