let filename = Path::new(filename).file_stem().unwrap().to_str().unwrap();
println!("Running {} - part 1", filename);
- Ok(0)
+ fn is_sorted(level: &[u32]) -> bool {
+ (level.is_sorted_by(|a, b| a < b) || level.is_sorted_by(|a, b| b < a)) &&
+ level.is_sorted_by(|a, b| a.abs_diff(*b) >= 1 && a.abs_diff(*b) <= 3)
+ }
+
+ let levels = input.lines()
+ .map(|l| {
+ l.split(" ")
+ .map(|v| v.parse::<u32>().unwrap())
+ .collect::<Vec<u32>>()
+ });
+
+ let mut res: u32 = 0;
+
+ for level in levels {
+ if is_sorted(&level) {
+ res += 1;
+ }
+ else {
+ for i in 0..level.len() {
+ let l = level.clone();
+ let (a, b) = l.split_at(i);
+ let l = [a, &b[1..]].concat();
+ if is_sorted(&l) {
+ res += 1;
+ break;
+ }
+ }
+ }
+ }
+
+ Ok(res)
}
#[cfg(test)]
#[test]
fn test_part2() {
- assert_eq!(0, run_part2(TEXT_INPUT).unwrap());
+ assert_eq!(4, run_part2(TEXT_INPUT).unwrap());
}
}