mirror of
https://github.com/wezm/advent-of-code.git
synced 2024-12-18 18:29:55 +00:00
Add day 4 part 2 solution
This commit is contained in:
parent
4f191a94c7
commit
9abb60642c
1 changed files with 50 additions and 1 deletions
|
@ -11,7 +11,17 @@ fn main() {
|
||||||
.filter(|valid| *valid == true)
|
.filter(|valid| *valid == true)
|
||||||
.count();
|
.count();
|
||||||
|
|
||||||
println!("{}", valid);
|
println!("Part 1: {}", valid);
|
||||||
|
|
||||||
|
let file = File::open("input").expect("unable to open input file");
|
||||||
|
let reader = BufReader::new(file);
|
||||||
|
|
||||||
|
let valid = reader.lines()
|
||||||
|
.map(|line| passphrase_is_valid_part2(&line.unwrap()))
|
||||||
|
.filter(|valid| *valid == true)
|
||||||
|
.count();
|
||||||
|
|
||||||
|
println!("Part 2: {}", valid);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn passphrase_is_valid(passphrase: &str) -> bool {
|
fn passphrase_is_valid(passphrase: &str) -> bool {
|
||||||
|
@ -19,6 +29,15 @@ fn passphrase_is_valid(passphrase: &str) -> bool {
|
||||||
!passphrase.split_whitespace().any(|word| seen.insert(word) == false)
|
!passphrase.split_whitespace().any(|word| seen.insert(word) == false)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn passphrase_is_valid_part2(passphrase: &str) -> bool {
|
||||||
|
let mut seen = HashSet::new();
|
||||||
|
!passphrase.split_whitespace().any(|word| {
|
||||||
|
let mut sorted_chars = word.chars().collect::<Vec<_>>();
|
||||||
|
sorted_chars.sort();
|
||||||
|
seen.insert(sorted_chars) == false
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
// aa bb cc dd ee is valid.
|
// aa bb cc dd ee is valid.
|
||||||
#[test]
|
#[test]
|
||||||
fn test_example1() {
|
fn test_example1() {
|
||||||
|
@ -36,3 +55,33 @@ fn test_example2() {
|
||||||
fn test_example3() {
|
fn test_example3() {
|
||||||
assert_eq!(passphrase_is_valid("aa bb cc dd aaa"), true)
|
assert_eq!(passphrase_is_valid("aa bb cc dd aaa"), true)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// abcde fghij is a valid passphrase.
|
||||||
|
#[test]
|
||||||
|
fn test_example1_part2() {
|
||||||
|
assert_eq!(passphrase_is_valid_part2("abcde fghij "), true)
|
||||||
|
}
|
||||||
|
|
||||||
|
// abcde xyz ecdab is not valid - the letters from the third word can be rearranged to form the first word.
|
||||||
|
#[test]
|
||||||
|
fn test_example2_part2() {
|
||||||
|
assert_eq!(passphrase_is_valid_part2("abcde xyz ecdab"), false)
|
||||||
|
}
|
||||||
|
|
||||||
|
// a ab abc abd abf abj is a valid passphrase, because all letters need to be used when forming another word.
|
||||||
|
#[test]
|
||||||
|
fn test_example3_part2() {
|
||||||
|
assert_eq!(passphrase_is_valid_part2("a ab abc abd abf abj"), true)
|
||||||
|
}
|
||||||
|
|
||||||
|
// iiii oiii ooii oooi oooo is valid.
|
||||||
|
#[test]
|
||||||
|
fn test_example4_part2() {
|
||||||
|
assert_eq!(passphrase_is_valid_part2("iiii oiii ooii oooi oooo"), true)
|
||||||
|
}
|
||||||
|
|
||||||
|
// oiii ioii iioi iiio is not valid - any of these words can be rearranged to form any other word.
|
||||||
|
#[test]
|
||||||
|
fn test_example5_part2() {
|
||||||
|
assert_eq!(passphrase_is_valid_part2("oiii ioii iioi iiio"), false)
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue