func check[report: Array] : bool increasing := array.nth(report, 0) < array.nth(report, 1) for i in 0..report->size-1 if array.nth(report, i) > array.nth(report, i + 1) && increasing return false if array.nth(report, i) < array.nth(report, i + 1) && !increasing return false diff := math.abs(array.nth(report, i) - array.nth(report, i + 1)) if diff < 1 || diff > 3 return false return true func part1[data: Array] : void out := 0 for i in 0..data->size if check(array.nth(data, i)) out += 1 io.println_i64(out) func part2[data: Array] : void out := 0 for i in 0..data->size if check(array.nth(data, i)) out += 1 else arr : Array = array.nth(data, i) for j in 0..arr->size sliced := array.concat(array.slice(arr, 0, j), array.slice(arr, j + 1, arr->size - (j + 1))) if check(sliced) out += 1 break io.println_i64(out) func main[] : i64 ~input, ok := io.read_text_file("input.txt") if !ok panic("failed to open input.txt") lines := str.split(input, "\n") data := [] for i in 0..lines->size line : str = array.nth(lines, i) report := str.split(line, " ") for i in 0..report->size array.set(report, i, str.parse_i64(array.nth(report, i))) array.push(data, report) part1(data) part2(data)