forked from hofmannol/AlgoDatSoSe25
Added mrange
This commit is contained in:
parent
ecb417eba2
commit
a06bd5861d
1
.idea/AlgoDatSoSe25.iml
generated
1
.idea/AlgoDatSoSe25.iml
generated
@ -3,6 +3,7 @@
|
||||
<component name="NewModuleRootManager">
|
||||
<content url="file://$MODULE_DIR$">
|
||||
<excludeFolder url="file://$MODULE_DIR$/.venv" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/venv" />
|
||||
</content>
|
||||
<orderEntry type="jdk" jdkName="Python 3.12 (AlgoDatSoSe25)" jdkType="Python SDK" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
|
@ -1,20 +1,20 @@
|
||||
from utils.memory_array import MemoryArray
|
||||
from utils.literal import Literal
|
||||
from utils.memory_cell import MemoryCell
|
||||
from utils.constants import MIN_VALUE
|
||||
from utils.memory_manager import MemoryManager
|
||||
from utils.memory_range import mrange
|
||||
|
||||
def max_sequence_1(z: MemoryArray):
|
||||
n = len(z)
|
||||
n = z.length()
|
||||
m = MemoryCell(MIN_VALUE)
|
||||
s = MemoryCell()
|
||||
l = MemoryCell()
|
||||
r = MemoryCell()
|
||||
for i in range(n):
|
||||
for j in range(i, n):
|
||||
for i in mrange(n):
|
||||
for j in mrange(i, n):
|
||||
s.set(0)
|
||||
for k in range(i, j):
|
||||
s += z[Literal(k)]
|
||||
for k in mrange(i, j):
|
||||
s += z[k]
|
||||
if s > m:
|
||||
m.set(s)
|
||||
l.set(i)
|
||||
@ -22,11 +22,9 @@ def max_sequence_1(z: MemoryArray):
|
||||
return m, l, r
|
||||
|
||||
|
||||
def example(max_sequende_func):
|
||||
z = MemoryArray(Literal(10))
|
||||
for i, v in enumerate([-59, 52, 46, 14, -50, 58, -87, -77, 34, 15]):
|
||||
z[Literal(i)] = Literal(v)
|
||||
m, l, r = max_sequende_func(z)
|
||||
def example(max_sequence_func):
|
||||
z = MemoryArray([-59, 52, 46, 14, -50, 58, -87, -77, 34, 15])
|
||||
m, l, r = max_sequence_func(z)
|
||||
print(m, l, r)
|
||||
|
||||
|
||||
|
@ -6,7 +6,16 @@ from random import randint
|
||||
|
||||
class MemoryArray:
|
||||
|
||||
def __init__(self, size):
|
||||
def __init__(self, parm):
|
||||
if isinstance(parm, Literal):
|
||||
self.init_with_size(parm)
|
||||
elif isinstance(parm, list):
|
||||
self.size = len(parm)
|
||||
self.cells = [MemoryCell(value) for value in parm]
|
||||
else:
|
||||
raise ValueError("Invalid parameter type")
|
||||
|
||||
def init_with_size(self, size):
|
||||
"""Initialisiert ein Speicherarray mit einer bestimmten Größe."""
|
||||
assert isinstance(size, Literal), "Size must be a Literal or MemoryCell"
|
||||
assert isinstance(size.value, int), "Size must be an int"
|
||||
@ -45,6 +54,10 @@ class MemoryArray:
|
||||
"""Gibt eine Liste der Indizes der Speicherzellen zurück."""
|
||||
return [Literal(i) for i in range(self.size)]
|
||||
|
||||
def length(self):
|
||||
"""Gibt die Größe des Speicherarrays zurück."""
|
||||
return Literal(self.size)
|
||||
|
||||
def reset_counters(self):
|
||||
"""Setzt alle Zähler auf 0 zurück."""
|
||||
for cell in self.cells:
|
||||
@ -85,8 +98,8 @@ if __name__ == "__main__":
|
||||
for i in a.indices():
|
||||
a[i] = Literal(random.randint(1,100))
|
||||
print(a)
|
||||
sum = MemoryCell(0)
|
||||
s = MemoryCell(0)
|
||||
for cell in a.cells:
|
||||
sum += cell
|
||||
print(sum)
|
||||
MemoryManager.print_statistics()
|
||||
s += cell
|
||||
print(s)
|
||||
print(f"Anzahl der Additionen: {MemoryManager.count_adds()}")
|
||||
|
@ -53,7 +53,7 @@ class MemoryManager:
|
||||
def reset():
|
||||
manager = MemoryManager.get_instance()
|
||||
for cell in manager.cells:
|
||||
cell.reset_counters
|
||||
cell.reset_counters()
|
||||
|
||||
@staticmethod
|
||||
def purge():
|
||||
|
24
utils/memory_range.py
Normal file
24
utils/memory_range.py
Normal file
@ -0,0 +1,24 @@
|
||||
from utils.literal import Literal
|
||||
|
||||
# a generator that yields items instead of returning a list
|
||||
def mrange(parm1, parm2=None, parm3=None):
|
||||
if parm2 is None:
|
||||
start = 0
|
||||
stop = int(parm1)
|
||||
step = 1
|
||||
elif parm3 is None:
|
||||
start = int(parm1)
|
||||
stop = int(parm2)
|
||||
step = 1
|
||||
else:
|
||||
start = int(parm1)
|
||||
stop = int(parm2)
|
||||
step = int(parm3)
|
||||
num = start
|
||||
while num < stop:
|
||||
yield Literal(num)
|
||||
num += step
|
||||
|
||||
if __name__ == "__main__":
|
||||
for l in mrange(10):
|
||||
print(l)
|
@ -22,27 +22,18 @@ class TestMemoryArray(TestCase):
|
||||
|
||||
def test_get_item(self):
|
||||
l = random.randint(5,10)
|
||||
size = Literal(l)
|
||||
a = MemoryArray(size)
|
||||
values = []
|
||||
for i in a.indices():
|
||||
v = Literal(random.randint(1,100))
|
||||
values.append(v.value)
|
||||
a[i] = v
|
||||
values = [random.randint(1,100) for _ in range(l)]
|
||||
a = MemoryArray(values)
|
||||
for pos, i in enumerate(a.indices()):
|
||||
self.assertEqual(a[i].value, values[pos])
|
||||
|
||||
def test_reset_counters(self):
|
||||
l = random.randint(5,10)
|
||||
size = Literal(l)
|
||||
a = MemoryArray(size)
|
||||
for i in a.indices():
|
||||
v = Literal(random.randint(1,100))
|
||||
a[i] = v
|
||||
values = [random.randint(1,100) for _ in range(l)]
|
||||
a = MemoryArray(values)
|
||||
for i in a.indices():
|
||||
self.assertEqual(a[i].write_count, 1)
|
||||
a.reset_counters()
|
||||
|
||||
for i in a.indices():
|
||||
self.assertEqual(a[i].write_count, 0)
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user