From 120d53c0ff20574866ce10fa0538fb8b0dd2ef82 Mon Sep 17 00:00:00 2001 From: Federico Igne Date: Thu, 23 Jun 2022 19:06:22 +0100 Subject: Reorganize repository structure --- day14/Cargo.toml | 9 ---- day14/resources/input.txt | 102 ---------------------------------------------- day14/src/main.rs | 55 ------------------------- 3 files changed, 166 deletions(-) delete mode 100644 day14/Cargo.toml delete mode 100644 day14/resources/input.txt delete mode 100644 day14/src/main.rs (limited to 'day14') diff --git a/day14/Cargo.toml b/day14/Cargo.toml deleted file mode 100644 index d2891da..0000000 --- a/day14/Cargo.toml +++ /dev/null @@ -1,9 +0,0 @@ -[package] -name = "day14" -version = "0.1.0" -authors = ["Federico Igne "] -edition = "2018" - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - -[dependencies] diff --git a/day14/resources/input.txt b/day14/resources/input.txt deleted file mode 100644 index 5074877..0000000 --- a/day14/resources/input.txt +++ /dev/null @@ -1,102 +0,0 @@ -SCVHKHVSHPVCNBKBPVHV - -SB -> B -HH -> P -VF -> N -BS -> S -NC -> C -BF -> H -BN -> H -SP -> H -BK -> H -FF -> N -VN -> B -FN -> C -FS -> S -PP -> F -ON -> H -FV -> F -KO -> F -PK -> H -VB -> S -HS -> B -NV -> O -PN -> S -VH -> B -OS -> P -BP -> H -OV -> B -HK -> S -NN -> K -SV -> C -PB -> F -SK -> F -FB -> S -NB -> K -HF -> P -FK -> K -KV -> P -PV -> F -BC -> S -FO -> N -HC -> F -CP -> B -KK -> F -PC -> S -HN -> O -SH -> H -CK -> P -CO -> F -HP -> K -PS -> C -KP -> F -OF -> K -KS -> F -NO -> V -CB -> K -NF -> N -SF -> F -SC -> P -FC -> V -BV -> B -SS -> O -KC -> K -FH -> C -OP -> C -CF -> K -VO -> V -VK -> H -KH -> O -NP -> V -NH -> O -NS -> V -BH -> C -CH -> S -CC -> F -CS -> P -SN -> F -BO -> S -NK -> S -OO -> P -VV -> F -FP -> V -OK -> C -SO -> H -KN -> P -HO -> O -PO -> H -VS -> N -PF -> N -CV -> F -BB -> H -VC -> H -HV -> B -CN -> S -OH -> K -KF -> K -HB -> S -OC -> H -KB -> P -OB -> C -VP -> C -PH -> K diff --git a/day14/src/main.rs b/day14/src/main.rs deleted file mode 100644 index 6cca304..0000000 --- a/day14/src/main.rs +++ /dev/null @@ -1,55 +0,0 @@ -use std::fs; -use std::path::Path; -use std::collections::HashMap; -use std::iter::FromIterator; - -type Expand = (char,char); -type Rules = HashMap<(char,char),char>; -type Frequency = HashMap; -type FrequencyMap = HashMap; - -/* AOC21 Day 14: https://adventofcode.com/2021/day/14 */ -fn main() { - let input = Path::new("resources").join("input.txt"); - let content = fs::read_to_string(input).expect("Unable to read input file"); - let (template,rules) = content.split_once("\n\n").expect("Malformed input"); - let rules = Rules::from_iter(rules.lines().map(|l| { - let (from,to) = l.split_once(" -> ").expect("Malformed input"); - let chars = from.chars().collect::>(); - ((chars[0],chars[1]),to.parse().unwrap()) - })); - let mut frequency = FrequencyMap::new(); - rules.iter().for_each(|(&(a,b),&c)| { - let mut map = HashMap::new(); map.insert(c,1); - frequency.insert((a,b),map); - }); - (1..10).for_each(|_| frequency = expand(&frequency, &rules)); - println!("Ex1: the result is {}", template_frequency(template, &frequency)); - (0..30).for_each(|_| frequency = expand(&frequency, &rules)); - println!("Ex2: the result is {}", template_frequency(template, &frequency)); -} - -fn expand(frequency: &FrequencyMap, rules: &Rules) -> FrequencyMap { - let mut freq2 = FrequencyMap::new(); - rules.iter().for_each(|(&(a,b),&c)| { - let mut map = merge(frequency.get(&(a,c)).unwrap(), frequency.get(&(c,b)).unwrap()); - *map.entry(c).or_default() += 1; - *freq2.entry((a,b)).or_default() = map; - }); - freq2 -} - -fn template_frequency(template: &str, frequency: &FrequencyMap) -> u128 { - let mut freq = HashMap::new(); - template.chars().for_each(|c| *freq.entry(c).or_default() += 1); - freq = template.chars().collect::>() - .as_slice().windows(2) - .fold(freq, |acc, w| merge(&acc, frequency.get(&(w[0],w[1])).unwrap()) ); - freq.values().max().unwrap() - freq.values().min().unwrap() -} - -fn merge(a: &Frequency, b: &Frequency) -> Frequency { - let mut map = a.clone(); - b.iter().for_each(|(&k,&v)| *map.entry(k).or_default() += v); - map -} -- cgit v1.2.3