Dies ist eine alte Version des Dokuments!
Day 3: Mull It Over
Der Tag 3 ist eigentlich insgesamt nicht schwer, allerdings sollte man sich dazu am besten bereits mit regulären Ausdrücken (Regex = regular expressions) auskennen. Durch diese Einschränkung kann man die Aufgabe zur mittleren Schwierigkeit zählen.
Reguläre Ausdrücke (Regex)
Im Wiki ist eine gute Einführung vorhanden. In Kurzform beschrieben benötigt man Regex im Alltag für Pattern Matching, also zur Mustererkennung. Häufig (auch in dieser Aufgabe), muss man innerhalb eines großen Textstückes einzelne Bestandteile suchen, die auf eine vorgegebene Art und Weise formatiert sind.
Nun bietet zwar Java Befehle wie contains()
, mit der ich überprüfen kann, ob ein ganz bestimmter String in einem anderen String enthalten ist, aber das genügt für diese Aufgabe hier schon nicht mehr, da z. B. nicht nur mul(3,4)
, sondern auch mul(122,283)
und zahlreiche andere Zahlenkombinationen erkannt werden müssen.
Kurzum, der hier benötigte reguläre Ausdruck für Java lautet, in nicht-formatierter (= besser lesbarer) Form:
Regex zur Erkennung der "Operatoren"
Diese Regex erlaubt es, alle String-Stücke im durchsuchten Text zu finden, die der beschriebenen Form genügen. Je nachdem, welchen Java-Befehl man nutzt, kann man sich den genauen String im durchsuchten Text anzeigen lassen, jedes Vorkommnis durch einen anderen String ersetzen, die Häufigkeit dieses Strings zählen, usw. Mit einer Regex kann man also Ausschnitte in einem längeren String finden, die bestimmten Regeln folgen.
Teil 1
Mit dieser Vorrede wage ich es, direkt die Lösung zu zeigen, da es zäh ist, die einzelnen speziellen Java-Befehle aufzuschlüsseln.