Terwijl je de lijst met berichten aan het bekijken bent, besef je plots dat de regels niet helemaal kloppen. Om dit euvel op te lossen vervang je regels 8: 42
en 11: 42 31
door de volgende regels:
8: 42 | 42 8
11: 42 31 | 42 11 31
Deze kleine wijziging heeft een grote impact: nu zitten er wel lussen in de regels en matchen ze theoretisch gezien een lijst met berichten die oneindig lang is. Je moet bepalen hoe deze wijzigingen een invloed hebben op de berichten die geldig zijn.
Gelukkig blijven de meeste regels ongewijzigd door de aanpassing die je gedaan hebt. Het kan helpen om te beginnen met kijken naar welke regels altijd matchen met dezelfde berichten en hoe die regels (vooral regels 42
en 31
) gebruikt worden door de nieuwe versies van regels 8
en 11
.
(Denk eraan: je moet enkel de regels gebruiken die je gekregen hebt. Een oplossing uitwerken die elke mogelijke combinatie van regels aankan, zou aanzienlijk moeilijker1 zijn.)
Bijvoorbeeld:
42: 9 14 | 10 1
9: 14 27 | 1 26
10: 23 14 | 28 1
1: "a"
11: 42 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
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
Zonder de regels 8
en 11
aan te passen, matchen er slechts drie berichten met deze regels: bbabbbbaabaabba
, ababaaaaaabaaab
, and ababaaaaabbbaba
.
Na aanpassing van regels 8
en 11
matchen er in totaal echter 12
berichten:
bbabbbbaabaabba
babbbbaabbbbbabbbbbbaabaaabaaa
aaabbbbbbaaaabaababaabababbabaaabbababababaaa
bbbbbbbaaaabbbbaaabbabaaa
bbbababbbbaaaaaaaabbababaaababaabab
ababaaaaaabaaab
ababaaaaabbbaba
baabbaaaabbaaaababbaababb
abbbbabbbbaaaababbbbbbaaaababb
aaaaabbaabaaaaababaa
aaaabbaabbaaaaaaabbbabbbaaabbaabaaa
aabbbbbaabbbaaaaaabbbbbababaaaaabbaaabba
Hoeveel berichten matchen er volledig met regel 0
na aanpassing van regels 8
en 11
? Hiervoor ga je als volgt te werk:
match
waaraan twee argumenten moeten doorgegeven worden: i) een bericht (String
) en ii) de padnaam (String
) van een tekstbestand met de regels waaraan geldige berichten moeten voldoen. De functie moet een Booleaanse waarde (Boolean
) teruggeven die aangeeft of het bericht volledig matcht met regel 0
na aanpassing van regels 8
en 11
.matches
waaraan twee argumenten moeten doorgegeven worden: i) de padnaam (String
) van een tekstbestand met een lijst van de ontvangen berichten die tot nu toe verzameld werden en ii) de padnaam (String
) van een tekstbestand met de regels waaraan geldige berichten moeten voldoen. De functie moet teruggeven hoeveel (Int
) berichten er volledig matchen met regel 0
na aanpassing van regels 8
en 11
.In deze interactieve sessie gaan we ervan uit dat de tekstbestanden messages.txt
2 en rules.txt
3 zich in de huidige directory bevinden.
> match("bbabbbbaabaabba", "rules.txt")
true
> match("babbbbaabbbbbabbbbbbaabaaabaaa", "rules.txt")
true
> match("aaabbbbbbaaaabaababaabababbabaaabbababababaaa
", "rules.txt")
true
> match("abbbbbabbbaaaababbaabbbbabababbbabbbbbbabaaaa", "rules.txt")
false
> match("aaaabbaaaabbaaa", "rules.txt")
false
> match("babaaabbbaaabaababbaabababaaab", "rules.txt")
false
> matches("messages.txt", "rules.txt")
12