Advent Of Code 2024
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。
Day 4: Ceres Search
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