Finished 8 and addede 9
This commit is contained in:
@@ -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
8
december_9/Cargo.toml
Normal 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
0
december_9/example.txt
Normal file
0
december_9/input.txt
Normal file
0
december_9/input.txt
Normal file
3
december_9/src/main.rs
Normal file
3
december_9/src/main.rs
Normal file
@@ -0,0 +1,3 @@
|
||||
fn main() {
|
||||
println!("Hello, world!");
|
||||
}
|
||||
Reference in New Issue
Block a user