import std::fs::file::(ReadOnlyFile as File) import std::stdio::stdout import std::io::(Error as IoError) def read_file(path: String) !! IoError -> Array!(Integer) { let file = try File.new(path) let mut content = try file.read_string content = content.slice(0, content.length - 1) content.split(",").map do (c) { c.to_integer }.to_array } def count_fish(initial: Array!(Integer), days: Integer) -> Integer { let mut day = 0 let mut timers = Array.filled(9, 0) initial.iter.each do (n) { timers[n] = timers[n] + 1 } while({day < days}) { let mut new_timers = Array.filled(9, 0) timers.each_with_index do (timer, idx) { new_timers[idx - 1] = new_timers[idx - 1] + timer (idx == 0).if_true { (timer != 0).if_true { new_timers[6] = new_timers[6] + timer } } } timers = new_timers day += 1 } timers.iter.reduce(0) do (acc, num) { acc + num } } def count_fish_naive(initial: Array!(Integer), days: Integer) -> Integer { let mut fish = initial let mut day = 0 while({day < days}) { let mut new_fish = Array.new() fish = fish .iter .map do (f) { (f == 0).if(true: { new_fish.push(8) 6 }, false: { f - 1 }) } .to_array fish.append(new_fish) day += 1 } fish.length }