Advent Of Code 2024

· Technology

https://github.com/XmchxUp/aoc

Advent Of Code 2024

      --------Part 1--------   --------Part 2--------
Day       Time   Rank  Score       Time   Rank  Score
 12       >24h  50638      0       >24h  44326      0
 11       >24h  59401      0       >24h  51127      0
 10       >24h  50009      0       >24h  49004      0
  9       >24h  49981      0       >24h  49300      0
  8   00:29:40   4106      0   00:54:22   5202      0
  7   23:33:54  50547      0   23:40:07  47667      0
  6   00:15:41   2497      0   00:38:26   2332      0
  5   00:23:57   5045      0   00:37:53   4165      0
  4   02:02:34  16546      0   02:24:41  14838      0
  3   00:09:56   4139      0   07:34:31  45141      0
  2   02:46:57  25824      0   02:57:25  17743      0
  1   00:14:13   5469      0   00:23:05   5735      0

Day 13: Claw Contraption

partI: 由于 press 不超过 100 次可以直接暴力

a_x * a + b_x * b = p_x
a_y * a + b_y * b = p_y

或者数学上用 Cramer's rule

Day 12: Garden Groups

首先是遍历所有点,从当前点出发,使用 BFS 遍历所有相关的 region 中的点。

即可获得所有 region

partI: 边长计算:对每个 region 中的点,可以先计算都有 4 个边,但是如果有一边与 region 中的点相连,则减少一边。


4 + 4 => 6

---

|A| |A| => |AA|

---

partII:


A _ B
|point|
C _ D

边长计算:对每个 region 中的点 p,都有 4 个 corner 坐标,遍历每个 corner 坐标,判断四周的点是否是属于 region 中的,

如果是,则有四种情况,只有 1/2/3/4 个点属于 region。

1/3 只有一个 corner,即一条边

4 没有 corner

2 分为只有对角点有两个 conrner,相邻点没有 conrner

Day 11: Plutonian Pebbles

partI: 模拟

partII: 由于数字很大,模拟不太行。

考虑一个数 N,每次变化可能会导致出两个或一个新的数,两个都是独立的继续变化下去,可以看成一个树 DFS 加上 cache 保证同样的数不需要继续。


       1024
    /        \

10 24
/ \ / \
 1 0 2 4

Day 10: Hoof It

常规 BFS 遍历

partI: 只需要记录不同 9 的个数

partII: 需要统计多种路线

Day 9: Disk Fragmenter

模拟,主要记录了下面的信息。

part2:注意不要往后移

pub struct Aoc2024_9 {
    // index -> id
    index_2_id_map: HashMap<u64, u64>,
    // id -> cnt
    id_2_cnt_map: HashMap<u64, u64>,
    // index->free_space_cnt
    index_2_free_space_map: HashMap<u64, u64>,
    max_idx: u64,
}

Day 8: Resonant Collinearity

模拟,主要记录所有相同的点,然后遍历所有可能性,partII 主要判断自身是否需要包含(如果只有两个 antenna)

pub struct Aoc2024_8 {
    map: Vec<Vec<char>>,
    points: HashMap<char, Vec<(i32, i32)>>,
}

Day 7: Bridge Repair

基础的递归思路,遍历所有 operator。

Day 6: Guard Gallivant

partI: 模拟

partII: 使用暴力的将所有位置设置成#,然后判断有没有在 loop 里主要是判断三元组,(x,y,dir),只用坐标肯定不行,因为可能正常情况也会走到。用时 87S 87.675 Part 2: 2022

其实只需要遍历看得见的位置就行不需要所有。

Day 5: Print Queue

partI: 暴力的每次从后往前检测是否符合 Rule

    rules: HashMap<u32, HashSet<u32>>,
    seqs: Vec<Vec<u32>>,

partII: 排序,如 rule a|b 表示 a < b 那么使用这个排序规则,最后在判断是否符合 rule。

partI: DFS

partII: 直接写死判断 4 种 pattern 了,主要通过中间 A 固定。

Day 3: Mull It Over

partI: 使用正则

partII:每次让 don't 之前所有操作都跟 partI 一样,再找到一个 do,即 do 之后的操作同理。

注意所有操作应该连起来,我的输入里有换行,被这个坑了好久。

Day 2: Red-Nosed Reports

partII: 直接遍历所有数每次 remove 掉,然后按 partI 逻辑判断就行。

Day 1: Historian Hysteria

partI: sort

partII: HashMap

Comments (0)

    Send comment

    Markdown supported. Please keep comments clean.