AdventOfCode 2025 Day 12

Part One

将各种形状的图形,放置到一个长方形内。这应该是典型的Packing problem,如果真的要计算的话,会非常麻烦。

结果从reddit上发现,只要简单地计算面积即可,这可能也是作者的一个设计吧。

with origin AS (
    SELECT row_number() over () as rn, line
    FROM lance_input
), empty AS (
    SELECT coalesce(lag(rn) over (order by rn), 0) as pre_rn, rn
    FROM origin
    WHERE line = ''
), shapes AS (
    SELECT empty.rn / 5 as idx, sum(length(origin.line) - length(replace(origin.line, '#', ''))) as size
    FROM origin, empty
    WHERE origin.rn between empty.pre_rn and empty.rn
    group by empty.rn / 5
), regions AS (
    SELECT split_part(size, 'x', 1) :: integer * split_part(size, 'x', 2) :: integer as total,
           split_part(targets, ' ', 1) :: integer * (select size From shapes where idx = 1) +
           split_part(targets, ' ', 2) :: integer * (select size From shapes where idx = 2) +
           split_part(targets, ' ', 3) :: integer * (select size From shapes where idx = 3) +
           split_part(targets, ' ', 4) :: integer * (select size From shapes where idx = 4) +
           split_part(targets, ' ', 5) :: integer * (select size From shapes where idx = 5) +
           split_part(targets, ' ', 6) :: integer * (select size From shapes where idx = 6) as shape_sum
    FROM (
        SELECT split_part(line, ': ', 1) as size, split_part(line, ': ', 2) as targets
        FROM origin
        WHERE rn > (select max(rn) from empty)
    ) t
)
select * From regions;

Part Two

发表评论