diff options
| author | nekineki <nekineki@nekineki.net> | 2024-12-24 11:15:39 +0100 |
|---|---|---|
| committer | nekineki <nekineki@nekineki.net> | 2024-12-24 11:15:39 +0100 |
| commit | f0da254e599ce80a05a476ce8429223e69202843 (patch) | |
| tree | b76a502971d0f3c9ef2d64bf915e94207ceaaca0 /2024/day19.rs | |
| parent | 4c8c5406d4d4e0e637e642f7770e011510e09e47 (diff) | |
day19 part1
Diffstat (limited to '2024/day19.rs')
| -rw-r--r-- | 2024/day19.rs | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/2024/day19.rs b/2024/day19.rs new file mode 100644 index 0000000..5060dff --- /dev/null +++ b/2024/day19.rs @@ -0,0 +1,90 @@ +#![allow(dead_code)] +#![allow(unused_variables)] +#![allow(unused_mut)] +use std::collections::HashSet; +use std::env; +use std::fs::File; +use std::io::Read; + +fn dfs(design: &str, tokens: &Vec<&str>) -> i64 { + if design.len() == 0 { + return 1; + } + + for t in tokens { + if design.starts_with(t) { + let ret = dfs(&design[t.len()..], tokens); + if ret == 1 { + return 1; + } + } + } + return 0; +} + +//fn bfs(design: &str, tokens: &Vec<&str>) -> i64 { +// let mut hs_new: HashSet<(i64, &str)> = HashSet::new(); +// hs_new.insert((1,design)); +// +// let mut ret = 0; +// loop { +// let mut hs = hs_new.clone(); +// hs_new.clear(); +// +// for (n,d) in hs.clone() { +// for t in tokens { +// if &d == t { +// ret += 1; +// } else if d.starts_with(t) { +// hs_new.insert((n+1,&d[t.len()..])); +// } +// } +// } +// +// println!("{:?}", hs); +// if hs_new.len() == 0 { +// return ret; +// } +// } +//} + +fn main() { + let args: Vec<String> = env::args().collect(); + let filename = if args.len() == 1 { + "in/".to_owned() + args[0].split('/').last().unwrap() + ".pzl" + } else { + args[1].clone() + }; + let mut f = File::open(filename).expect("cannot open file"); + let mut content = String::new(); + f.read_to_string(&mut content).expect("cannot read file"); + let (para1, para2) = content.trim_end().split_once("\n\n").unwrap(); + + let mut tokens: Vec<&str> = Vec::new(); + for s in para1.split(", ") { + tokens.push(s); + } + + let mut designs: Vec<&str> = Vec::new(); + for s in para2.split("\n") { + designs.push(s); + } + //println!("{:?}", tokens); + //println!("{:?}", designs); + + let mut res1 = 0; + let mut res2 = 0; + for d in designs { + res1 += dfs(d, &tokens); + //println!("{}", d); + //let ret = bfs(d, &tokens); + //res2 += ret; + //println!("{}", ret); + } + + + println!("res1: {}", res1); + println!("res2: {}", res2); + //assert_eq!(res1, 240); + //assert_eq!(res2, ); +} |
