Beiträge Hectoc - Matherätsel für zwischendurch
Post
Cancel

Hectoc - Matherätsel für zwischendurch

Ich habe über meine Freundin Hectocs kennengelernt. Nach kurzer Einarbeitung machen mir die mathematischen Rätsel viel Spaß. Allerdings habe ich keine konstante Quelle für neue Hectocs gefunden. Daher habe ich einen Hectoc Generator geschrieben.

Hectoc

Die Regeln für ein Hectoc sind eigentlich schnell erklärt.

  • Du bekommst 6 Ziffern von 1-9
  • Du musst diese Ziffern so kombinieren, dass du auf die Gesamtzahl 100 kommst
  • Dabei dürfen die Rechenoperationen Addition, Subtraktion, Multiplikation, Division und Potenz verwendet werden
  • Außerdem sind Klammern erlaubt
  • Und man darf nebeneinanderstehende Ziffern zu einer größeren Zahl zusammenfassen. Z.B. 1 1 zu 11
  • Aber die Reihenfolge der Ziffern darf nicht geändert werden und es müssen alle Ziffern benutzt werden

Beispiel: 991347 kann mit 99+1-(3+4-7) gelöst werden.

Es gibt auch einige unlösbare Hectocs, bei denen keine mögliche Kombination der sechs Ziffern gefunden wurde.

Generator

Um an frische, lösbare Hectocs zu kommen habe ich einen Generator online gestellt: https://hectoc.seism0saurus.de

Neben einer kleinen Einführung auf Englisch gibt es ein Hectoc und ein Eingabefeld zum lösen. Nach dem Absenden der Lösung versucht der Server die Lösung als korrekte mathematische Formel zu interpretieren und zu berechnen. Das klappt meistens. Danach sagt er dir, ob deine Lösung richtig ist.

Falls dir ein Fehler auffällt, gib mir einfach Bescheid.

Algorithmus

Das Interpretieren des Textfeldes als mathematische Formel ist gar nicht so trivial gewesen. Zunächst zerlege ich den String in Tokens, d.h. zusammengehörende Zahlen mit Vorzeichen und Operatoren werden getrennt.

Anschließend wandle ich die übliche Infixnotation, bei der die Operatoren zwischen den Operanden stehen, mit dem Shunting-yard-Algorithmus in die umgekehrte polnische Notation um.

Im letzten Schritt berechne ich mit einem Stack die Formel in umgekehrter polnischer Notation und prüfe, ob sie 100 ergibt.

Quellcode

Den Quellcode für Backend und Frontend habe ich im gemeinsamen Projekt hectoc hochgeladen. Mittels mvn clean compile lässt sich eine jar bauen. Dieses enthält eine Spring Boot Anwendung, die auch das Angularfrontend ausliefert.

Der Code ist nur schnell zusammengeschrieben und noch etwas unsauber. Immerhin habe ich ein paar Testfälle für die Validierung des Algorithmus mit eingecheckt.

Bis bald,

seism0saurus

Dieser Blogbeitrag wurde vom Autor unter der CC BY 4.0 lizenziert.