use std::env::args; use std::fs::File; use std::io::BufRead; use std::io::BufReader; fn get_sinks(map: &Vec, rows: usize, cols: usize) -> Vec { let mut sinks = vec![]; for y in 0..rows { for x in 0..cols { let i = y * cols + x; if (x == 0 || map[i] < map[i - 1]) && (x == cols - 1 || map[i] < map[i + 1]) && (y == 0 || map[i] < map[i - cols]) && (y == rows - 1 || map[i] < map[i + cols]) { sinks.push(i); } } } return sinks; } fn main() { let path = args().nth(1).unwrap(); let file = File::open(path).unwrap(); let mut rows = 0; let mut cols = 0; let mut map: Vec = vec![]; for line in BufReader::new(file).lines() { let l = line.unwrap(); cols = l.len(); rows += 1; for c in l.chars() { map.push(c.to_digit(10).unwrap()); } } let sinks = get_sinks(&map, rows, cols); print!("{}\n", sinks.iter().map(|i| map[*i] + 1).sum::()); }