Skip to content

Commit

Permalink
Day19 use hashmap rather than vec to hold rules to be compatible with…
Browse files Browse the repository at this point in the history
… reduced ruleset in test
  • Loading branch information
megrogan committed Dec 20, 2020
1 parent 4eca703 commit b138b18
Showing 1 changed file with 65 additions and 10 deletions.
75 changes: 65 additions & 10 deletions src/day19.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@

use std::collections::HashMap;
use crate::day19::Rule::*;
use std::fs;

Expand Down Expand Up @@ -58,7 +59,7 @@ enum Rule {

#[derive(Debug)]
struct RuleSet {
rules: Vec<Rule>
rules: HashMap<usize, Rule>
}

impl RuleSet {
Expand Down Expand Up @@ -102,20 +103,16 @@ impl RuleSet {
.collect()
}

let mut rules: Vec<(usize, Rule)> = input
RuleSet {
rules: input
.lines()
.filter_map(parse_line)
.collect();

rules.sort_unstable_by_key(|p| p.0);

RuleSet {
rules: rules.into_iter().map(|p| p.1).collect()
.collect()
}
}

fn is_match(&self, message: &str) -> bool {
let result = self.solve(&self.rules[0], message, 0);
let result = self.solve(&self.rules.get(&0_usize).unwrap(), message, 0);
result.is_some() && result.unwrap().len() == 0
}

Expand Down Expand Up @@ -143,7 +140,7 @@ impl RuleSet {
Seq(v) => {
let mut m = message;
for i in v {
let r = &self.rules[*i];
let r = &self.rules.get(i).unwrap();
m = self.solve(r, m, depth + 1)?;
}
Some(m)
Expand Down Expand Up @@ -237,4 +234,62 @@ aabbbbbaabbbaaaaaabbbbbababaaaaabbaaabba
let result = count_matches(&rule_set, &messages);
assert_eq!(3, result);
}


#[test]
fn test_rules_3() {
let input = r#"
42: 9 14 | 10 1
9: 14 27 | 1 26
10: 23 14 | 28 1
1: "a"
11: 42 31 | 42 11 31
5: 1 14 | 15 1
19: 14 1 | 14 14
12: 24 14 | 19 1
16: 15 1 | 14 14
31: 14 17 | 1 13
6: 14 14 | 1 14
2: 1 24 | 14 4
0: 8 11
13: 14 3 | 1 12
15: 1 | 14
17: 14 2 | 1 7
23: 25 1 | 22 14
28: 16 1
4: 1 1
20: 14 14 | 1 15
3: 5 14 | 16 1
27: 1 6 | 14 18
14: "b"
21: 14 1 | 1 14
25: 1 1 | 1 14
22: 14 14
8: 42 | 42 8
26: 14 22 | 1 20
18: 15 15
7: 14 5 | 1 21
24: 14 1
abbbbbabbbaaaababbaabbbbabababbbabbbbbbabaaaa
bbabbbbaabaabba
babbbbaabbbbbabbbbbbaabaaabaaa
aaabbbbbbaaaabaababaabababbabaaabbababababaaa
bbbbbbbaaaabbbbaaabbabaaa
bbbababbbbaaaaaaaabbababaaababaabab
ababaaaaaabaaab
ababaaaaabbbaba
baabbaaaabbaaaababbaababb
abbbbabbbbaaaababbbbbbaaaababb
aaaaabbaabaaaaababaa
aaaabbaaaabbaaa
aaaabbaabbaaaaaaabbbabbbaaabbaabaaa
babaaabbbaaabaababbaabababaaab
aabbbbbaabbbaaaaaabbbbbababaaaaabbaaabba
"#;

let (rule_set, messages) = parse(&input);
let result = count_matches(&rule_set, &messages);
assert_eq!(12, result);
}
}

0 comments on commit b138b18

Please sign in to comment.