Finished 8 and addede 9

This commit is contained in:
2021-12-09 19:57:00 +01:00
parent daf0ca92e4
commit ad92e950a9
5 changed files with 57 additions and 40 deletions

View File

@@ -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<i8> = vec![0; 10];
let mut real_numbers: Vec<i8> = 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<char> = 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::<i32>().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<char>, letter: char, translation: char) -> &mut Vec<char> {
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;
}

8
december_9/Cargo.toml Normal file
View File

@@ -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]

0
december_9/example.txt Normal file
View File

0
december_9/input.txt Normal file
View File

3
december_9/src/main.rs Normal file
View File

@@ -0,0 +1,3 @@
fn main() {
println!("Hello, world!");
}