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)