|
| 1 | +--- |
| 2 | +title: unlisted |
| 3 | +--- |
| 4 | + |
| 5 | +# Wie viele Stunden dürfen wir im dritten Semester schwänzen? (CS24-1) |
| 6 | + |
| 7 | +Hellu, die ominöse Zahl von 70% Anwesenheit lässt sich ja bekanntlich nie wirklich ordentlich graspen, deswegen hab ich fix den Stundenplan runtergeladen (6s load time für 150kb danke für nichts CampusKaputt) um auszurechnen, wie viele Stunden wir eigentlich fehlen dürfen. |
| 8 | + |
| 9 | +```js [main.py] |
| 10 | +import json, math |
| 11 | +from dataclasses import dataclass |
| 12 | + |
| 13 | + |
| 14 | +@dataclass |
| 15 | +class Stunde: |
| 16 | + allDay: bool |
| 17 | + color: str |
| 18 | + font_color: str |
| 19 | + description: str |
| 20 | + editable: bool |
| 21 | + end: int |
| 22 | + instructor: str |
| 23 | + remarks: str |
| 24 | + room: str |
| 25 | + sinstructor: str |
| 26 | + sroom: str |
| 27 | + start: int |
| 28 | + title: str |
| 29 | + |
| 30 | + @classmethod |
| 31 | + def from_json(cls, obj: dict) -> "Stunde": |
| 32 | + return cls( |
| 33 | + allDay=bool(obj.get("allDay", False)), |
| 34 | + color=obj.get("color", ""), |
| 35 | + font_color=obj.get("font_color", obj.get("fontColor", "")), |
| 36 | + description=obj.get("description", ""), |
| 37 | + editable=bool(obj.get("editable", False)), |
| 38 | + end=int(obj.get("end", 0)) if obj.get("end") is not None else 0, |
| 39 | + instructor=obj.get("instructor", ""), |
| 40 | + remarks=obj.get("remarks", ""), |
| 41 | + room=obj.get("room", ""), |
| 42 | + sinstructor=obj.get("sinstructor", ""), |
| 43 | + sroom=obj.get("sroom", ""), |
| 44 | + start=int(obj.get("start", 0)) if obj.get("start") is not None else 0, |
| 45 | + title=obj.get("title", ""), |
| 46 | + ) |
| 47 | + |
| 48 | + |
| 49 | +with open("./stundenplan.json", encoding="utf-8") as file: |
| 50 | + data = json.load(file) |
| 51 | + stundenplan: list[Stunde] = [Stunde.from_json(entry) for entry in data] |
| 52 | + print(stundenplan[0]) |
| 53 | + |
| 54 | + timestamp_semester_3 = 1759038570000 |
| 55 | + |
| 56 | + semester_3_stunden: list[Stunde] = [ |
| 57 | + stunde |
| 58 | + for stunde in stundenplan |
| 59 | + if stunde.start > timestamp_semester_3 and "Prüfung" not in stunde.remarks |
| 60 | + ] |
| 61 | + |
| 62 | + module_set: set[str] = set() |
| 63 | + for stunde in semester_3_stunden: |
| 64 | + module_set.add(stunde.title) |
| 65 | + |
| 66 | + stunden_map: dict[str, int] = {key: 0 for key in module_set} |
| 67 | + |
| 68 | + for stunde in semester_3_stunden: |
| 69 | + stunden_map[stunde.title] += 1 |
| 70 | + |
| 71 | + print(stunden_map) |
| 72 | + |
| 73 | + schwänzbar_map: dict[str, int] = { |
| 74 | + key: math.floor(value * 0.3) for key, value in stunden_map.items() |
| 75 | + } |
| 76 | + |
| 77 | + print(schwänzbar_map) |
| 78 | +``` |
0 commit comments