From 3926d8d0c77906477e839614e4500f981b2854a3 Mon Sep 17 00:00:00 2001 From: schoeffelbe82781 Date: Wed, 2 Apr 2025 11:19:17 +0200 Subject: [PATCH] fixed one-off error and improved call-logic --- schoeffelbe/pr01.py | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/schoeffelbe/pr01.py b/schoeffelbe/pr01.py index b590dbb..340afa6 100644 --- a/schoeffelbe/pr01.py +++ b/schoeffelbe/pr01.py @@ -53,8 +53,9 @@ def _max_sequence_3_sub(z: MemoryArray, l: Literal, m: Literal, r: Literal): # find max-sum from Middle to right rechtsMax = MemoryCell(MIN_VALUE) sum.set(0); + # MRange is exclusive startRight = MemoryCell(1) + m - for i in mrange(startRight, r): + for i in mrange(startRight, MemoryCell(1) + r): sum += z[i] if sum > rechtsMax: rechtsMax.set(sum) @@ -63,6 +64,7 @@ def _max_sequence_3_sub(z: MemoryArray, l: Literal, m: Literal, r: Literal): def _max_sequence_3(z: MemoryArray, l: Literal, r: Literal): # Calc-Vars -> illegal to use Literal(0) here? Probably + # CAN ALLLL BE LITERALS linksMax = MemoryCell() linksL = MemoryCell() linksR = MemoryCell() @@ -79,7 +81,8 @@ def _max_sequence_3(z: MemoryArray, l: Literal, r: Literal): return (z[l], l, r) # calc middle m.set(MemoryCell(l) + r) - m /= Literal(2); + # Use cutoff/floor here, did not check + m //= Literal(2); # get maxLeft, then maxRight and then cross them (rec) (linksMax, linksL, linksR) = _max_sequence_3(z, l, m) startRight = MemoryCell(1) + m @@ -152,9 +155,11 @@ def analyze_complexity(max_sequence_func, sizes): if __name__ == '__main__': - fn = max_sequence_4 - example(fn) - for filename in ["data/seq0.txt", "data/seq1.txt", "data/seq2.txt"]: - print(filename) - seq(filename, fn) - analyze_complexity(fn, [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]) + # fn = max_sequence_4 + for fn in [max_sequence_1, max_sequence_2, max_sequence_3, max_sequence_4]: + example(fn) + # for filename in ["data/seq0.txt", "data/seq1.txt", "data/seq2.txt", "data/seq3.txt"]: + for filename in ["data/seq0.txt", "data/seq1.txt"]: + print(filename) + seq(filename, fn) + analyze_complexity(fn, [10, 20, 30, 40, 50, 60, 70, 80, 90, 100])