60 lines
1.4 KiB
SQL
60 lines
1.4 KiB
SQL
create or replace table day07_data as
|
|
select row_number() over () as line, column0
|
|
from read_csv('inputs/07/input.txt', header=false, delim='\n');
|
|
create or replace table day07_test as
|
|
select row_number() over () as line, column0
|
|
from read_csv('inputs/07/test.txt', header=false, delim='\n');
|
|
|
|
create or replace table day07_input as
|
|
select
|
|
line as y,
|
|
if(c = 'S', x, null) as starter,
|
|
if(c = '^', x, null) as splitter
|
|
from day07_test,
|
|
unnest(split(column0, '')) with ordinality as u(c, x)
|
|
where c != '.'
|
|
;
|
|
|
|
with recursive seq(y, x) as (
|
|
select
|
|
y,
|
|
starter as x
|
|
from day07_input
|
|
where y = 1
|
|
|
|
union all
|
|
|
|
select distinct
|
|
s.y + 1 as y,
|
|
if(m.splitter = s.x, unnest([s.x + 1, s.x - 1]), s.x) as x
|
|
from seq as s
|
|
left join day07_input as m
|
|
on m.y = s.y + 1 and m.splitter = s.x
|
|
where s.y <= (select max(y) from day07_input)
|
|
)
|
|
select count(1) as part1
|
|
from seq s
|
|
inner join day07_input m on s.y = m.y - 1 and s.x = m.splitter;
|
|
|
|
with recursive seq(y, x) as (
|
|
select
|
|
y,
|
|
starter as x,
|
|
0 as split
|
|
from day07_input
|
|
where y = 1
|
|
|
|
union all
|
|
|
|
select
|
|
s.y + 1 as y,
|
|
if(m.splitter = s.x, unnest([s.x + 1, s.x - 1]), s.x) as x,
|
|
if(m.splitter = s.x, 1, 0) as split
|
|
from seq as s
|
|
left join day07_input as m
|
|
on m.y = s.y + 1 and m.splitter = s.x
|
|
where s.y <= (select max(y) from day07_input)
|
|
)
|
|
select sum(split) as part2
|
|
from seq s;
|