finished december 3
This commit is contained in:
12
december_3/example.txt
Normal file
12
december_3/example.txt
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
00100
|
||||||
|
11110
|
||||||
|
10110
|
||||||
|
10111
|
||||||
|
10101
|
||||||
|
01111
|
||||||
|
00111
|
||||||
|
11100
|
||||||
|
10000
|
||||||
|
11001
|
||||||
|
00010
|
||||||
|
01010
|
||||||
@@ -2,7 +2,7 @@ use std::fs::File;
|
|||||||
use std::io::{BufReader};
|
use std::io::{BufReader};
|
||||||
use std::io::prelude::*;
|
use std::io::prelude::*;
|
||||||
|
|
||||||
const NUMBER_OF_BITS: u8 = 12;
|
const NUMBER_OF_BITS: u8 = 4; //12
|
||||||
|
|
||||||
fn main(){
|
fn main(){
|
||||||
let file = File::open("./input.txt").expect("Read failed");
|
let file = File::open("./input.txt").expect("Read failed");
|
||||||
@@ -12,6 +12,8 @@ fn main(){
|
|||||||
//let mut gamma_bits = Vec::new();
|
//let mut gamma_bits = Vec::new();
|
||||||
|
|
||||||
let all_lines = reader.lines();
|
let all_lines = reader.lines();
|
||||||
|
let mut most_common_val = Vec::new();
|
||||||
|
let mut least_common_val = Vec::new();
|
||||||
|
|
||||||
|
|
||||||
for line in all_lines{
|
for line in all_lines{
|
||||||
@@ -24,25 +26,124 @@ fn main(){
|
|||||||
let mut zeros = 0;
|
let mut zeros = 0;
|
||||||
for l in &line_vec{
|
for l in &line_vec{
|
||||||
match l.chars().nth(i.into()).unwrap() {
|
match l.chars().nth(i.into()).unwrap() {
|
||||||
'0' => zeros += 1,
|
'0' => {
|
||||||
'1' => ones += 1,
|
zeros += 1;
|
||||||
|
},
|
||||||
|
'1' => {
|
||||||
|
ones += 1;
|
||||||
|
},
|
||||||
_ => println!("you should never be here"),
|
_ => println!("you should never be here"),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ones > zeros {
|
if zeros > ones {
|
||||||
|
print!("0");
|
||||||
|
most_common_val.push('0');
|
||||||
|
} else {
|
||||||
print!("1");
|
print!("1");
|
||||||
|
most_common_val.push('1');
|
||||||
|
}
|
||||||
|
if zeros > ones {
|
||||||
|
print!("1");
|
||||||
|
least_common_val.push('1');
|
||||||
} else {
|
} else {
|
||||||
print!("0");
|
print!("0");
|
||||||
|
least_common_val.push('0');
|
||||||
}
|
}
|
||||||
println!();
|
|
||||||
}
|
}
|
||||||
|
println!();
|
||||||
// 101001001011 2635
|
// 101001001011 2635
|
||||||
// 010110110100 1460
|
// 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;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
println!("co2 scrubber rating: {}", result_vec[0]);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// 101001001011 2635
|
||||||
|
// 010110110101 1461
|
||||||
|
// 2635 * 1461 = 3849735
|
||||||
|
|
||||||
|
fn get_most_common(bit: u8, in_vec:&Vec<String>) -> 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<String>) -> 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
|
||||||
Reference in New Issue
Block a user