代码编年史

发布: (2025年12月22日 GMT+8 01:51)
3 min read
原文: Dev.to

Source: Dev.to

Part 1

一种酷炫的年终收官方式。这看起来是个有趣的挑战,我很期待去尝试。

我首先注意到:

  • 示例输入把锁和钥匙分开了
  • 我的谜题输入 没有 分开

所以我的算法在分类时需要格外仔细。

按照解释,我打算把每个锁和钥匙存为一个数组,数组中的数字代表每列的高度。随后我可以写出这样一个算法:

For each lock
  For each column
    Further filter the list of keys to those with 5 - N height
    in this column, where N is the lock column's height
  Any remaining keys are winners

我迫不及待想要写代码实现它!

编写我的锁‑钥匹配算法

把输入处理成两个列表,每个列表包含 5 位数字的列表:

input = input.split('\n\n').reduce((group, item) => {
    item = item.split('\n').map(line => line.split(''))
    if (item[0].every(el => el == '#')) {
        // Lock
        let digits = []
        for (let i = 0; i  el == '.')) {
        // Key
        let digits = []
        for (let i = 0; i  {
    tally += lock.reduce((keysRemaining, digit, index) => {
        return keysRemaining.filter(item => item[index]  el.slice())).length
})

真的会这么简单吗?

下面是我的思路:

  • 初始化一个计数器,用来统计所有有效钥匙
  • 遍历每个锁
  • 在对每个数字过滤五次(对应每一列)后,根据剩余钥匙列表的长度来递增计数器

在示例输入上运行时,我得到 3,这正是正确答案。我有点想直接在我的谜题输入上跑一遍。最坏的情况是提交错误,只剩下三次机会指引我走向正确方向。我决定这么做!

在我的谜题输入上运行

会输出什么? …

一个几千的数字。看起来…还行?

准备提交…

结果正确!

Woohoo!!!

年度回顾

我在一年中匹配到了最低分:34

鉴于今年似乎是最难的一年,我很自豪没有再创下更低的分数。

我的 2024 年降临日历

至于历年总分:

年度分数列表

382/50076.4%,相当于一个强劲的 C

这就是我整个旅程至今的平均水平。又是充满乐趣的一年,出现了有趣的新谜题。接下来,2025!

再次感谢阅读。

Back to Blog

相关文章

阅读更多 »

猴子市场

第1部分 另一个 math gauntlet,我要编写一系列 math operations。有些会出现在多个条件语句中。我以前做过,我有信心能做到……

100 天 DSA 编码挑战的第 82 天

问题 在二维矩阵中寻找峰值元素 GeeksforGeeks 题目链接 https://www.geeksforgeeks.org/problems/find-the-peak-element-in-a-2d-matrix/1 难度...

第78天:100天DSA编程挑战

接受新的挑战:每天解答 GeeksforGeeks POTD 并分享我的解法!💻🔥 目标:提升问题解决能力,升级编程水平,并学习……