Schöner ist, wenn man das Programm direkt auf der Kommandozeile aufrufen
kann, damit man als unwissender nicht erst rätseln muss, wie man es
ausführt.
Für das Programm ist das Paket numbers installiert. Da dieses mindestens
bei Debian nicht über das Paketsystem verfügbar ist, soll die kleine
Anleitung helfen, wie man es installiert.
Beim Kompilieren mit clang -Weverything hat sich gezeigt, dass der
Compiler eigentlich gern eine Deklaration der Funktionen zuvor hätte. Um
dem Compiler zu sagen, dass diese Funktionen nur innerhalb dieser
Compilie-Unit benötigt werden und daher keine Deklaration zuvor notwendig
ist, müssen die Funktionen mit static versehen werden.
Bei der Übertragung in Rust habe ich gemerkt, dass man den Code noch etwas
schöner aufteilen kann, damit er etwas verständlicher und übersichtlicher
wird.
Ich habe die Aufgabe auf drei verschiedene Weisen implementiert. Den
einfachen, naiven Ansatz mit verschachtelten Schleifen, der auch von allen
drei Implementierungen der schnellste und speichersparendste ist.
Die Variante *func* ist an funktionale Programmierung angelehnt, wobei
alle Zwischenergebnisse in Arrays gespeichert werden, was das Programm
sehr speicherhungrig macht.
In neueren Versionen von Javascript gibt es Iteratoren, mit denen man
theoretisch die funktionale Lösung effizienter bauen kann, da die
Zwischenergebnisse nicht gespeichert werden. Allerdings hat ein Iterator
keinen Prototypen, den man schön um die Methoden erweitern könnte, so dass
der Code angenehm lesbar wäre wie in der Variante *func*.