Port day03 part1 to rust

This commit is contained in:
Thom Dickson 2021-12-15 15:15:29 -05:00
parent 7f0166c880
commit d53b80fb4a
Signed by: boots
GPG Key ID: 40BE2AF8EBF8D2BB
3 changed files with 1063 additions and 0 deletions

View File

@ -0,0 +1,8 @@
[package]
name = "day03"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]

1000
rust-rewrite/day03/day03.in Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,55 @@
use std::fs;
fn main() {
let file = fs::read_to_string("day03.in").unwrap();
let data = ingest_data(file);
println!("=== PART 1 ===");
part1(&data);
println!("=== PART 2 ===");
}
fn ingest_data(input: String) -> Vec<String> {
let mut data: Vec<String> = vec![];
for line in input.strip_suffix('\n').unwrap().split('\n') {
data.push(line.to_string());
}
data
}
fn common_bit(data: &Vec<String>, bit: usize, invert: bool) -> char {
let mut bit_count = (0, 0);
for x in data {
match x.chars().nth(bit).unwrap() {
'0' => bit_count.0 += 1,
'1' => bit_count.1 += 1,
_ => (),
}
}
if bit_count.0 <= bit_count.1 {
if invert {
'0'
} else {
'1'
}
} else {
if invert {
'1'
} else {
'0'
}
}
}
fn part1(data: &Vec<String>) {
let mut gamma: String = "".to_string();
let mut epsilon: String = "".to_string();
for bit in 0..data[0].len() {
gamma.push(common_bit(data, bit, false));
epsilon.push(common_bit(data, bit, true));
}
let gamma_i = usize::from_str_radix(&gamma, 2).unwrap();
let epsilon_i = usize::from_str_radix(&epsilon, 2).unwrap();
println!("Gamma: {}", gamma_i);
println!("Epsilon: {}", epsilon_i);
println!("Power consumption: {}", gamma_i * epsilon_i);
}