diff --git a/examples/puzzles/aoc2025_02.zr b/examples/puzzles/aoc2025_02.zr new file mode 100644 index 0000000..0784874 --- /dev/null +++ b/examples/puzzles/aoc2025_02.zr @@ -0,0 +1,60 @@ +func part1_is_invalid_id[s: String] : Bool + let len: I64 = str.len(s) + if len % 2 != 0 + return false + + let first: String = str.substr(s, 0, len / 2) + let second: String = str.substr(s, len / 2, len / 2) + + return str.equal(first, second) + +func part1[ranges: Array] : Void + let sum: I64 = 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: String] : 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: String = str.substr(s, 0, div) + let is_repeat: Bool = true + for k in 1..(len / div) + let segment: String = 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: I64 = 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) \ No newline at end of file