From 9fcba93cd927a77e936b3bba3f6879ab2828abde Mon Sep 17 00:00:00 2001 From: Kevin Cotugno Date: Mon, 3 Dec 2018 22:25:46 -0800 Subject: [PATCH] Challenge two --- input/02.txt | 250 ++++++++++++++++++++++++++++++++++++++++++++++++ src/aoc/c01.rs | 2 +- src/aoc/c02.rs | 118 +++++++++++++++++++++++ src/aoc/lib.rs | 4 +- src/bin/main.rs | 2 +- 5 files changed, 373 insertions(+), 3 deletions(-) create mode 100644 input/02.txt create mode 100644 src/aoc/c02.rs diff --git a/input/02.txt b/input/02.txt new file mode 100644 index 0000000..077f200 --- /dev/null +++ b/input/02.txt @@ -0,0 +1,250 @@ +pnebjqralgdgckzfifvtxywomu +pnebjqsalrdgcqzfihotxhwomu +pneajqsalrdgckzfihytxywoml +pnepjqsalrwgckztihvtxywomu +pnhbjqsalrdgckzfimvtxywodu +pnwbjqsdlrdgckzfihvnxywomu +inebjqnalrdgckzfihvtxzwomu +pnebjssalhdgckzfihvtsywomu +pnebjqjalrdgckzfiavtxywoku +vnebjqsalrdgckzfihvbxmwomu +phebjksaurdgckzfihvtxywomu +pneojqealrdgckzhihvtxywomu +snebjqsalrdgckzqihvtxyzomu +pnebjqsalrtackzfihvtxswomu +bnebjqlalrdgckzfihvtxywhmu +pnebjqfalrdgckzfijvtxywomi +fnehjbsalrdgckzfihvtxywomu +pnebjasalrdgckzdihvtxqwomu +pnebjhsaljdgckzfihvtxywmmu +pnebjqsalrdgckzfihvsxykoau +pnebjqsalrdgckzbihvtdywomc +pnobjqsalrxgckzfihvtxywomh +pnebjqstlrdgchzfihvtxywnmu +pnebjquaxrdgckzfihvtxywolu +pqebjqsalrdgcdzfihvtcywomu +xnabjqsalrdgckzfihvtxywmmu +rnebjqsalrdgckzfihvtxmwouu +vaebjqsalrdgckcfihvtxywomu +pnebjqsalrpgcnzfihvbxywomu +pcvbjqsalrdjckzfihvtxywomu +pneyjqsafrdgckzfihdtxywomu +pxedjqsalrdgckzfihvtxyzomu +pnebjqsalrdgctzfihnyxywomu +pnebjqsalrdgckzfihvtnylsmu +pnebjqsalrdyckzfihvbxycomu +fnebjqsalrdgckzfihvtxtwomc +pnobjqsalrdgckdfihvtxywomh +pqebjqsalrdgcqzfihvtxywymu +pnebxqsalrdgckzficvtwywomu +pnebjqshlragczzfihvtxywomu +pnebqqsalrdackzfihttxywomu +pnebjqsalrdsckwfbhvtxywomu +pnehjqsalrdgcuzfxhvtxywomu +pnebjqsavrdgckzfihvexywomn +pnebunsalrdgckzfihvtxywomi +pnebjxsalrdgckzfmhvtpywomu +rnebjqsalrdghkzfihztxywomu +pnebjqsalrigcbzfihvfxywomu +pnebqqsalrggckzfihvtxyromu +pnebjqsalrdgchzfihvtxylmmu +pnebeqsalrdgckzdihvtxywoms +pnebjqsalrdgckzzihvfxywozu +pnzbjgsalrtgckzfihvtxywomu +pnebjqsaledgckzjihvtxzwomu +pnebjqsalydgckqfihvtxywouu +pnebjqsalrdgckufihvqxdwomu +pnebjqsylrdgckzfihvdxyjomu +pnemjqsalrdgckzeihvtxywoqu +plebjasalrdgckzfihvtxywomb +pnebjqsadrdgckufihvtxyfomu +pbebjqsaardgckzfihvtxmwomu +pnebjqsalrdgcmzfihotxywgmu +pnebjqsaprdgcizfihvtxywhmu +pnebjqsalrkgcuzfihvtlywomu +pnebjqsalrdnckzfihvtxysomg +pnebjqdafrdgckzfihctxywomu +pnebjqsalrdgckzfihutxkwomp +pnebvqsalrdgclzfimvtxywomu +pnebjqralrdgcktfihvtxiwomu +pneujqsalrdsckzfzhvtxywomu +pnebfqgalrdgckzfihvtxywjmu +pneyjqsalrkgckzfihctxywomu +pndbjqsalrdgckzfjhvtxywouu +pneljnsalrdgcozfihvtxywomu +phebjqsalrdgckzfihxtxdwomu +pnlbjqsalrhgckzfzhvtxywomu +pnebjqsalrsgckzfiovtxywwmu +pncbjqsalrdgfkzfivvtxywomu +nnebjqsalrdgckzfthvtxycomu +pnebjqwalsdgckzfixvtxywomu +pnebjtsalrdgcfzfimvtxywomu +pnebjqsvlrdgckzfihutxfwomu +pnebjmsalrdgckzkxhvtxywomu +pnekjqsllrdgckzfinvtxywomu +pneijqsxlrdgckzfihvtxywjmu +wnxbjqsafrdgckzfihvtxywomu +pnebjqskledgokzfihvtxywomu +pnebjqvalrdgckzfihvtxytoju +pneqjqsalrdgckzfilvthywomu +pnebjqsalrdgckzfihvokywomf +bnebjqsalrdgckufihvtxywimu +pnebjqsaurdgckzfihvtrywosu +pnebjmsaludgckzfihvtxywomn +pnebdqsalrdgcktfihvtxywodu +pnebjqjylzdgckzfihvtxywomu +piebjqsalrdgcrzfihstxywomu +pnebjqsaurdgckwfnhvtxywomu +pnebxqsajrdgcjzfihvtxywomu +pnebjqsalrdghsdfihvtxywomu +pnebcqsxlrdgckzfihvtxyaomu +pnefjqsalrdgckzfuhvtxyworu +pnebjqsalrdlcksfihvteywomu +pnebjqlalrgackzfihvtxywomu +pnebdqsalrdickzfihvtxdwomu +pneujksalrdgctzfihvtxywomu +pnebjqsalrduckzfihvsxywomf +pnebjqsalrdgckcfihotxywomd +envbjqsalsdgckzfihvtxywomu +pnebjqsalzdgcvzzihvtxywomu +pnebjqsalrdyckzflhvyxywomu +pnebjqsalrdglkzfihstxymomu +pnebmqsalrdgokzfihvtxywoml +pnebjqsylrdnckzfihatxywomu +pnebjqaflndgckzfihvtxywomu +pneboqsagragckzfihvtxywomu +peebjqstlndgckzfihvtxywomu +onebjqsklrdgckzfihvtxmwomu +pnebjqjnlrdgckrfihvtxywomu +pnebjqsalrhgckzfihvqxywomh +pnebjqsalrdgckzzihvtxowomw +pnebjgsalrdgckffihltxywomu +znebaqsalcdgckzfihvtxywomu +pnnbjqeasrdgckzfihvtxywomu +rnebjqaalrxgckzfihvtxywomu +pnebjqsalrdgckaxphvtxywomu +pnebjcnalrdgnkzfihvtxywomu +pnebjasalbdgckzmihvtxywomu +pnebjqsalrdgckefjhvtmywomu +pnebjqsalrdgmkzfihvtxyoomb +pnebjqsalrkgckogihvtxywomu +pnwbjqsalrdgckztihvtxywomt +pnebjqsalrdgckzfihotgnwomu +pnebjqsdlrrgckzfihvtxyaomu +pnebvasalrdgckzfihvtsywomu +pnebrqqalrvgckzfihvtxywomu +tnebjqsglrdgqkzfihvtxywomu +pnebjqsatrsgckifihvtxywomu +pneboqsalrdgckzfihvkxywomi +pnezaqsalrdgcktfihvtxywomu +pnebjqsnlrdgckzfihvfxqwomu +pneajqsaxrmgckzfihvtxywomu +pnebjosalodgckzfihvxxywomu +pnebjqsalndgckmfihvtfywomu +pneejqsalidgckzfihgtxywomu +pnecjqsalrdgckzfihptxiwomu +tnebjqsalrdgckznihvxxywomu +ptebjqsalrdgckzfimvtxywomm +wnebjqsalndgckzfihvtxywoju +fnebmqsplrdgckzfihvtxywomu +pnlbjqsalrdghkzficvtxywomu +pnebjqsesrdgckzdihvtxywomu +pnebjqsalregokzfirvtxywomu +pnebjtualrtgckzfihvtxywomu +pnebjwsdlrdgckzfihvtxywoml +pnlbjqsayrdgckzfqhvtxywomu +pnebjwsalpdgckzfihvtxywomc +pnqbjqsalcdgckzhihvtxywomu +pneujqsalrdgckzfhhvtxrwomu +pnebjqsalqdgcizfihvtxywimu +pnebjqsacldgckzfihvwxywomu +puebjqsalrdgckzfbhvtxyeomu +pnebjqsalrdgcyimihvtxywomu +pnebjlsalrdgckzfihvtxiwome +pnebfusalrdgckzfihvtxywodu +pnebjqsalrdgvazfirvtxywomu +pnebjqsalrdgckyfohvtxywomz +gnenjqsalrdgckzfihvtxynomu +mnebjqsalrdgckhfihvtxycomu +phebjqsalrdgckzfihvtxtworu +pnebjqsalrdgdkzfihvtxywfmj +pneveqsairdgckzfihvtxywomu +pnebjqsalcdlckzfihvtxywomg +pneajqsalrdgckzfihvtxygoxu +puebjqdclrdgckzfihvtxywomu +tuebjqsalrdgckzfihvtxywoou +pwenjqsalrdgckzfihvtxywomg +pnebjqsalrdgckzfihhltywomu +pnebjqsalrdgchzqievtxywomu +pnegjqsalrdgckzfiovtxywdmu +pnebjaralrqgckzfihvtxywomu +pnebjqsalrdrckzfimvtxywomm +pnebjqsalrdgckzfpgvtxewomu +pnebjqsalrdhcqzfihitxywomu +pnebjqsalrjgckefihmtxywomu +pnebjcsalrdgcksfikvtxywomu +pnebjqsalrdgckzfihvtxywdjc +pnebjqsazrjgckzjihvtxywomu +pnfbjqsclrdgckzfihvtxybomu +pnebjqsalrdgckuqihvtxyaomu +pfpbjzsalrdgckzfihvtxywomu +pnevjqsalrdgckwfihytxywomu +pnebjqsqlrkgckzfihvtvywomu +pneejqsalrdlckzfihvtxywopu +pnebjqsalcdgxkzfihvtxywomd +pneqjqsalrdgcvzzihvtxywomu +pnvbjqsalydgctzfihvtxywomu +pnebjqsalrdgckzzihvfxywomn +pnybjqsaerdgckzfihstxywomu +pnobjqsalrdkckzfihvtxywomv +pnebjqsalridckzfihvtxywfmu +pnhbjqsaludgckyfihvtxywomu +pnetjqsaprdgykzfihvtxywomu +wnebjqsalrdvcfzfihvtxywomu +pnetjqsalrdmckwfihvtxywomu +pnebjysalrdgcszfihvtxnwomu +pnebjqsrlrdgckzfihvtxywkhu +pnubjqsplrdgcjzfihvtxywomu +pnebjqsalrdzckzficjtxywomu +pnebjqsalregckzfinvtxywoku +pnebjqsalrcgckyfivvtxywomu +pyenjqsalrdgckzfihvnxywomu +prebjqsalrdnckzfihvtxysomg +pnebjnsalrdgchzfihvaxywomu +pnebjqsalrdgckzfihxagywomu +pnebjqsalrdgckzvihvtoywoml +pnebjqsilrdgckzfihvtfywgmu +pnebjqmalrdgckzfihvtvawomu +pnebqqsalrdgckzfiuvtfywomu +pneqjqsalrdgckzfihvqxywomi +pnebjesalrsgckzfihvtxywmmu +znebjqsblrdgckzfihvlxywomu +pnebjqsalrdgckzfuhvtlyworu +pnebjqsylrdgckzfihvqxpwomu +onebjqsalfdgckifihvtxywomu +pnebjusalrdgckzfihvtxywyml +pnebjssflrdgckzfigvtxywomu +pnebjfsdzrdgckzfihvtxywomu +pnebjqsalrdgcktfihvixywocu +gnebjqnaqrdgckzfihvtxywomu +pnebjqsaqrugckzfihhtxywomu +pnebjqsxlrdgckzfihvtxlwosu +pnebjzsalrdgckzmihvtxywovu +pnebgqsalrdgckzfizvtxyjomu +pnebjqsmlrdgckzfihvtxywsmi +pnebjqsakmdgckzjihvtxywomu +pnebjqdglrdgckvfihvtxywomu +pnebmhsalrdgckxfihvtxywomu +pneejqsalrdlckzfihvnxywomu +bnebjqsalmdgckzfihvfxywomu +bnebjnsalrdgcizfihvtxywomu +pnebjqsalhdgcdzfihvbxywomu +pnebjqsjlrdgckzfihvgiywomu +pnebjisalrdgckzfihvtxywqmi +pdebjqsalrdickzfihhtxywomu +pnebjqsalrdkckzfihvjeywomu +pneyjqsalrqgckzfihvtxywohu +pnebjqsalrdgckcfihvtxjlomu +plebqwsalrdgckzfihvtxywomu +pnebjqlalrdgckzfihetxynomu +sngbjqsalrdgckzfihvmxywomu diff --git a/src/aoc/c01.rs b/src/aoc/c01.rs index 18f5e3d..10b8b21 100644 --- a/src/aoc/c01.rs +++ b/src/aoc/c01.rs @@ -1,6 +1,6 @@ use std::collections::HashSet; -pub fn run(input: &[String], part: u8) -> String { +pub fn run(input: &[&str], part: u8) -> String { let encoded: Vec<_> = input.iter().map(|i| i.parse::().unwrap()).collect(); match part { 1 => c_01_1(&encoded), diff --git a/src/aoc/c02.rs b/src/aoc/c02.rs new file mode 100644 index 0000000..7369646 --- /dev/null +++ b/src/aoc/c02.rs @@ -0,0 +1,118 @@ +use std::collections::HashMap; + +pub fn run(input: &[&str], part: u8) -> String { + match part { + 1 => c_02_1(input).to_string(), + 2 => c_02_2(input), + _ => panic!("unknown part"), + } +} + +fn c_02_1(input: &[&str]) -> i32 { + let mut three = 0; + let mut two = 0; + for val in input { + let mut m = HashMap::new(); + + for c in val.chars() { + let new_val =match m.get(&c) { + Some(v) => *v+1, + None => 1 + }; + + m.insert(c.clone(), new_val); + } + + three += match m.iter().filter(|(_, v)| **v == 3).next() { + Some(_) => 1, + None => 0 + }; + two += match m.iter().filter(|(_, v)| **v == 2).next() { + Some(_) => 1, + None => 0 + }; + } + + three * two +} + +fn c_02_2(input: &[&str]) -> String { + for val1 in input { + for val2 in input { + let mut diff = 0; + let mut val2char = val2.chars(); + for val1char in val1.chars() { + match val2char.next() { + Some(v) => { + if v != val1char { + diff += 1; + if diff > 1 { + break; + } + } + }, + None => () + } + } + + if diff == 1 { + let mut s = String::new(); + for (i, c) in val1.chars().enumerate() { + if c == val2.chars().nth(i).unwrap() { + s.push(c); + } + } + + return s; + } + } + } + + String::new() +} + +#[cfg(test)] +mod tests { + use super::*; + use std::collections::HashMap; + + #[test] + fn c_02_1_examples() -> Result<(), String> { + let mut examples: HashMap<&[&str], i32> = HashMap::new(); + examples.insert( + &[ + "abcdef", "bababc", "abbcde", "abcccd", "aabcdd", "abcdee", "ababab", + ], + 12, + ); + + for (input, out) in examples.iter() { + let actual = c_02_1(input); + if &actual != out { + return Err(format!("Got: {}, Want: {}", actual, out)); + } + } + + Ok(()) + } + + #[test] + fn c_02_2_examples() -> Result<(), String> { + let mut examples: HashMap<&[&str], &str> = HashMap::new(); + examples.insert( + &[ + "abcde", "fghij", "klmno", "pqrst", "fguij", "axcye", "wvxyz", + ], + "fgij", + ); + + for (input, out) in examples.iter() { + let actual = c_02_2(input); + if &actual != out { + return Err(format!("Got: {}, Want: {}", actual, out)); + } + } + + Ok(()) + } +} diff --git a/src/aoc/lib.rs b/src/aoc/lib.rs index f88eb73..cd9fd60 100644 --- a/src/aoc/lib.rs +++ b/src/aoc/lib.rs @@ -1,8 +1,10 @@ mod c01; +mod c02; -pub fn run(input: &[String], challenge: u8, part: u8) -> String { +pub fn run(input: &[&str], challenge: u8, part: u8) -> String { match challenge { 1 => c01::run(input, part), + 2 => c02::run(input, part), _ => panic!("challenge not implemented"), } } diff --git a/src/bin/main.rs b/src/bin/main.rs index 287ab37..a6c0588 100644 --- a/src/bin/main.rs +++ b/src/bin/main.rs @@ -20,5 +20,5 @@ fn main() { .map(|v| v.to_string()) .collect(); - println!("{}", aoc::run(&lines, challenge, part)); + println!("{}", aoc::run(&(lines.iter().map(|s| s.as_str()).collect::>() ), challenge, part)); }