From 7df20ac74520ea7cbb38152e14f8bc4e8fb125e5 Mon Sep 17 00:00:00 2001
From: Hong-Phuc Bui <hong-phuc.bui@htwsaar.de>
Date: Wed, 15 May 2024 13:40:56 +0200
Subject: [PATCH] Ende Vorlesung 15.5.

---
 funktion-modular/study-effort/effort_semester.py |   52 +++++++++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 47 insertions(+), 5 deletions(-)

diff --git a/funktion-modular/study-effort/effort_semester.py b/funktion-modular/study-effort/effort_semester.py
index 33a90fc..2238ffc 100644
--- a/funktion-modular/study-effort/effort_semester.py
+++ b/funktion-modular/study-effort/effort_semester.py
@@ -27,27 +27,69 @@
 from typing import Final
 
 SEMESTER_LENGTH: Final[int] = 15  # 15 Woche pro Semester
+ECTS_EFFORT = 30  # 1 ECTS ~ 30 h
+DS = 1.5  # DS = Doppelstunde = 2 Unterrichtstunden
+
+
+def parse_line(line: str) -> tuple[str, float, float]:
+    line = line.strip()
+    line = [e.strip() for e in line.split(";")]
+    return line[0], float(line[1]), float(line[2])
 
 
 def collect_lectures_from_file(lecture_filename:str) -> list[tuple[str, float, float]]:
     # Your code here
-    pass
+    lectures = []
+    with open(lecture_filename) as file:
+        while line := file.readline():
+            line = line.strip()
+            if line[0] != '#':
+                line = parse_line(line)
+                lectures.append( line )
+    return lectures
+
+
+def lecture_effort(lecture: tuple[str, float, float]) -> float:
+    sum_effort = lecture[1] * ECTS_EFFORT
+    lecture_effort = SEMESTER_LENGTH * (lecture[2] * DS)
+    return (sum_effort - lecture_effort) / SEMESTER_LENGTH
 
 
 def compute_semester_effort(lectures: list[tuple[str, float, float]]) -> list[tuple[str, float, float, float]]:
-    # Your code here
-    pass
+    effort = [
+        (e[0], e[1], e[2], lecture_effort(e)) for e in lectures
+    ]
+    return effort
 
 
 def print_effort(effort: list[tuple[str, float, float, float]]) -> None:
-    # Your code here
-    pass
+    max_char = 0
+    sep_width = 3
+    sum_effort = 0
+    for l in effort:
+        if l := len(l[0]) > max_char:
+            max_char = l
+        sum_effort += l[-1]
+
+    lecture_col_width = sep_width + max_char
+    ects_width = len("ECTS") + 1
+    veranstaltung_col_width = 5
+    header = ("Vorlesung", "ECTS", "V;U;T/Woche", "Aufwand/Woche")
+    for l in effort:
+        lecture = l[0].rjust(lecture_col_width)
+        ects = f"{l[1]}".ljust(ects_width)
+        v = f"{l[2]}".rjust(veranstaltung_col_width)
+        e = f"{l[3]}".rjust(veranstaltung_col_width)
+        print(f"{lecture} {ects} {v} {e}")
+    print(f"Summe: {sum_effort}")
 
 
 if __name__ == "__main__":
     lecture_filename = sys.argv[1]
     lectures = collect_lectures_from_file(lecture_filename)
+    print(lectures)
     effort = compute_semester_effort(lectures)
+    #print(effort)
     print_effort(effort)
 
 

--
Gitblit v1.10.0-SNAPSHOT