40 lines
867 B
SQL
40 lines
867 B
SQL
with
|
|
bounds as (
|
|
select
|
|
unnest(string_split(trim(content, '\n'), ',')) as f,
|
|
string_split(f, '-') as bounds,
|
|
cast(bounds[1] as int64) as low,
|
|
cast(bounds[2] as int64) as high
|
|
from read_text('data/02.in')
|
|
),
|
|
|
|
candidates as (
|
|
select
|
|
unnest(range(low, high + 1)) as num,
|
|
cast(num as string) as num_str,
|
|
len(num_str) as len
|
|
from bounds
|
|
),
|
|
|
|
part1 as (
|
|
select sum(num) as solution
|
|
from candidates
|
|
where num_str[: len // 2] = num_str[len // 2 + 1:]
|
|
),
|
|
|
|
part2 as (
|
|
select sum(num) as solution
|
|
from candidates
|
|
where exists (
|
|
select stride from range(1, len) as range (stride)
|
|
where
|
|
len % stride = 0
|
|
and repeat(num_str[: stride], len // stride) = num_str
|
|
)
|
|
)
|
|
|
|
select
|
|
part1.solution as p1,
|
|
part2.solution as p2
|
|
from part1, part2;
|