| From: | Bernice Southey <bernice(dot)southey(at)gmail(dot)com> |
|---|---|
| To: | Greg Sabino Mullane <htamfids(at)gmail(dot)com> |
| Cc: | pgsql-general(at)lists(dot)postgresql(dot)org |
| Subject: | Re: Advent of Code Day 8 |
| Date: | 2025-12-17 17:39:59 |
| Message-ID: | CAEDh4nyG1kGBk7eN3WPEKfhupADbzOxoQvdw+G5f-e1ubXXvOg@mail.gmail.com |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-general |
It's slow at 20 seconds, but I'm pleased I finally found a good enough
way to use tables for day 8. Afterall, the reason I tried AoC in
postgres is because I really like table logic. By swapping out two
temp tables and doing insert only, I can avoid the update MVCC bloat
that wrecked my previous attempt. It was very educational watching the
loop speed degrade to a crawl after a thousand update runs, even
though the table never got bigger than 1000 rows.
I copied the input into d8(t text).
create temp table w1(c int, b text);
create temp table w2(c int, b text);
do $$
declare r record;
begin
--loop through the connections in closest order
for r in (with j as (
select row_number() over () r, t,
split_part(t, ',', 1)::int8 x,
split_part(t, ',', 2)::int8 y,
split_part(t, ',', 3)::int8 z
from d8)
select row_number() over(
order by (j.x-j1.x)^2 + (j.y-j1.y)^2 + (j.z-j1.z)^2) i,
j.t b1, j1.t b2, j.x * j1.x s from j, j j1 where j1.r > j.r) loop
--add the two boxes from the current connection
insert into w1 values (r.i, r.b1), (r.i, r.b2);
--connect all the boxes in the circuits of these two boxes
insert into w1 select r.i, w3.b
from w1 join w2 on w1.b = w2.b join w2 w3 on w2.c = w3.c;
--keep all the existing boxes with their current circuits
insert into w1 select * from w2;
truncate w2;
--get the latest circuit per box
insert into w2 select distinct on (b) * from w1 order by b, c desc;
truncate w1;
--the circuit is complete when all the boxes are in the current circuit
if (select count(*) from w2 where c = r.i) = 1000 then
raise notice '%', r.s;
exit;
end if;
end loop;
end
$$;
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Igor Korot | 2025-12-17 17:42:09 | Re: libpq simple SELECT |
| Previous Message | Igor Korot | 2025-12-17 17:38:38 | Re: PQexecPrepared() question |