From ad92e950a9acc054e5ac6bf72093de7dc119c267 Mon Sep 17 00:00:00 2001 From: Tobias Maier Date: Thu, 9 Dec 2021 19:57:00 +0100 Subject: [PATCH] Finished 8 and addede 9 --- december_8/src/main.rs | 86 ++++++++++++++++++++++-------------------- december_9/Cargo.toml | 8 ++++ december_9/example.txt | 0 december_9/input.txt | 0 december_9/src/main.rs | 3 ++ 5 files changed, 57 insertions(+), 40 deletions(-) create mode 100644 december_9/Cargo.toml create mode 100644 december_9/example.txt create mode 100644 december_9/input.txt create mode 100644 december_9/src/main.rs diff --git a/december_8/src/main.rs b/december_8/src/main.rs index dbf7333..4c72279 100644 --- a/december_8/src/main.rs +++ b/december_8/src/main.rs @@ -1,6 +1,9 @@ use std::fs::File; +use std::hash::Hash; use std::io::{BufReader}; use std::io::prelude::*; +use std::ops::Index; +use std::collections::HashSet; fn main(){ let file = File::open("./input.txt").expect("Read failed"); @@ -35,58 +38,61 @@ fn main(){ } println!("Easy values: {}", easy_values); + let mut output_sum = 0; for line in line_vec{ let input = line.0; - let mut lengths: Vec = vec![0; 10]; - let mut real_numbers: Vec = vec![0; 10]; + let result = line.1; + + let mut segments = ['x'; 7]; // segment mapping + let mut digits = [""; 10]; //Pos of digits - let mut translation: Vec = vec!['x'; 7]; + digits[1] = input.iter().find(|x| x.len() == 2).unwrap(); + digits[4] = input.iter().find(|x| x.len() == 4).unwrap(); + digits[7] = input.iter().find(|x| x.len() == 3).unwrap(); + digits[8] = input.iter().find(|x| x.len() == 7).unwrap(); - // Calculate size - for i in 0..lengths.len() { - let len_res = input[i].len() as i8; - lengths[i] = len_res; - } + segments[0] = digits[7].chars().find(|x| !digits[1].contains(x.clone() )).unwrap(); + segments[1] = digits[4].chars().find(|&x| + !digits[1].contains(x ) && + input.iter().all(|digit| digit.len() != 6 || digit.contains(x)) + ).unwrap(); + digits[5] = input.iter().find(|x| x.len() == 5 && x.contains(segments[0]) && x.contains(segments[1])).unwrap(); + segments[2] = digits[1].chars().find(|&x| !digits[5].contains(x)).unwrap(); + segments[5] = digits[1].chars().find(|&x| digits[5].contains(x)).unwrap(); - //Find ones, fours, sevens and eights - for i in 0..input.len() { - if lengths[i] == 2 { - real_numbers[i] = 1 - } else if lengths[i] == 3 { - real_numbers[i] = 7 - } else if lengths[i] == 4 { - real_numbers[i] = 4 - } else if lengths[i] == 7 { - real_numbers[i] = 8 + digits[2] = input.iter().find(|x| x.len() == 5 && x.contains(segments[0]) && x.contains(segments[2]) && !x.contains(segments[5])).unwrap(); + digits[3] = input.iter().find(|x| x.len() == 5 && x.contains(segments[0]) && x.contains(segments[2]) && x.contains(segments[5])).unwrap(); + digits[6] = input.iter().find(|x| x.len() == 6 && !x.contains(segments[2])).unwrap(); + segments[4] = digits[6].chars().find(|&x| !digits[5].contains(x)).unwrap(); + digits[0] = input.iter().find(|x| x.len() == 6 && x.contains(segments[2])&& x.contains(segments[4])).unwrap(); + segments[3] = digits[8].chars().find(|&x| !digits[0].contains(x)).unwrap(); + segments[6] = digits[0].chars().find(|&x| x != segments[0] && x != segments[1] && x != segments[2] && x != segments[4] && x != segments[5]).unwrap(); + digits[9] = input.iter().find(|x| x.len() == 6 && !x.contains(segments[4])).unwrap(); + + + let mut output_value: String = "".to_string(); + + for val in &result { + let mut val_hash = HashSet::new(); + for ch in val.chars() { + val_hash.insert(ch); } + + + let index = digits.iter().position(|&r| HashSet::from_iter(r.chars()) == val_hash ).unwrap(); + println!("Element is {}", index); + output_value.push_str(&index.to_string()); } - - println!(); + + let output_value_int = output_value.parse::().unwrap(); + println!("Final Result is {}", output_value_int); + output_sum += output_value_int; } -} + println!("Final Final Result is {}", output_sum); - -fn set_translation(in_dict: &mut Vec, letter: char, translation: char) -> &mut Vec { - if letter == 'a' { - in_dict[0] = translation; - } else if letter == 'b' { - in_dict[1] = translation; - } else if letter == 'c' { - in_dict[2] = translation; - } else if letter == 'd' { - in_dict[3] = translation; - } else if letter == 'e' { - in_dict[4] = translation; - } else if letter == 'f' { - in_dict[5] = translation; - } else if letter == 'g' { - in_dict[6] = translation; - } - - return in_dict; } \ No newline at end of file diff --git a/december_9/Cargo.toml b/december_9/Cargo.toml new file mode 100644 index 0000000..29cd9bf --- /dev/null +++ b/december_9/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "december_9" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] diff --git a/december_9/example.txt b/december_9/example.txt new file mode 100644 index 0000000..e69de29 diff --git a/december_9/input.txt b/december_9/input.txt new file mode 100644 index 0000000..e69de29 diff --git a/december_9/src/main.rs b/december_9/src/main.rs new file mode 100644 index 0000000..e7a11a9 --- /dev/null +++ b/december_9/src/main.rs @@ -0,0 +1,3 @@ +fn main() { + println!("Hello, world!"); +}