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">
|
<component name="NewModuleRootManager">
|
||||||
<content url="file://$MODULE_DIR$">
|
<content url="file://$MODULE_DIR$">
|
||||||
<excludeFolder url="file://$MODULE_DIR$/.venv" />
|
<excludeFolder url="file://$MODULE_DIR$/.venv" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/venv" />
|
||||||
</content>
|
</content>
|
||||||
<orderEntry type="jdk" jdkName="Python 3.12 (AlgoDatSoSe25)" jdkType="Python SDK" />
|
<orderEntry type="jdk" jdkName="Python 3.12 (AlgoDatSoSe25)" jdkType="Python SDK" />
|
||||||
<orderEntry type="sourceFolder" forTests="false" />
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
|
@ -1,20 +1,20 @@
|
|||||||
from utils.memory_array import MemoryArray
|
from utils.memory_array import MemoryArray
|
||||||
from utils.literal import Literal
|
|
||||||
from utils.memory_cell import MemoryCell
|
from utils.memory_cell import MemoryCell
|
||||||
from utils.constants import MIN_VALUE
|
from utils.constants import MIN_VALUE
|
||||||
from utils.memory_manager import MemoryManager
|
from utils.memory_manager import MemoryManager
|
||||||
|
from utils.memory_range import mrange
|
||||||
|
|
||||||
def max_sequence_1(z: MemoryArray):
|
def max_sequence_1(z: MemoryArray):
|
||||||
n = len(z)
|
n = z.length()
|
||||||
m = MemoryCell(MIN_VALUE)
|
m = MemoryCell(MIN_VALUE)
|
||||||
s = MemoryCell()
|
s = MemoryCell()
|
||||||
l = MemoryCell()
|
l = MemoryCell()
|
||||||
r = MemoryCell()
|
r = MemoryCell()
|
||||||
for i in range(n):
|
for i in mrange(n):
|
||||||
for j in range(i, n):
|
for j in mrange(i, n):
|
||||||
s.set(0)
|
s.set(0)
|
||||||
for k in range(i, j):
|
for k in mrange(i, j):
|
||||||
s += z[Literal(k)]
|
s += z[k]
|
||||||
if s > m:
|
if s > m:
|
||||||
m.set(s)
|
m.set(s)
|
||||||
l.set(i)
|
l.set(i)
|
||||||
@ -22,11 +22,9 @@ def max_sequence_1(z: MemoryArray):
|
|||||||
return m, l, r
|
return m, l, r
|
||||||
|
|
||||||
|
|
||||||
def example(max_sequende_func):
|
def example(max_sequence_func):
|
||||||
z = MemoryArray(Literal(10))
|
z = MemoryArray([-59, 52, 46, 14, -50, 58, -87, -77, 34, 15])
|
||||||
for i, v in enumerate([-59, 52, 46, 14, -50, 58, -87, -77, 34, 15]):
|
m, l, r = max_sequence_func(z)
|
||||||
z[Literal(i)] = Literal(v)
|
|
||||||
m, l, r = max_sequende_func(z)
|
|
||||||
print(m, l, r)
|
print(m, l, r)
|
||||||
|
|
||||||
|
|
||||||
|
@ -6,7 +6,16 @@ from random import randint
|
|||||||
|
|
||||||
class MemoryArray:
|
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."""
|
"""Initialisiert ein Speicherarray mit einer bestimmten Größe."""
|
||||||
assert isinstance(size, Literal), "Size must be a Literal or MemoryCell"
|
assert isinstance(size, Literal), "Size must be a Literal or MemoryCell"
|
||||||
assert isinstance(size.value, int), "Size must be an int"
|
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."""
|
"""Gibt eine Liste der Indizes der Speicherzellen zurück."""
|
||||||
return [Literal(i) for i in range(self.size)]
|
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):
|
def reset_counters(self):
|
||||||
"""Setzt alle Zähler auf 0 zurück."""
|
"""Setzt alle Zähler auf 0 zurück."""
|
||||||
for cell in self.cells:
|
for cell in self.cells:
|
||||||
@ -85,8 +98,8 @@ if __name__ == "__main__":
|
|||||||
for i in a.indices():
|
for i in a.indices():
|
||||||
a[i] = Literal(random.randint(1,100))
|
a[i] = Literal(random.randint(1,100))
|
||||||
print(a)
|
print(a)
|
||||||
sum = MemoryCell(0)
|
s = MemoryCell(0)
|
||||||
for cell in a.cells:
|
for cell in a.cells:
|
||||||
sum += cell
|
s += cell
|
||||||
print(sum)
|
print(s)
|
||||||
MemoryManager.print_statistics()
|
print(f"Anzahl der Additionen: {MemoryManager.count_adds()}")
|
||||||
|
@ -53,7 +53,7 @@ class MemoryManager:
|
|||||||
def reset():
|
def reset():
|
||||||
manager = MemoryManager.get_instance()
|
manager = MemoryManager.get_instance()
|
||||||
for cell in manager.cells:
|
for cell in manager.cells:
|
||||||
cell.reset_counters
|
cell.reset_counters()
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def purge():
|
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):
|
def test_get_item(self):
|
||||||
l = random.randint(5,10)
|
l = random.randint(5,10)
|
||||||
size = Literal(l)
|
values = [random.randint(1,100) for _ in range(l)]
|
||||||
a = MemoryArray(size)
|
a = MemoryArray(values)
|
||||||
values = []
|
|
||||||
for i in a.indices():
|
|
||||||
v = Literal(random.randint(1,100))
|
|
||||||
values.append(v.value)
|
|
||||||
a[i] = v
|
|
||||||
for pos, i in enumerate(a.indices()):
|
for pos, i in enumerate(a.indices()):
|
||||||
self.assertEqual(a[i].value, values[pos])
|
self.assertEqual(a[i].value, values[pos])
|
||||||
|
|
||||||
def test_reset_counters(self):
|
def test_reset_counters(self):
|
||||||
l = random.randint(5,10)
|
l = random.randint(5,10)
|
||||||
size = Literal(l)
|
values = [random.randint(1,100) for _ in range(l)]
|
||||||
a = MemoryArray(size)
|
a = MemoryArray(values)
|
||||||
for i in a.indices():
|
|
||||||
v = Literal(random.randint(1,100))
|
|
||||||
a[i] = v
|
|
||||||
for i in a.indices():
|
for i in a.indices():
|
||||||
self.assertEqual(a[i].write_count, 1)
|
self.assertEqual(a[i].write_count, 1)
|
||||||
a.reset_counters()
|
a.reset_counters()
|
||||||
|
|
||||||
for i in a.indices():
|
for i in a.indices():
|
||||||
self.assertEqual(a[i].write_count, 0)
|
self.assertEqual(a[i].write_count, 0)
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user