1
0
Fork 0

day 2 solution

main
Andrew Coleman 2018-12-04 09:05:45 -05:00
parent 21d0ccd59a
commit 59c1563ace
4 changed files with 336 additions and 0 deletions

14
2018/day2/Cargo.lock generated Normal file
View File

@ -0,0 +1,14 @@
[[package]]
name = "day2"
version = "0.1.0"
dependencies = [
"edit-distance 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "edit-distance"
version = "2.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
[metadata]
"checksum edit-distance 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "3bd26878c3d921f89797a4e1a1711919f999a9f6946bb6f5a4ffda126d297b7e"

7
2018/day2/Cargo.toml Normal file
View File

@ -0,0 +1,7 @@
[package]
name = "day2"
version = "0.1.0"
authors = ["Andrew Coleman <penguincoder@gmail.com>"]
[dependencies]
edit-distance = "2.0.0"

250
2018/day2/input Normal file
View File

@ -0,0 +1,250 @@
qywzphxoiseldjrbaoagvkmanu
qywzphxeisulpjrbtfcgvkmanu
qywzxhooiseldjrbtfcgvcmanu
qywzphjojseldjubtfcgvkmanu
qtwzphxoieeldjrbtfcgvrmanu
tywzphzoiseldjritfcgvkmanu
qyuzphxoiseldjrbtfcgykbanu
qswzmhxoiseldjrbtfcgvkaanu
qyczqhxoiseldjrbtfcgvkbanu
qybzpqxooseldjrbtfcgvkmanu
qywzpoxoxseldjrbtfcgvpmanu
qywzphxbipeldjrbtfcgvkmaru
qywzpmxoiseldjrutqcgvkmanu
qywzphxoisesdjrrtfchvkmanu
qywzphxoiseldhrbtfcgukyanu
jywzphyoiseldjrbtfclvkmanu
qywzvhxoiselrjrbtfcgvkmanl
qywzplxojseldjrbtfcgvkmamu
qywzphxoiseldjrbtacgvkmvnd
qywpphxoiseldjrbtfcgvkvenu
qqazphxoiselqjrbtfcgvkmanu
qyozvhxoiseldjrbtfcgvkmadu
xywzphxliseldjhbtfcgvkmanu
qdwzphioiseldqrbtfcgvkmanu
qswyphxoiseldjrbtfcgvkmanx
qowzshxoiseldjrbtfigvkmanu
qywzphxoiseldjjbtfcgvkmawq
qyhzphxoiseldjrbtfvgvkmynu
qxwzphxoiselmjrbtfcgvqmanu
qywzphxoiceldjrbtfcgikmgnu
qywephxoiseldjrbthcgvkmane
yywzphxoisejdjrotfcgvkmanu
qywzxhxoisyldyrbtfcgvkmanu
qywzpjxoiseqdjrbtfcgvwmanu
qywzphxoqweldprbtfcgvkmanu
qywzphnoiseldjrbtfcamkmanu
qylgphxoiseldjrbtfcgvkmauu
qysdphxomseldjrbtfcgvkmanu
lywzpoxoikeldjrbtfcgvkmanu
qywzphxgiseldjrbtfeqvkmanu
qywzdhxozseldjcbtfcgvkmanu
qywzphxeiskedjrbtfcgvkmanu
qmwzphxoispldjrbtfcgvkmany
qywzphxoiselzcrbtfcgvkmanz
qywzphxoisxodjrbtscgvkmanu
qywzphxoiseldjrrtfcgmkmaeu
aywzphxoiseldjrbtfmjvkmanu
qywzthxoiiewdjrbtfcgvkmanu
qywzpsxoisrzdjrbtfcgvkmanu
qywzphxoiseldjkbtqcgvkmank
tywzphxoisewdjkbtfcgvkmanu
qywkchxoiseldjrbtfcghkmanu
qywzphxoiseldjoftfrgvkmanu
qywzpixoisehdjrbtfcgvkmacu
qywzchooiseldarbtfcgvkmanu
qywyphtoaseldjrbtfcgvkmanu
qywyphxotsbldjrbtfcgvkmanu
qywzphxoiseldjrbhsggvkmanu
dywzphxoiseldjrktfegvkmanu
qywzphxoiseldjrmtfcgvkcenu
qywcphxjiseldjybtfcgvkmanu
qywzphxoiseldhrbsfogvkmanu
qmwzpheoiseldjrrtfcgvkmanu
qywzrhxoiselpjrbtfcgvemanu
qyezphpoiseldjrbtfcgvdmanu
qywzphxvisewdjrbtfcgvkmdnu
qywzphkoiseldjrbtfcgvkmdnh
qywzehxoiseldfrbtpcgvkmanu
qywzphxoiseldjrrtfcgvrdanu
qpwzphxoizeldjqbtfcgvkmanu
qywzphxojseldjrbtmcgvkmvnu
vywzphxoiseldjrbtfcgvkmaop
sywzphxoiselbjrttfcgvkmanu
qywwphkoiseldjrbtfcivkmanu
qlwkpcxoiseldjrbtfcgvkmanu
qywzphxoiyesdjrbtfcgvkmvnu
qywzphxoiseldjrbofcgrkmrnu
qywzphxyiseldjrstfcgvkmjnu
qywzphaoiseldtrbnfcgvkmanu
qywzphxhisuldurbtfcgvkmanu
qywzphxdiseldjrbtvugvkmanu
qywzpzxbiseldjrbtfcgukmanu
qyrzphxoixeldjrbtfcgvumanu
qywzphxoiberdjrptfcgvkmanu
qywzphxfiskldjrbtfcgvkmdnu
qyxzphxoiseldjrdhfcgvkmanu
qywzphrqiseldjrbtfcgvbmanu
qyezphxviseldjrbtfcgvkmani
qywgphxoiseldgkbtfcgvkmanu
qywzphxoileldjrbtgcgvkdanu
qywzphxoiseldnrbtfcwvkmpnu
qywzphxoiseidjrbmfcqvkmanu
qywzpkxoiselijrbtfcgvlmanu
mywzphxoiveldjrbtfcgvkmunu
qywzphxooseddjrbtfcgpkmanu
qywzphxokseldjritfcyvkmanu
qywzxhxoiseldjrbtfqgvcmanu
qywzphxoisfldjrbpfcgvkmaju
qywuphxgiseldjrbffcgvkmanu
qywzphociseldjrbtfcgvkuanu
qywzphxoiseldvrbtftgckmanu
qywzpbxoisrldjrbtfngvkmanu
qywzphxoiseldjrntfygvdmanu
qywzphxviseldkrbtfcgvkianu
qywpphxgiseldjrbtfctvkmanu
qywzphxoicewdjrbtfcgvsmanu
qywzpcxoiseldjmbtfcgvcmanu
qrwzphxoiseldjrbtfcgjumanu
qywzphxoiselojrbtfcgxkmaau
qywzphxojsbldjrbtfcgykmanu
oywzphxoiseldjrbtfqgvkmvnu
qywfphxpiseldjrbtfckvkmanu
qyyzwhxwiseldjrbtfcgvkmanu
qywzphxgiseldjrbtfchvkmabu
qywzphxfiseldjrbtfcgukoanu
qywzpdxoisyldjrbtfcgvkxanu
dyuzphxoiseldjrbtfcgvkmamu
qywzphxoiseldjrbifcgvkmnnp
qywzpyxoiseldjrbtfcgvklano
dywzphxoiieldjrbtfcgvwmanu
qywzphxoihemdjrbtfcgvdmanu
gywzphxoxseldvrbtfcgvkmanu
qywzqhxoissldjwbtfcgvkmanu
eywzphxoiieldjrbtfcgekmanu
qyizprxciseldjrbtfcgvkmanu
qywjphxoiseldjrbtfcgckmano
qywznhxoiseldjrbrfcgvkmagu
qywzphxoisrldjdbvfcgvkmanu
qyyxphxoiseldjrbtwcgvkmanu
qywzphxoiseldjdbtfcpvkmjnu
qywzvhxqiseldjrbofcgvkmanu
vywzphxoiseldjrbtfcgckwanu
qywzphgbiseldjrbtfcgvkmazu
qcwzphxoiseldjrbqfcgvkmdnu
qywzphxoismldjrbtfcgkkmznu
qywhphxoiseldjrbtccgvkmane
qywzphzoiseldjrbtfcgvqmauu
hywzphxoiseldjrbtfcuvkmanc
qywzphxozsejdgrbtfcgvkmanu
qyszphxoiseldjrntfygvdmanu
qywzphxoisgldjrbtfcgvklaru
qywzhhxoiseldjrbtscgvkmqnu
qywjphxpiqeldjrbtfcgvkmanu
qywzphxoiseldxrptfclvkmanu
qywlphxoisehdjrbtfcgvkmanc
qydzpfxoiseldjrwtfcgvkmanu
qywzphxoiseldjrbtxcgqkfanu
qywophxoiselfjrbtfcgvkmani
qywzyhxoiszldtrbtfcgvkmanu
qywzphxoxseldfrntfcgvkmanu
qywzphloiseldjqbtfcgvkmtnu
qywzpuxoiseldorbtfcgvkeanu
qywzphxoiueldjrwdfcgvkmanu
qgwzphxoiseldjmbtncgvkmanu
qywzphtggseldjrbtfcgvkmanu
qywzphxoisrldjrbtfmgvhmanu
qfszphxoiseldjqbtfcgvkmanu
qywzphxpisjldjrbxfcgvkmanu
qywznhxoisepdjrbtfqgvkmanu
qywzphioiseldjabtfcgxkmanu
qyizphxaiseldjrbtfcgvkmaxu
xywzphxoiqelvjrbtfcgvkmanu
quwzphxoiseldjretfcgvkmaau
bywzphxoiseldjrbtucgckmanu
jywzphxoiseldjrbofcgvkmani
qywzphxoiseltjkbtfcgvkmabu
eywzphxoiselgjrbtfkgvkmanu
qywzphxoisengjrttfcgvkmanu
qywzphzoiseldjrbtfcgvkmknk
quwdphxoiseldjrbtfcxvkmanu
qcwzzhxoiseldjrgtfcgvkmanu
qywgphxdiseldjrbtfcgjkmanu
qywzpdxoivefdjrbtfcgvkmanu
qywzphxoiseldjrbtfdgvjmpnu
qfwzphxoiseydkrbtfcgvkmanu
qywzphxdiqelqjrbtfcgvkmanu
qywzvhxoiseldjrbtfognkmanu
qywzphgoiseldjrbcfcgvtmanu
qywophxoiseldjrbtpcgvkmank
qywzphxoiszldjretfcgvkmabu
qywzphxoiseldjhbtfcgvxmawu
qcgzphxoiselejrbtfcgvkmanu
qywzphxoisepdjrbtfcfvkcanu
qivzphxniseldjrbtfcgvkmanu
qywzhhxoiseldjrftxcgvkmanu
qyazphxciseldjrbtfcgskmanu
qywzphxoisoldgrbtfczvkmanu
qywzmhxoiseldurbwfcgvkmanu
qywzphxoistldjrbwfcgvkranu
qywzphxoistedjrbtfcgokmanu
qywzqhxodsecdjrbtfcgvkmanu
qywzphxtisxldjrbtfcgvkhanu
qywzphxoeseldjrtrfcgvkmanu
qdwzphxoioeldjrbtfigvkmanu
qjwzphxoisbldjrbtfcgvkmanz
qywzphxoiseldbrbtfdgvlmanu
qywzphxoiselddrbhvcgvkmanu
zywzppxoiseldjrdtfcgvkmanu
qywzppxqiselkjrbtfcgvkmanu
qywzphxoihelbjrbtfcgvkmabu
qywzphxoiseldjreyfcgvknanu
qywzphxxrseldjrbtfcgvkmagu
qywhpfxoiseldjrbtfdgvkmanu
qywzphxoisxldjrdtfagvkmanu
oywzphxxiseldjrbtfcgvkmaeu
qywzphxoiselqirbtfvgvkmanu
qywzphxoqseldhrbtfcgvkhanu
qywzphxokseldjrbtfxgvkmaju
qywzphtoiseldurbtfcfvkmanu
qywzphxoiheudjrrtfcgvkmanu
qrwzphxzigeldjrbtfcgvkmanu
qywzphxoiseldorbtfcgvxmvnu
qywzphxoisaldjpbqfcgvkmanu
qywuphxoiselljrbtfchvkmanu
qywzphxoisaldjrbefcgvkmsnu
qywzphxoiteldjrbnfcgvkmanp
qywhphxoiselqjrbtfcgvkmagu
qywzjhxoisejdjrbtfcgvkmanr
qywephaoiseldjrbtfcavkmanu
qywcphxoireldjqbtfcgvkmanu
qywzphxoiseldirbuicgvkmanu
qywzphxoisecvnrbtfcgvkmanu
qcwzphxoiseldjrbtfcgvrmaiu
qywnphxoiseldjrntftgvkmanu
qywzphxhisyldjrbtfcgvkmafu
qyhzphxoiseldjrytfcgvkmanq
vjwzbhxoiseldjrbtfcgvkmanu
qyvzpsxoisuldjrbtfcgvkmanu
qywzphxaiseldcrbefcgvkmanu
qywzphxoiseldjgbtfsgvkfanu
oiwzphxoiseldjrbtfcgvkmcnu
qyezphxoiseldjrbtfcqvkmjnu
tywzphxriseldzrbtfcgvkmanu
yywzphxoiseldjbbtfugvkmanu
qywzpfxviseldjrbttcgvkmanu
qywzphxoiceldcrbtfugvkmanu
qymzphxoiseldjratfcsvkmanu
qywzphxoiselxjrbdfcgvkpanu
qywzphxoiselujrbtfkgvimanu
qywzshyoiseldjrbtfcgpkmanu
qywzphxoiselfjrbtfsgvkmant
qywpphxoiseldjxbtfcyvkmanu
qywzfhxoiselqjrptfcgvkmanu
qewzphxoiseldprbtfcgvkmand
qywfphxoiseldlrbtfcgvkmgnu
qywzphxoiseldjhbtqcovkmanu
fywzphxoiseldlrbtfcgvkjanu
sywzphxoiseldjrbhfccvkmanu
qywzphxoiseldjfbtfcrvkmpnu
sywzphxoisrldjrbtfczvkmanu

65
2018/day2/src/main.rs Normal file
View File

@ -0,0 +1,65 @@
extern crate edit_distance;
use std::collections::HashMap;
use std::fs::File;
use std::io::{BufRead, BufReader};
use edit_distance::edit_distance;
fn get_char_counts(input: &String) -> (bool, bool) {
let mut has_two = false;
let mut has_three = false;
let mut map = HashMap::new();
for char in input.chars() {
map.entry(char).and_modify(|x| *x += 1).or_insert(1);
}
for (_char, count) in map {
if has_two && has_three {
break;
}
if count == 2 {
has_two = true;
} else if count == 3 {
has_three = true;
}
}
(has_two, has_three)
}
fn calc_checksum(lines: &Vec<String>) {
let mut two_count = 0;
let mut three_count = 0;
for line in lines.iter() {
let (has_two, has_three) = get_char_counts(line);
if has_two {
two_count += 1;
}
if has_three {
three_count += 1;
}
}
println!("checksum: {}", two_count * three_count);
}
fn find_single_char_difference(lines: &mut Vec<String>) {
let line = lines.pop().expect("ran out of lines to find the single char difference!");
let mut found = false;
for other in lines.iter() {
if edit_distance(&line, other) == 1 {
found = true;
println!("{} and {}", line, other);
break;
}
}
if !found {
find_single_char_difference(lines);
}
}
fn main() {
let mut lines: Vec<String> = BufReader::new(File::open("input").unwrap())
.lines()
.map(|line| line.unwrap())
.collect();
calc_checksum(&lines);
find_single_char_difference(&mut lines);
}