-µIt September 2008 ist vorbei-
Es werden keine Skripte mehr angenommen
Die Aufgabe für September 2008:
Entwickle eine BigInt Bibliothek.
Aufgabe und Hintergrund:
Es soll eine einfache "BigInt"-Bibliothek umgesetzt werden. Das heißt eine Funktionssammlung, die beliebig große Zahlen verarbeiten kann und zumindest die Grundrechenarten unterstützt. Dafür ist eine eigene Bibliothek nötig, weil AutoIt (wie fast alle Programmiersprachen) normale Zahlen in ihrem Wertebereich begrenzt. Von Zeit zu Zeit will man diese Schranken aber überschreiten und dann braucht es neue Werkzeuge.
Funktionen:
Die zu entwerfende Bibliothek soll folgende Funktionen bieten:
$b = _BigInt_Load($a) ; Ganze Zahl aus der Dezimaldarstellung in einem String in die interne Darstellung laden
$a = _BigInt_Print($b) ; Ganze Zahl aus der internen Darstellung in einem String mit der Dezimaldarstellung ausgeben (keine wissenschaftliche Darstellung!). Es ist darauf zu achten, dass führende Nullen entfernt werden und dass insbesondere die Zahl Null exakt als "0" dargestellt wird.
$d = _BigInt_Add($b, $c) ; addiert $b und $c und liefert das Ergebnis als $d zurück
$d = _BigInt_Mul($b, $c) ; multipliziert $b und $c und liefert das Ergebnis als $d zurück
$a ist hierbei jeweils ein String mit einer ganzen Zahl in Dezimaldarstellung, $b, $c und $d Zahlen in der internen Darstellung.
Voraussetzungen:
Dabei ist euch freigestellt, welche Datentypen ihr zur Speicherung verwendet, es müssen aber mindestens Zahlen mit einer Dezimallänge von 200 Stellen hineinpassen. Der Rückgabetyp der Funktionen muss so gestaltet sein, dass er sich direkt wieder als Parameter für die nächste Berechnung verwenden lässt. Negative Zahlen müssen nicht unterstützt werden.
Bewertung:
Bewertet werden alle vier Funktionen zusammen einmal nach der Länge und einmal nach der Geschwindigkeit (gemittelte Ausführungszeit von 20 Tests).
Testdaten:
Siehe Anhang. Einfach die myBigInt.au3 austauschen und die benchmark.au3 starten :).
Hinweis:
Die "Schulmethoden" sind für beide Funktionen mögliche Lösungen, aber nicht unbedingt die schnellsten. Auch die gewählte Datenstruktur dürfte großen Einfluss auf die Geschwindigkeit haben.
Abgabetermin:
Samstag, 27. September 2008, 20.00 Uhr
Es ist erlaubt zwei Versionen abzugeben, eine für den Größenwettbewerb, eine für die Geschwindigkeitsmessung.
WICHTIG!!!:
Regeln für den µit Wettbewerb
Ausgeschlossen ist jede Umsetzung, die sich einer anderen Programmiersprache bedient (z.B DLL Calls), es soll wirklich eine Umsetzung mit den Mitteln von AutoIt sein.
Wenn ihr das Programm fertig habt, bitte als rar Archiv mit PW geschützt posten und dann eine PN mit dem PW an mich, damit ich schonmal anfangen kann die Programme zu studieren. Das Programm kann bis zum Abgabetermin, auch wenn es schonmal veröffentlicht wurde immer wieder verändert werden. Dies sollte aber im Post (z.B durch Versions Nummer) erkennbar sein - das PW bleibt dabei bitte gleich, damit ich dann nich wieder zig PNs bekomme
Für Fragen zur Aufgabe oder dem Wettbewerb an sich, einfach hier posten oder eine PN an mich.
Viel Spaß und Erfolg beim Lösen der Aufgabe.
peethebee + Walle
Edit 29.08.2008 14:32: Neue Testsuite, die einen weiteren Sonderfall beim Addieren abprüft und die 0-Tests korrekt mit Load und Print anspricht (und auch andere Zahlen, weil das Generieren so Spaß macht :D). Bitte updaten, die Dateien add_test.au3 und mul_test.au3 haben sich geändert.
Edit 29.08.2008 14:59: Es ist erlaubt zwei Versionen abzugeben, eine für den Größenwettbewerb, eine für die Geschwindigkeitsmessung.
Edit 29.08.2008 15:58: Das Benchmark-Skript unterstützt jetzt getrennte Skripte für Speed und Size.