56 lines
1.5 KiB
Plaintext
56 lines
1.5 KiB
Plaintext
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 = 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 = 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 = out + 1
|
|
break
|
|
|
|
io.println_i64(out)
|
|
|
|
func main[] : i64
|
|
lines := must(io.read_text_file?("input.txt")) |> str.split("\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)
|