parent
a903132905
commit
b563dcbb18
@ -0,0 +1,59 @@
|
||||
use aoc::input;
|
||||
|
||||
fn main() {
|
||||
let lines = input::read_lines();
|
||||
|
||||
// Part 1
|
||||
let mut goods = 0;
|
||||
let bad_pairs = vec!("ab", "cd", "pq", "xy");
|
||||
for line in &lines {
|
||||
let mut has_bad_pair = false;
|
||||
for p in &bad_pairs {
|
||||
if line.contains(p) { has_bad_pair = true; break }
|
||||
}
|
||||
if has_bad_pair { continue }
|
||||
let mut num_vowels = 0;
|
||||
let mut cc = ' ';
|
||||
let mut has_doubled = false;
|
||||
for c in line.chars() {
|
||||
if "aeiou".contains(c) { num_vowels += 1 }
|
||||
if c == cc { has_doubled = true }
|
||||
cc = c;
|
||||
}
|
||||
if num_vowels < 3 { continue }
|
||||
if !has_doubled { continue }
|
||||
goods += 1;
|
||||
}
|
||||
println!("Good strings: {}", goods);
|
||||
|
||||
// Part 2
|
||||
goods = 0;
|
||||
for line in &lines {
|
||||
let mut cond1 = false;
|
||||
let chars: Vec<char> = line.chars().collect();
|
||||
for i in 0..(chars.len() - 2) {
|
||||
let c1 = chars[i];
|
||||
let c2 = chars[i + 1];
|
||||
for j in (i + 2)..(chars.len() - 1) {
|
||||
if chars[j] == c1 && chars[j + 1] == c2 {
|
||||
cond1 = true;
|
||||
break
|
||||
}
|
||||
}
|
||||
if cond1 { break }
|
||||
}
|
||||
if !cond1 { continue }
|
||||
|
||||
let mut cond2 = false;
|
||||
let mut cm2 = ' ';
|
||||
let mut cm1 = ' ';
|
||||
for c in line.chars() {
|
||||
if c == cm2 { cond2 = true }
|
||||
cm2 = cm1;
|
||||
cm1 = c;
|
||||
}
|
||||
if !cond2 { continue }
|
||||
goods += 1;
|
||||
}
|
||||
println!("Best strings: {}", goods);
|
||||
}
|
Loading…
Reference in new issue