day 19 part1
Dieser Commit ist enthalten in:
Ursprung
fef542ba78
Commit
55b3cd16f7
2 geänderte Dateien mit 58 neuen und 0 gelöschten Zeilen
48
days/2024/19.rs
Normale Datei
48
days/2024/19.rs
Normale Datei
|
@ -0,0 +1,48 @@
|
|||
use advent_of_code::strings::convert_to_array;
|
||||
#[allow(unused_imports)]
|
||||
use advent_of_code_macros::{include_data, include_example};
|
||||
|
||||
include_data!(DATA 2024 19);
|
||||
|
||||
fn test_pattern(pattern: String, parts: Vec<String>) -> bool {
|
||||
|
||||
false
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let (patterndata, designdata) = DATA.split_once("\n\n").unwrap();
|
||||
let mut designs = convert_to_array::<_, _, '\n'>(designdata, str::to_string);
|
||||
let patterns = convert_to_array::<_, _, ','>(patterndata, str::to_string);
|
||||
designs.sort();
|
||||
let mut possible = 0;
|
||||
for design in designs {
|
||||
let mut candidates = vec![design];
|
||||
'designloop :loop {
|
||||
let mut new = Vec::with_capacity(candidates.len());
|
||||
for possibility in candidates {
|
||||
for part in patterns.clone() {
|
||||
if possibility.starts_with(part.as_str()) {
|
||||
if possibility.len() == part.len() {
|
||||
println!("Found design");
|
||||
possible+=1;
|
||||
break 'designloop;
|
||||
}
|
||||
new.push(possibility[part.len()..].to_owned());
|
||||
}
|
||||
}
|
||||
}
|
||||
new.sort();
|
||||
new.dedup();
|
||||
candidates = new;
|
||||
if candidates.len() == 0 {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
println!("There are {} possible designs", possible);
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod test {
|
||||
use super::*;
|
||||
}
|
10
examples/2024/19.txt
Normale Datei
10
examples/2024/19.txt
Normale Datei
|
@ -0,0 +1,10 @@
|
|||
r, wr, b, g, bwu, rb, gb, br
|
||||
|
||||
brwrr
|
||||
bggr
|
||||
gbbr
|
||||
rrbgbr
|
||||
ubwu
|
||||
bwurrg
|
||||
brgr
|
||||
bbrgwb
|
Laden …
Tabelle hinzufügen
In neuem Issue referenzieren