use std::io::{BufRead, BufReader}; use std::fs::File; fn is_safe(v:&[u32]) -> bool { let s_diff = if v[0] > v[1] {false} else {true}; for n in 1..v.len() { let diff = v[n].abs_diff(v[n - 1]); if diff > 3 || diff == 0{ return false; } let s_diff2 = if v[n] < v[n-1] {false} else {true}; if s_diff2 ^ s_diff { return false; } } return true; } fn main (){ let filename = "../2/input_example.txt"; // let filename = "../2/input.txt"; let file = BufReader::new(File::open(filename).expect("Unable to open file")); let mut safe: u32 = 0; for line in file.lines() { let wline = line.unwrap(); let nums: Vec = wline.split(' ') .filter(|&x| !x.is_empty()) .map(|x| x.parse().unwrap()) .collect(); if is_safe(&nums[..]){ safe += 1; } else { for n in 1..nums.len(){ let to_test = &[&nums[0..n], &nums[n+1..nums.len()]].concat(); if is_safe(to_test){ safe += 1; break; } } } } println!("{}", safe); }