— Day 12: Christmas Tree Farm —
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
