From c69470afa574f82cf3ed50612c9698ccfd30528e Mon Sep 17 00:00:00 2001 From: Tobi Date: Sat, 4 Dec 2021 22:22:43 +0100 Subject: [PATCH] finished december 3 --- december_3/example.txt | 12 +++++ december_3/src/main.rs | 119 +++++++++++++++++++++++++++++++++++++---- 2 files changed, 122 insertions(+), 9 deletions(-) create mode 100644 december_3/example.txt diff --git a/december_3/example.txt b/december_3/example.txt new file mode 100644 index 0000000..665fd57 --- /dev/null +++ b/december_3/example.txt @@ -0,0 +1,12 @@ +00100 +11110 +10110 +10111 +10101 +01111 +00111 +11100 +10000 +11001 +00010 +01010 \ No newline at end of file diff --git a/december_3/src/main.rs b/december_3/src/main.rs index 64c1d62..8d4d535 100644 --- a/december_3/src/main.rs +++ b/december_3/src/main.rs @@ -2,7 +2,7 @@ use std::fs::File; use std::io::{BufReader}; use std::io::prelude::*; -const NUMBER_OF_BITS: u8 = 12; +const NUMBER_OF_BITS: u8 = 4; //12 fn main(){ let file = File::open("./input.txt").expect("Read failed"); @@ -12,6 +12,8 @@ fn main(){ //let mut gamma_bits = Vec::new(); let all_lines = reader.lines(); + let mut most_common_val = Vec::new(); + let mut least_common_val = Vec::new(); for line in all_lines{ @@ -24,25 +26,124 @@ fn main(){ let mut zeros = 0; for l in &line_vec{ match l.chars().nth(i.into()).unwrap() { - '0' => zeros += 1, - '1' => ones += 1, + '0' => { + zeros += 1; + }, + '1' => { + ones += 1; + }, _ => println!("you should never be here"), } } - if ones > zeros { + if zeros > ones { + print!("0"); + most_common_val.push('0'); + } else { print!("1"); + most_common_val.push('1'); + } + if zeros > ones { + print!("1"); + least_common_val.push('1'); } else { print!("0"); + least_common_val.push('0'); } - println!(); } - + println!(); // 101001001011 2635 // 010110110100 1460 - - println!("Depth: {}, Horizontal: {}, Result: {}", 1,2,3); +//part 2 + let mut result_vec = line_vec.to_owned(); + let mut i: u8 = 0; + loop { + let mut temp_vec = Vec::new(); + let most_common: char = get_most_common(i, &result_vec); + for l in &result_vec{ + if most_common == l.chars().nth(i.into()).unwrap(){ + let l_as_string = l.to_owned(); + temp_vec.push(l_as_string); + } + } + if temp_vec.len() < 2 { + result_vec = temp_vec; + break; + } + i += 1; + result_vec = temp_vec; + } + println!("oxygen generator rating: {}", result_vec[0]); + let mut result_vec = line_vec.to_owned(); + let mut i: u8 = 0; + loop { + let mut temp_vec = Vec::new(); + let least_common: char = get_least_common(i, &result_vec); + for l in &result_vec{ + if least_common == l.chars().nth(i.into()).unwrap(){ + let l_as_string = l.to_owned(); + temp_vec.push(l_as_string); + } + } + if temp_vec.len() < 2 { + result_vec = temp_vec; + break; + } + i += 1; + result_vec = temp_vec; + } -} \ No newline at end of file + println!("co2 scrubber rating: {}", result_vec[0]); + +} + +// 101001001011 2635 +// 010110110101 1461 +// 2635 * 1461 = 3849735 + +fn get_most_common(bit: u8, in_vec:&Vec) -> char { + let mut ones = 0; + let mut zeros = 0; + for l in in_vec{ + match l.chars().nth(usize::from(bit)).unwrap() { + '0' => { + zeros += 1; + }, + '1' => { + ones += 1; + }, + _ => println!("you should never be here"), + } + } + if zeros > ones { + return '0'; + } else { + return '1'; + } +} + +fn get_least_common(bit: u8, in_vec:&Vec) -> char { + let mut ones = 0; + let mut zeros = 0; + for l in in_vec{ + match l.chars().nth(usize::from(bit)).unwrap() { + '0' => { + zeros += 1; + }, + '1' => { + ones += 1; + }, + _ => println!("you should never be here"), + } + } + if zeros > ones { + return '1'; + } else { + return '0'; + } +} + +//2735 +//1501 \ No newline at end of file