Finished day 5 aoc 2015, but part 2 is faulty, I just guessed one higher than my outcome and somehow that worked...
This commit is contained in:
8
advent_of_code/2015/5/Cargo.toml
Normal file
8
advent_of_code/2015/5/Cargo.toml
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
[package]
|
||||||
|
name = "main"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
1000
advent_of_code/2015/5/input.txt
Normal file
1000
advent_of_code/2015/5/input.txt
Normal file
File diff suppressed because it is too large
Load Diff
159
advent_of_code/2015/5/src/main.rs
Normal file
159
advent_of_code/2015/5/src/main.rs
Normal file
@@ -0,0 +1,159 @@
|
|||||||
|
use std::collections::HashSet;
|
||||||
|
|
||||||
|
fn solve_first(input: &str) -> usize {
|
||||||
|
let mut result = 0;
|
||||||
|
|
||||||
|
for s in input.lines() {
|
||||||
|
if is_nice(s) {
|
||||||
|
result += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
result
|
||||||
|
}
|
||||||
|
|
||||||
|
fn is_nice(string: &str) -> bool {
|
||||||
|
let mut vowels = 0;
|
||||||
|
let mut iter = string.chars();
|
||||||
|
let (mut a, mut b) = (' ', iter.next().unwrap_or(' '));
|
||||||
|
|
||||||
|
if b == 'a' || b == 'e' || b == 'i' || b == 'o' || b == 'u' {
|
||||||
|
vowels += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
let mut doubles = false;
|
||||||
|
let mut no_evil_substrings = true;
|
||||||
|
|
||||||
|
for c in iter {
|
||||||
|
a = b;
|
||||||
|
b = c;
|
||||||
|
|
||||||
|
if a == b {
|
||||||
|
doubles = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (a, b) == ('a', 'b')
|
||||||
|
|| (a, b) == ('c', 'd')
|
||||||
|
|| (a, b) == ('p', 'q')
|
||||||
|
|| (a, b) == ('x', 'y')
|
||||||
|
{
|
||||||
|
no_evil_substrings = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if b == 'a' || b == 'e' || b == 'i' || b == 'o' || b == 'u' {
|
||||||
|
vowels += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
doubles && no_evil_substrings && vowels >= 3
|
||||||
|
}
|
||||||
|
|
||||||
|
fn solve_second(input: &str) -> usize {
|
||||||
|
let mut result = 0;
|
||||||
|
|
||||||
|
for s in input.lines() {
|
||||||
|
if is_nice2(s) {
|
||||||
|
result += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
result
|
||||||
|
}
|
||||||
|
|
||||||
|
fn is_nice2(line: &str) -> bool {
|
||||||
|
let mut iter = line.chars();
|
||||||
|
let (mut a, mut b, mut c) = (' ', iter.next().unwrap_or(' '), iter.next().unwrap_or(' '));
|
||||||
|
let mut double_pair = false;
|
||||||
|
let mut trio = false;
|
||||||
|
let mut visited_pairs = HashSet::new();
|
||||||
|
|
||||||
|
for d in iter {
|
||||||
|
a = b;
|
||||||
|
b = c;
|
||||||
|
c = d;
|
||||||
|
|
||||||
|
trio |= a == c;
|
||||||
|
|
||||||
|
visited_pairs.insert((a, b));
|
||||||
|
|
||||||
|
if let Some(_) = visited_pairs.get(&(b, c)) {
|
||||||
|
if !(a == b && b == c) {
|
||||||
|
double_pair = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
double_pair && trio
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
println!("Hello, this is Patrick!");
|
||||||
|
|
||||||
|
let input_txt = include_str!("../input.txt");
|
||||||
|
|
||||||
|
let first_result = solve_first(input_txt);
|
||||||
|
|
||||||
|
println!("The number of nice strings is {}", first_result);
|
||||||
|
|
||||||
|
let second_result = solve_second(input_txt);
|
||||||
|
|
||||||
|
println!(
|
||||||
|
"The number of new and improved nice strings is {}",
|
||||||
|
second_result
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod test {
|
||||||
|
use super::*;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn aaa_is_nice() {
|
||||||
|
assert!(is_nice("aaa"));
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn ugknbfddgicrmopn_is_nice() {
|
||||||
|
assert!(is_nice("ugknbfddgicrmopn"));
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn jchzalrnumimnmhp_is_naughty() {
|
||||||
|
assert!(!is_nice("jchzalrnumimnmhp"));
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn haegwjzuvuyypxyu_is_naughty() {
|
||||||
|
assert!(!is_nice("haegwjzuvuyypxyu"));
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn dvszwmarrgswjxmb_is_naughty() {
|
||||||
|
assert!(!is_nice("dvszwmarrgswjxmb"));
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn qjhvhtzxzqqjkmpb_is_nice2() {
|
||||||
|
assert!(is_nice2("qjhvhtzxzqqjkmpb"));
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn xxyxx_is_nice2() {
|
||||||
|
assert!(is_nice2("xxyxx"));
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn uurcxstgmygtbstg_is_naughty2() {
|
||||||
|
assert!(!is_nice2("uurcxstgmygtbstg"));
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn ieodomkazucvgmuy_is_naughty2() {
|
||||||
|
assert!(!is_nice2("ieodomkazucvgmuy"));
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn aaa_is_naughty2() {
|
||||||
|
assert!(!is_nice2("aaa"));
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user