60 lines
1.7 KiB
Plaintext
60 lines
1.7 KiB
Plaintext
func part1_is_invalid_id[s: str] : bool
|
|
let len: i64 = str.len(s)
|
|
if len % 2 != 0
|
|
return false
|
|
|
|
let first: str = str.substr(s, 0, len / 2)
|
|
let second: str = str.substr(s, len / 2, len / 2)
|
|
|
|
return str.equal(first, second)
|
|
|
|
func part1[ranges: array] : void
|
|
let sum = 0
|
|
|
|
for i in 0..array.size(ranges)
|
|
let parts: array = array.nth(ranges, i) |> str.split("-")
|
|
let start: i64 = array.nth(parts, 0) |> str.parse_i64()
|
|
let end: i64 = array.nth(parts, 1) |> str.parse_i64()
|
|
|
|
for n in (start)..end+1
|
|
if part1_is_invalid_id(str.from_i64(n))
|
|
sum = sum + n
|
|
|
|
io.println_i64(sum)
|
|
|
|
// had to cheat this one
|
|
func part2_is_invalid_id[s: str] : bool
|
|
let len: i64 = str.len(s)
|
|
if len < 2
|
|
return false
|
|
for div in 1..(len / 2 + 1)
|
|
if len % div == 0
|
|
let u: str = str.substr(s, 0, div)
|
|
let is_repeat: bool = true
|
|
for k in 1..(len / div)
|
|
let segment: str = str.substr(s, k * div, div)
|
|
if !str.equal(segment, u)
|
|
is_repeat = false
|
|
if is_repeat
|
|
return true
|
|
return false
|
|
|
|
func part2[ranges: array] : void
|
|
let sum = 0
|
|
|
|
for i in 0..array.size(ranges)
|
|
let parts: array = array.nth(ranges, i) |> str.split("-")
|
|
let start: i64 = array.nth(parts, 0) |> str.parse_i64()
|
|
let end: i64 = array.nth(parts, 1) |> str.parse_i64()
|
|
|
|
for n in (start)..end+1
|
|
if part2_is_invalid_id(str.from_i64(n))
|
|
sum = sum + n
|
|
|
|
io.println_i64(sum)
|
|
|
|
func main[] : i64
|
|
let ranges: array = io.read_file("input.txt") |> str.split(",")
|
|
|
|
part1(ranges)
|
|
part2(ranges) |