diff --git a/2024/day5/part1/Cargo.lock b/2024/day5/part1/Cargo.lock new file mode 100644 index 0000000..e73b84f --- /dev/null +++ b/2024/day5/part1/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "part1" +version = "0.1.0" diff --git a/2024/day5/part1/Cargo.toml b/2024/day5/part1/Cargo.toml new file mode 100644 index 0000000..d85b608 --- /dev/null +++ b/2024/day5/part1/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "part1" +version = "0.1.0" +edition = "2021" + +[dependencies] diff --git a/2024/day5/part1/src/main.rs b/2024/day5/part1/src/main.rs new file mode 100644 index 0000000..2e3d7f4 --- /dev/null +++ b/2024/day5/part1/src/main.rs @@ -0,0 +1,72 @@ +use std::fs; + +fn main() { + let mut lines: Vec = Vec::new(); + // offset so the vec lines can actually start at 1 and not curse me + lines.push("a".parse().unwrap()); + for i in fs::read_to_string("input.txt") + .unwrap() + .lines() + .map(String::from) { + lines.push(i); + }; + let lineslen = lines.len(); + + + // get the line which is empty to split into the First and Second bit + let mut sep = 0; + for i in 1..lines.len() { + if lines[i].trim() == "" { + println!("the line empty is {}",i); + sep = i; + } + }; + + let mut rul = Vec::new(); + for i in 1..sep { + rul.push(lines[i].clone()) + }; + println!("rul {:?}",rul); + + let mut seq = Vec::new(); + for i in sep+1..lineslen { + seq.push(lines[i].clone()); + } + println!("seq {:?}",seq); + + + let mut finalvec: Vec> = Vec::new(); + 'l1: for seq1 in seq { + let seqvec: Vec = seq1.split(",").map(|a| a.parse().unwrap()).collect(); + let mut allow = true; + 'l2: for rul2 in rul.clone() { + + let rulez: Vec = rul2.split("|").map(|a| a.to_string()).collect(); + let r1: i32 = rulez[0].clone().parse().unwrap(); + let r2: i32 = rulez[1].clone().parse().unwrap(); + + if seqvec.contains(&r1) && seqvec.contains(&r2) { + if let Some(pos1) = seqvec.iter().position(|a| a == &r1) { + if let Some(pos2) = seqvec.iter().position(|a| a == &r2) { + if pos1 > pos2 { + println!("not allowed for {:?}, continued!!!!",seq1); + allow = false; + } + } + } + } + } + if allow { + finalvec.push(seqvec) + } + } + for i in &finalvec { + println!("finalvec: {:?}",i) + } + + let mut total = 0; + for i in &finalvec { + total += i[i.len()/2] + } + println!("{}",total) +}