From b7a2427912819522f42f7c355e8aa34a92553f1e Mon Sep 17 00:00:00 2001 From: Anders Olsson Date: Sun, 2 Dec 2018 10:56:32 +0100 Subject: [PATCH] 2018/02 --- 2018/02/Cargo.lock | 4 + 2018/02/Cargo.toml | 6 ++ 2018/02/input.txt | 250 ++++++++++++++++++++++++++++++++++++++++++++ 2018/02/src/main.rs | 60 +++++++++++ 4 files changed, 320 insertions(+) create mode 100644 2018/02/Cargo.lock create mode 100644 2018/02/Cargo.toml create mode 100644 2018/02/input.txt create mode 100644 2018/02/src/main.rs diff --git a/2018/02/Cargo.lock b/2018/02/Cargo.lock new file mode 100644 index 0000000..491b4aa --- /dev/null +++ b/2018/02/Cargo.lock @@ -0,0 +1,4 @@ +[[package]] +name = "day-02" +version = "0.1.0" + diff --git a/2018/02/Cargo.toml b/2018/02/Cargo.toml new file mode 100644 index 0000000..2713367 --- /dev/null +++ b/2018/02/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "day-02" +version = "0.1.0" +authors = ["Anders Olsson "] + +[dependencies] diff --git a/2018/02/input.txt b/2018/02/input.txt new file mode 100644 index 0000000..f8ec30e --- /dev/null +++ b/2018/02/input.txt @@ -0,0 +1,250 @@ +lutrogkbetprmshdyfiqvzixaw +lujnmgkbetprmshdyicqvzivaw +lujnogkbetprmshdyfkqvtpxaw +lujnqgkbetpmmshdywcqvzixaw +lujnogtaetprmshdyffqvzixaw +lujnogkbetprmuldyfcqvqixaw +luunogkbetprlshdyfcqrzixaw +lujnogkketprmshdyhcqvtixaw +lyjnogzbetprmsbdyfcqvzixaw +eujnogkbetprmshdyfrqvzixmw +lujnogcbetprmshdyfvqvziqaw +lujnogkbempruahdyfcqvzixaw +lujlogkbetprmlhdyfyqvzixaw +lrjnogkbetyrmshdofcqvzixaw +lujnogkbetprmlheyfaqvzixaw +lujoohkbetprmshdyfccvzixaw +lijkogkietprmshdyfcqvzixaw +lujnoukbetprmshdyfcqvzmxkw +lujnogkbetprpshdyfcivzixiw +lfjiogkbetprmshdyfwqvzixaw +lujnogkbctprmshdffcqvzicaw +lujnogkbetprashdckcqvzixaw +lwjnogkbetprjshdyfcqvziyaw +lujoogkbetpsmshdyfcnvzixaw +lujnrgkjetprmsvdyfcqvzixaw +luinogkcetprmshdyfccvzixaw +lujnlgkbetprmshdyfcqvziirw +rujnogkbetprmshdyfcqvzmxag +luqnogkbetkrmshdhfcqvzixaw +lujnogkbhxprmshdyfcbvzixaw +lpjnogkbeyprmshdymcqvzixaw +lujnogkbetdymshvyfcqvzixaw +lujnoakbetprmshdlfcnvzixaw +lujnogabetpumsydyfcovzixaw +lpjnogkbetprmshdyfcqvzixzi +gujnogkbevprdshdyfcqvzixaw +lzjnogkbetprmsddyscqvzixaw +lujnolkbmtprmshdyfuqvzixaw +lujnogkbexpenshdyfcqvzixaw +lujnogknetprmshdrfcqvzpxaw +lujnogkbetpfmshayfcqvzwxaw +lujnogkbetmrmshdyfcfvzilaw +lujnogkqetpqdshdyfcqvzixaw +xujnvgkbetprmnhdyfcqvzixaw +lujnogkbetprsshdyfcqviixai +rujnogkbeiprmshdyfcvvzixaw +vujnogkeetprmshdyfcsvzixaw +lujnogkbetcrmshdypcqxzixaw +vuunogkbdtprmshdyfcqvzixaw +nujnogkbetprmsvyyfcqvzixaw +lujnogkbhtprmshdtfpqvzixaw +lujnogkbetzrmphdyfcqvzixan +lujnogkbetprmshdytcqvzixiu +luanogkbeturmshdyfcqviixaw +lujnogkbefprmshdyfcqvhixaf +luvnogkbetprmsfdyfcqvzixhw +lujnockbetprfshdyfcqvzixdw +luenogkbetprmshdyfacvzixaw +lfjnogkbetprmsldyfcxvzixaw +xujnogkbetxrmshdufcqvzixaw +lsjnogkbdtprmswdyfcqvzixaw +lujnogkbetprishdyfcpvgixaw +fujnogkbethrmshdyhcqvzixaw +lujnogabetprmsydyfcovzixaw +lvjnogkbetpvmshzyfcqvzixaw +lujnogkbeturmshdufcqvcixaw +lujnogkietprmshdyzyqvzixaw +lujnogkaatprmshdyfwqvzixaw +lujnogkbetpemshoyfcfvzixaw +lujiogkbetpumshiyfcqvzixaw +lujnvgkbetirmphdyfcqvzixaw +lujnkgkbetprmhhdyfcqvzixmw +lrjnorkbetprmphdyfcqvzixaw +cujnogkietprmshdjfcqvzixaw +lpjnogkbetpryshdyfcqvzixbw +lujrogkbetprmchdzfcqvzixaw +cujnlgkbetprmmhdyfcqvzixaw +rujnogkbotprmshdyfcqczixaw +lucnogknetprmshdyfcqvzixhw +lujnogkbaturmdhdyfcqvzixaw +lujnonkbetpcmshcyfcqvzixaw +lujnogkbelprmshwyfcqvzihaw +luanogkbetprmshdyhcqvzilaw +lljnogkbetwrmshdyfcqxzixaw +lujnogkbetprmshdyfcqejixaz +lujnogkbetbrmshdyfcqizixgw +lujeogkbetprkahdyfcqvzixaw +lujnogkbevprmshssfcqvzixaw +lutnogkbetgrmshdyfcqvmixaw +lujnoppbntprmshdyfcqvzixaw +lujnogkbetprmsmdyftqvdixaw +lujuogubetprmshdyfcqvmixaw +lujnorkbetprmsydyqcqvzixaw +nujnogkbetprmshdyfcqvzifdw +lujnogkbetpryshdygcqvziqaw +ldjiogkbetprmuhdyfcqvzixaw +lujnogkbetpsmghdyfcqvzixag +xujnogkbetprmsrdefcqvzixaw +lujnogkbejprmshiyfcqvzoxaw +lujnogkletlnmshdyfcqvzixaw +aujnogkbetprmwydyfcqvzixaw +lujnogkbetprmsvdyfcrvzixap +lujnogkbeeprmshdyfcqozixmw +lujnogfbethrmshdyfcnvzixaw +lujnogkbetprmshsrflqvzixaw +lujuogkbnrprmshdyfcqvzixaw +lutnogkbetpbmsgdyfcqvzixaw +lujnqgkbetzrmshdyfcxvzixaw +lujnogqbetprmshgxfcqvzixaw +lujnogkbytprmshdyfcqvznxrw +lujnogkbetprmshdyfcqvlidxw +nljnogkbetprmsqdyfcqvzixaw +lujnogkbetprmsidyfcqvfixjw +lujnogkbetprmnhdyfcqvzifaq +lujnogkbetprmwhdylcqvzixlw +lujnogkbstprmshcyffqvzixaw +lujnogkbetprmshdtfcqvzeyaw +lujvzgkbetprmshdyncqvzixaw +bujnogabetprmshdyfcqvzgxaw +lujnogkbptpfmshdyfcrvzixaw +ludnogkbetpsmshdyfcqvbixaw +pgjnogkbttprmshdyfcqvzixaw +lxjnogkbetprmshdyfcqezixyw +lujnogkbutprmshdyfsqvzixjw +lujnpgkbetlrmshdifcqvzixaw +lujnogkbetprmshdygczvzixam +lujnvgkwetirmshdyfcqvzixaw +lujnogkbetprhshdyfcqvvixow +lutnogkbetprmshdyfcrvzixgw +lujnopkbetprmsudyfcqvzqxaw +lujnolkbetprmjhdyftqvzixaw +fujoogkbetprmshdyfcqvziuaw +lqjnogkqetprmshdyfcqmzixaw +lujnogkbetprmgcdyfcqvzibaw +lujnogebebprmshdyzcqvzixaw +lujnogkbetprmshzgfcnvzixaw +luanogkretprmshdsfcqvzixaw +nljnogkbetprmshdyfcqnzixaw +lujnygkbetprmshdyfaqvzixjw +lujnogkbetprmshdlfcqtzixag +zujnogkbevprmshdyfcqvzixao +lujnogkbbtprmshtyfcyvzixaw +lujnogkbetjrmvhdyfcqvzixau +fujnojkbetprmshdyfcqyzixaw +suonogkbetprmshdyfcqvzexaw +lujnogkbetprrshdyfcqvpifaw +lujnogkbjtprmshdyfcqkzixat +lujnogklxtprmshdyfcqyzixaw +lujaogkbetprmshdyfcqvzihat +kujnogkbetprmshlyfcqvjixaw +lujnogkbetormshdyfcqvzbxap +lujnogzuetpemshdyfcqvzixaw +lujnogknetprmshdyfcwvlixaw +lujnopkbetpfmshdyfcqxzixaw +lqjnogkbetprmshdyfcoqzixaw +lujnogkbetprmshdyfcdvzhdaw +lujrogkbetprmshnyfcqvzijaw +luovogkbetprpshdyfcqvzixaw +xujnxgkbeturmshdyfcqvzixaw +lujnogkbetprmshdyfyquzixav +lujnogkbetptmshdyfcqvnitaw +lujnoskbetprmvhdyfcqvziyaw +dujnogkbetprmshdyfcqgzixae +ltjnogkbetprmshdvfcqyzixaw +luznogkbetprmshdyfcqvuixsw +lujnogkbeiprmshdhfcqvzixav +lujtogkbetormkhdyfcqvzixaw +lujnogkbetprmssdyfcqvzilas +lujnlgkbetprmshwyfcnvzixaw +lujnogkbbtprmshdyfcqozfxaw +lzjcogkpetprmshdyfcqvzixaw +lujnogkketprmshdyfcqvzixfg +oujnogkbetprgshdnfcqvzixaw +zujnogkbetpbmshdyfcqvzixiw +lcjnowkbetprmsmdyfcqvzixaw +lujnogkbetprmsedyvcqvzzxaw +lujnzikbetprmshdyfcqvzixlw +lujnogkbetpyqsgdyfcqvzixaw +lujnoukietprmssdyfcqvzixaw +lujnogkbetyrmsydywcqvzixaw +bujnogkdetprmsxdyfcqvzixaw +lujnogkbetprmshdyjcqazixnw +lgjnogktetprmsgdyfcqvzixaw +lujnogkbeaprmahdyfcmvzixaw +lubnoikbetprmshdyfcfvzixaw +eusnogkbotprmshdyfcqvzixaw +lujnogkbgtprmshdbfjqvzixaw +lujnogkketprmshdyfcqvcjxaw +lujnogkbetphmshdsfcqvzgxaw +lujnhgkbdtprmshdyfeqvzixaw +lujnogkbetpamsjdyfcqvlixaw +lujnogkbetprmshlyfccvzxxaw +lujzogkbetprmshdyfgqvzixpw +lujnogkbetprfshdylcqveixaw +lujnigkbetprmshdyfcqvzqxrw +lujnogkbetpqmshdybcvvzixaw +lujnogkbetprmsxdyfvqvzpxaw +lujnogkbetprmfhdyfcqvmoxaw +lujnoskbetprmhfdyfcqvzixaw +lujnogkbetprmsodkfcqvzdxaw +lujnogkbetpzrshdyfcqvzixpw +mujnogkbetprmshdyfcsvzixan +lujnonwbetprmshdyfcqvzixam +lujnogkgetgrmshdyfcxvzixaw +lujnogkbetpimshdyfcqvzixgs +auanogkbetprmshdyfcxvzixaw +lujnogkbenprishnyfcqvzixaw +mujiogkbetpreshdyfcqvzixaw +lujnogkbdipcmshdyfcqvzixaw +kujnogkbetprmshdyucqvlixaw +lujnogsbetprmshdrfcqvrixaw +luynogkbetprhshdyfcqvsixaw +lbjnogebetprmshdyfcqezixaw +lujnogkbetprmnhtyfcqvzixap +lujnogkbetprmszdhfcvvzixaw +lujnogkbetprtshdywcqezixaw +iuznogkbetprmshdyflqvzixaw +nujnogkbetprmkhyyfcqvzixaw +aujnogkbetprmshhyfcqvzijaw +lujzogkbstprmshdyfcyvzixaw +lujmogkbetprmshdtfctvzixaw +ljjnogkbetrrmshdyfcqvzixaq +lujnjgkbetprmshdyfdcvzixaw +lujnogkbettrmshdyzcqvzfxaw +dujnogybetvrmshdyfcqvzixaw +lujnogkbetermshdmfcqvzvxaw +lujnogkbetprmshdjfcdvzixab +lujnogkbetirmshjyfcqvjixaw +lujnogkbeiurmshdyfcqyzixaw +lsjnogkbmtproshdyfcqvzixaw +lujnogkqftprmshdyfcqvziwaw +lujvogkbetprmshdyfcqvoixyw +lujnogkoetprmshdyfpqvcixaw +lujnogkbetprmshdyfcqvmghaw +lujnmgkbetprmshdifcqveixaw +lumlovkbetprmshdyfcqvzixaw +lpjnogkretprmshdyfcqvfixaw +luvnogpbetprmshdyftqvzixaw +lujnogkbeturmshgymcqvzixaw +lujiogkbbrprmshdyfcqvzixaw +yujnogkbutprmshdyfcqvzixab +lujvofubetprmshdyfcqvzixaw +lujwogkbrtprmshdyfcqvnixaw +lusnogkbetprmsydyfcqvzikaw +lujnolkbewprmshdyfyqvzixaw +lujnogkbetprvshdyfcivzikaw +lujnogxbetprmszdyfzqvzixaw +lujnogkvetprmxhdydcqvzixaw +lujnogkbetpimsrdwfcqvzixaw +lujnomboetprmshdyfcqvzixaw diff --git a/2018/02/src/main.rs b/2018/02/src/main.rs new file mode 100644 index 0000000..822404a --- /dev/null +++ b/2018/02/src/main.rs @@ -0,0 +1,60 @@ +use std::collections::HashMap; +use std::io::{self, BufRead}; + +fn diff(left: &str, right: &str) -> Vec<(usize, (char, char))> { + left.chars() + .zip(right.chars()) + .enumerate() + .filter(|(_, (a, b))| a != b) + .collect::>() +} + +fn main() { + let stdin = io::stdin(); + + let lines = stdin + .lock() + .lines() + .filter_map(Result::ok) + .map(|line| { + let mut map = HashMap::new(); + + for ch in line.chars() { + map.entry(ch).and_modify(|x| *x += 1).or_insert(1); + } + + (line, map) + }).collect::>(); + + let two = lines + .iter() + .filter(|(_, map)| map.iter().any(|(_, count)| *count == 2)) + .count(); + let three = lines + .iter() + .filter(|(_, map)| map.iter().any(|(_, count)| *count == 3)) + .count(); + + println!("part.one={}", two * three); + + for (i, (left, _)) in lines.iter().enumerate() { + let diff = lines + .iter() + .skip(i + 1) + .map(|(right, _)| diff(left, right)) + .find(|diff| diff.len() == 1) + .map(|mut diff| diff.pop().unwrap()); + + if let Some((n, _)) = diff { + let string = left + .chars() + .enumerate() + .filter(|(i, _)| *i != n) + .map(|(_, c)| c) + .collect::(); + + println!("part.two={:?}", string); + break; + } + } +}