From 5704c6bd8d624a9ae3a25b4ffaaf8f00ead42cc4 Mon Sep 17 00:00:00 2001 From: Tobias Maier Date: Thu, 16 Dec 2021 16:46:55 +0100 Subject: [PATCH] update --- december_15/src/main.rs | 10 +++------- december_16/Cargo.toml | 9 +++++++++ december_16/example.txt | 1 + december_16/input.txt | 0 december_16/src/main.rs | 25 +++++++++++++++++++++++++ 5 files changed, 38 insertions(+), 7 deletions(-) create mode 100644 december_16/Cargo.toml create mode 100644 december_16/example.txt create mode 100644 december_16/input.txt create mode 100644 december_16/src/main.rs diff --git a/december_15/src/main.rs b/december_15/src/main.rs index 42fdc7c..106f041 100644 --- a/december_15/src/main.rs +++ b/december_15/src/main.rs @@ -5,7 +5,7 @@ use std::io::prelude::*; const RADIX: u32 = 10; -static mut shortest: u32 = 99999; +static mut shortest: u32 = 60000; fn main(){ let file = File::open("./input.txt").expect("Read failed"); @@ -36,9 +36,9 @@ fn main(){ fn get_shortest_weight(weight_vec: &Vec>, x: usize, y: usize, current_weight: u32, width: usize, height: usize, visited: &Vec<(usize, usize)>) { let mut visited_local = visited.to_owned(); - unsafe { - if current_weight > shortest { + if visited_local.contains(&(x,y)) || current_weight > shortest || visited_local.len() > 1000{ + //println!("Breaking at {}, {}, {}", current_weight, visited_local.len(), shortest); return; } } @@ -47,10 +47,6 @@ fn get_shortest_weight(weight_vec: &Vec>, x: usize, y: usize, current_w println!("Current length: {}, shortest now: {}", current_weight, shortest);} return; } - - if visited_local.contains(&(x,y)) { - return; - } visited_local.push((x,y)); let temp_weight = current_weight + weight_vec[y][x]; diff --git a/december_16/Cargo.toml b/december_16/Cargo.toml new file mode 100644 index 0000000..319400b --- /dev/null +++ b/december_16/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "december_16" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +hex = "0.4.3" \ No newline at end of file diff --git a/december_16/example.txt b/december_16/example.txt new file mode 100644 index 0000000..33ac1ff --- /dev/null +++ b/december_16/example.txt @@ -0,0 +1 @@ +D2FE28 \ No newline at end of file diff --git a/december_16/input.txt b/december_16/input.txt new file mode 100644 index 0000000..e69de29 diff --git a/december_16/src/main.rs b/december_16/src/main.rs new file mode 100644 index 0000000..01bf23a --- /dev/null +++ b/december_16/src/main.rs @@ -0,0 +1,25 @@ +use std::fs::read_to_string; + +extern crate hex; + +fn main() { + let input_char_vec = read_to_string("./example.txt").expect("ERROR reading file"); + //let split_input: Vec = input_char_vec.chars().collect(); + let test = hex::decode(input_char_vec).expect("Decoding failed"); + + let mut bit_vec: Vec = Vec::new(); + + for t in test{ + for n in 0..8 { + bit_vec.push( (t >> 7-n & 1) == 1); + } + } + process_packet(bit_vec); + println!(); +} + +fn process_packet(bit_vec: Vec) { + let version = (bit_vec[0] as u32 * 4) + (bit_vec[1] as u32 * 2) + (bit_vec[2] as u32); + let packet_type = (bit_vec[3] as u32 * 4) + (bit_vec[4] as u32 * 2) + (bit_vec[5] as u32); + println!("Packet Version: {}, Packet type: {}", version, packet_type); +}