diff --git a/Notes/Unterschiede.md b/Notes/Unterschiede.md
deleted file mode 100644
index c59c318..0000000
--- a/Notes/Unterschiede.md
+++ /dev/null
@@ -1,140 +0,0 @@
-# Unterschiede zu Vorjahren
-
-## Typalias
-
-Manchmal braucht man eine Kombination aus Datentypen
-
-### Vorher
-
-Erstellen von Typaliasen mit `Union`
-
-```python
-from typing import Union
-
-# `RealNumber` ist also eine `int` oder eine `float`
-RealNumber = Union[int, float]
-
-# also geht hier
-# `add(1, 1) -> 2`
-# `add(1.0, 1.0) -> 2.0`
-# aber auch
-# `add(1, 1.0) -> 2.0`
-def add(x: RealNumber, y: RealNumber) -> RealNumber:
- return x + y
-```
-
-### In Python3.12
-
-Wir haben jetzt das `type`-Keyword für das wir nichts importieren müssen und können einfach Datentypen mit `|` *odern*
-
-```python
-# `type` statt `Union`
-type NewRealNumber = int | float
-
-# sonst sieht alles gleich aus
-def new_add(x: NewRealNumber, y: NewRealNumber) -> NewRealNumber:
- return x + y
-```
-
-## Generiche Typ-Parameter (Generics, Typvariabeln, ...)
-
-### Vorher
-
-Erstellen von generischen Typvariabeln/Typ-Parametern mit `TypeVar` aus `typing`:
-
-```python
-from typing import Generic, TypeVar, Optional
-from dataclasses import dataclass, field
-
-# T ist unser Platzhalten für einen beliebigen Datentyp
-T = TypeVar('T')
-
-# jetzt können wir `T` einfach als Platzhalter für einen beliebigen Datentyp verwenden
-# praktisch weil wir so wissen dass `x`, `y` und der `return` zumindest den **selben** Datentyp verwenden
-# aber welcher genau wissen wir nicht bis jemand die Funktion mit z.b. `int` oder `float`!
-# Zum Beispiel bedeutet dass
-# `add(1, 2) == 3` => `T == int`
-# `add(1.0, 2.0) == 3.0` => `T == float`
-# ...
-def add(x: T, y: T) -> T:
- return x + y
-
-# Ebenso können wir `T` auch für Klassen verwenden
-@dataclass
-# wir müssen hier festlegen dass T in der Klasse verwendet wird
-# indem `MyList` von `Generic[UnsereGenerischeVariabel]` erbt
-class MyList(Generic[T]):
-
- def __post_init__(self, ):
- # wir haben intern eine `internal_list` die von außen nicht sichtbar ist
- self.__internal_list: list[T] = field(default_factory=list)
- # hier speichern wir uns die aktuelle Länge unserer Liste
- self.__length: int = 0
-
- def append(self, value: T):
- """fügt ein element mit dem Typ `T` hinzu"""
- self.__internal_list += [value]
- self.__length += 1
-
- def remove(self, value: T):
- """entfert das element `value`, wenn es in unserer Liste ist"""
- if value in self.__internal_list:
- self.__internal_list.remove(value)
-
- def get(self, i: int) -> Optional[T]:
- """gibt das element an `i` Stelle zurück. Wenn Liste kleiner als `i` ist, dann `None`"""
- if i < len(self):
- return self[i]
- return None
-
- def __len__(self) -> int:
- return self.__length
-
- def __getitem__(self, i: int) -> T:
- return self.__internal_list[i]
-```
-
-### In Python3.12
-
-Deklaration der Typvariabel direkt im Funktionskopf/Klassenkopf mit `[]`.
-Sprich wir brauchen `TypeVar` nicht mehr
-
-```python
-from typing import Optional
-from dataclasses import dataclass, field
-
-
-# hier wird `V` durch `[V]` deklariert und kann in der Funktion benutzt werden
-def new_add[V](x: V, y: V) -> V:
- return x + y
-
-
-# hier wird `T` für die Klasse `NewMyList` deklariert durch `[T]` und kann überall in der Klasse genutzt werden
-# der Rest ist genau gleich, das einzige was sich eben geändert hat ist dass man dieses `TypeVar` nicht mehr braucht
-# sondern direkt in der Deklaration von Klassen/Funktionen/Methoden die generischen Typvariabeln mit deklariert
-@dataclass
-class NewMyList[T]:
-
- def __post_init__(self, ):
- self.__internal_list: list[T] = field(default_factory=list)
- self.__length: int = 0
-
- def append(self, value: T):
- self.__internal_list += [value]
- self.__length += 1
-
- def remove(self, value: T):
- if value in self.__internal_list:
- self.__internal_list.remove(value)
-
- def get(self, i: int) -> Optional[T]:
- if i < len(self):
- return self[i]
- return None
-
- def __len__(self) -> int:
- return self.__length
-
- def __getitem__(self, i: int) -> T:
- return self.__internal_list[i]
-```
\ No newline at end of file
diff --git a/Notes/src/unterschiede.py b/Notes/src/unterschiede.py
deleted file mode 100644
index c567d99..0000000
--- a/Notes/src/unterschiede.py
+++ /dev/null
@@ -1,68 +0,0 @@
-from typing import Generic, TypeVar, Optional, Union
-from dataclasses import dataclass, field
-
-T = TypeVar('T')
-
-@dataclass
-class MyList(Generic[T]):
-
- def __post_init__(self, ):
- self.__internal_list: list[T] = field(default_factory=list)
- self.__length: int = 0
-
- def append(self, value: T):
- self.__internal_list += [value]
- self.__length += 1
-
- def remove(self, value: T):
- if value in self.__internal_list:
- self.__internal_list.remove(value)
-
- def get(self, i: int) -> Optional[T]:
- if i < len(self):
- return self[i]
- return None
-
- def __len__(self) -> int:
- return self.__length
-
- def __getitem__(self, i: int) -> T:
- return self.__internal_list[i]
-
-@dataclass
-class MyListNew[T]:
-
- def __post_init__(self, ):
- self.__internal_list: list[T] = field(default_factory=list)
- self.__length: int = 0
-
- def append(self, value: T):
- self.__internal_list += [value]
- self.__length += 1
-
- def remove(self, value: T):
- if value in self.__internal_list:
- self.__internal_list.remove(value)
-
- def get(self, i: int) -> Optional[T]:
- if i < len(self):
- return self[i]
- return None
-
- def __len__(self) -> int:
- return self.__length
-
- def __getitem__(self, i: int) -> T:
- return self.__internal_list[i]
-
-
-RealNumber = Union[int, float]
-
-def add(x: RealNumber, y: RealNumber) -> RealNumber:
- return x + y
-
-type NewRealNumber = int | float
-
-# sonst sieht alles gleich aus
-def new_add(x: NewRealNumber, y: NewRealNumber) -> NewRealNumber:
- return x + y
\ No newline at end of file
diff --git a/Tutorium/tut01/README.md b/Tutorium/tut01/README.md
index 20a9642..de5f7ef 100644
--- a/Tutorium/tut01/README.md
+++ b/Tutorium/tut01/README.md
@@ -1,99 +1,286 @@
-# Tutorium 01 - 20.10.2023
+---
+marp: true
+paginate: true
+theme: rose-pine
+footer: EidP 2024 - Nils Pukropp - https://git.narl.io/nvrl/eidp-2024
+style: ".columns {\r display: grid;\r grid-template-columns: repeat(2, minmax(0, 1fr));\r gap: 1rem;\r }"
+---
+# Tutorium 01 - 2024-10-17
+Vorstellen, Orga, Zusammenfassung, Installation von WSL/VS Code
-## Today
+---
+# Über mich
-* Vorstellen
-* Zusammenfassung Vorlesung
-* Übungsblatt 01
-* Installieren der benötigten Software
+
+
+
-## About me
* Nils Pukropp
-* 3 Semester Informatik B.Sc.
-* [nils@narl.io](mailto:nils@narl.io)
-* Discord: [.narl](https://discord.com/users/208979474988007425)
-* Telegram: [@narl_np](https://t.me/narl_np)
-* [Feedback](https://s.narl.io/s/Feedback-Tutorium-01)
-
-

-

-

-

-

+* Informatik B.Sc. 5. Semester
+* EidP Tutor seit zwei Semestern
+* Gerne einfach "Du"
-## Zusammenfassung Vorlesung
-
-### Orga
-
-* 14 Blätter jeden Dienstag auf der [Homepage](https://proglang.informatik.uni-freiburg.de/teaching/info1/2023/)
- * Abgabe im [Git](https://git.laurel.informatik.uni-freiburg.de/), Montags 9:00
-* Ihr braucht 50% der 326 Punkte
-* 2x Vorrechnen
- * Muss nicht korrekt sein
- * Wollen sehen dass ihr eure Aufgaben selber bearbeitet
- * Ich werde euch fragen, wenn ihr gute Abgaben hattet
-* Punkte für Anwesenheit im Tutorat
- * Anwesenheit über [QR-Code](https://auth.laurel.informatik.uni-freiburg.de/) (ab nächste Woche)
-
-### Python-Shell
-
-* Python-Shell bietet einen interaktiven Modus
-* Schnell Programme testen/kleinere Programme schreiben
-
-### Zahlen
-
-* `int` (Ganzzahlen)
-* `float` (Kommazahlen)
-* Grunderechenarten `+`, `-`, `*`, `/`, `//`
-* Potenz `**`
-* Modulo `%`
-* `float` -> `int` (möglicher) Informationsverlust
-* `int` -> `float` kein Informationsverlust
-* `float` sind etwas komplizierter als `int`
+
+
```py
->>> 0.1 + 0.1 + 0.1
-?
+print("Hello", "Tutorium", "2024!")
+>>> "Hello Tutorium 2024!"
```
-### Git
+
+
-* Git dient der Versionskontrolle
-* Wir benutzen [Gitea](https://github.com/go-gitea/gitea) als Git-Service
- * Remote Repositories
- * Weboberfläche zum offnen im Browser
- * Quasi eine Cloud für Code
- * Weitere Services wie Github, Gitlab, ...
+---
-### Git - the nerdy way
+# Wie wird das Tutorium ablaufen?
-#### Vorteile
+* Vorstellen des letzten Blatt
+* Wichtiges aus Vorlesung/für nächstes Blatt
+* Fragen zum nächsten Blatt
+* Allgemeine Fragen zur Vorlesung
+* Am Ende QR-Code für Anwesenheit
+* Ihr könnt mir gerne am Ende privat noch Fragen über die Vorlesung oder das Studium stellen
-[Anleitung von Dani](https://git.danielmironov.dev/mironov/eidp-tutorat)
+---
-* Man lernt umgang mit dem Terminal
-* Es ist deutlich schneller nach Eingewöhnung
-* Etwas unintuitiv wenn man sich mit dem Terminal nicht auskennt
+# Kontakt
-## [Übungsblatt 01](https://proglang.informatik.uni-freiburg.de/teaching/info1/2023/exercise/sheet01.pdf)
+- Mail: [nils@narl.io](mailto:)
+- Tutorium-Files: [git.narl.io/nvrl/eidp-2024](https://git.narl.io/nvrl/eidp-2024)
+- Telegram: [@narl_np](https://t.me/narl_np)
-* Abgabe 23.10.2023
+---
-## Notes Tutorium
+# Orga
+Was müsst ihr machen/wissen
-Die Windows `C:` Festplatte findet man in WSL unter `/mnt/c/`, andere Festplatten findet man analog dazu
+---
-`D: -> /mnt/d/`
-...
+# Studienleistung bekommen
-## Wichtige Links
+* Im HisInOne sich für dieses (oder ein anderes) Tutorium anmelden + Studienleistung (wird noch freigeschaltet)
+* 14 Blätter, jeden Dienstag auf der [EidP Website](https://proglang.github.io/teaching/24ws/eidp.html)
+* 2x Vorrechnen
+ * Muss nicht korrekt sein
+ * Ich werde gute Abgaben fragen
+* 3 Punkte für Anwesenheit
+ * Ab nächstem Tutorium
+ * Über [QR-Code](https://auth.laurel.informatik.uni-freiburg.de/)
+* Ihr braucht insgesamt mehr als 50% der Punkte (>50%)
-* [Homepage EidP](https://proglang.informatik.uni-freiburg.de/teaching/info1/2023/)
-* [EidP-Git (Abgaben)](https://git.laurel.informatik.uni-freiburg.de/)
-* [QR-Code für Anwesenheit](https://auth.laurel.informatik.uni-freiburg.de/)
-* [Mein Git](https://git.narl.io/nvrl/eidp-2024)
-* [nils@narl.io](mailto:nils@narl.io)
-* [Discord](https://discord.com/users/208979474988007425)
-* [Telegram](https://t.me/narl_np)
-* [Feedback](https://s.narl.io/s/Feedback-Tutorium-01)
\ No newline at end of file
+---
+
+# Prüfung
+
+- Nach den Vorlesungen (Ende Februar/März)
+- Setzt die Studienleistung vorraus
+- Schwerere/Schwerste Klausur im ersten Semester
+
+---
+
+# Warum fällt vielen EidP so schwer?
+
+- Zeitdruck in der Klausur
+- In der Studienleistung schummeln ist einfach, in der Klausur nicht
+ - fehlende Übung im Programmieren
+ - Nicht ausreichend mit den Themen befasst
+ - Wahrscheinlich die Übungsblätter nicht vollständig selbst bearbeitet
+ - Nachdem man die Studienleistung hat (>50% Punkte) aufgehört sich mit der Vorlesung zu beschäftigen
+
+---
+
+# ChatGPT
+
+- Wir tolerieren den Gebrauch
+- **ABER**: Ihr müsst in der Klausur alles verstanden haben und genug Übung im Umgang mit Python haben
+- Ob ihr jetzt Stunden braucht um die Lösung von ChatGPT nachzuvollziehen oder euch in Stunden die Lösung selbst erarbeitet und dabei praktische Programmiererfahrung sammelt ist eure Entscheidung.
+- Aus eigenem Interesse würde ich generierte Stellen mit einem Kommentar versehen, damit ich einen Überblick habe welche Aufgaben schwerer fallen und wie viel ChatGPT verwendet wird
+
+---
+
+# Plagiat
+
+- Wir tolerieren **kein** Plagiat
+ - Nicht von anderen Abschreiben
+ - Keine Lösungen aus dem Internet
+- Erster Plagiat: 0 Punkte
+- Zweiter Plagiat: Viel Erfolg im nächsten Jahr
+
+---
+
+# Abschließend
+
+- Stellt Fragen im Tutorium
+ - Im Tutorium für alle
+ - Nach dem Tutorium für eine genauere Erklärung
+- Nutzt die Studienleistung zum Üben
+- Vor der Klausur werde ich wieder ein Zusatz-Tutorium veranstalten um euch Abschließend auf die Klausur vorzubereiten
+- Gerne auch Fragen übers Studieren/Studium
+
+---
+
+# Zusammenfassung der Vorlesung
+Was müsst ihr Wissen?
+
+---
+
+# Was muss ich installieren?
+
+- [Setup Guide](https://proglang.github.io/teaching/24ws/eidp/setup.html)
+- Zusammengefasst:
+ - WSL/Linux
+ - Python 3.12.x
+ - VS Code
+ - VS Code-Extensions:
+ - Python, Pylance, Flake8, autopep8
+ - Git
+
+---
+
+# Warum Linux statt WSL?
+
+- Ihr werdet euch im Studium sowieso mit Linux auseinandersetzen
+- Endlich kein Windows mehr
+- Wir haben nicht einen Tutor der Windows benutzt
+- Deutlich kürzere Installation auch in zukünftigen Vorlesungen
+- Ihr lernt den Umgang mit der Shell deutlich schneller
+
+---
+
+# Was ist die Shell?
+
+- Die Shell ermöglicht wie die UI mit dem Betriebssystem zu interagieren
+- Ermöglicht einen präziseren Umgang mit eurem Betriebssystem
+- Ungewohnt am Anfang, aber mit etwas Übung deutlich effektiver/schneller als auf UIs angewiesen zu sein
+- Viele Prozesse sind nur mit der Shell möglich (haben kein UI)
+
+---
+
+# Was ist Git?
+
+- Git dient der Versionskontrolle
+- Ihr könnt neue/veränderte Datein zu Git hinzufügen um so eine Version einer Datei abzuspeichern
+- Hat noch viele weiter Funktionen für die Software Entwicklung
+- Für die Vorlesung braucht ihr lediglich `add`, `commit`, `pull`, `push`, (`status`)
+
+---
+
+
+
+
+# `git status`
+
+- Zeigt neue/veränderte/staged Datein an
+
+
+
+# `git add`
+
+- Fügt neue/veränderte Datein in den `staged` Bereich von Git
+- Diese Datein sind noch nicht vollständig gespeichert
+- Mit `git status` könnt ihr sehen welche bereits `staged` sind
+
+
+
+
+---
+
+# `git commit -m "commit message"`
+
+- "Speichert" die Dateien, welche mit `git add` hinzugefügt wurden
+
+---
+
+# Git-Server
+
+- Die Dateien sind jetzt aber nur lokal gespeichert
+- Git-Server ermöglichen den Austausch von Quellcode im Internet
+- So können auch mehrere an einem Quellcode arbeiten
+
+---
+
+
+
+
+# `git pull`
+
+- Der Git-Server wird nach neuen Änderungen gefragt
+- Die neuen Änderungen werden heruntergeladen
+
+
+
+
+# `git push`
+
+- Lokal gespeicherte Änderungen werden auf den Git-Server hochgeladen
+- Davor muss `git commit` verwendet worden sein
+
+
+
+
+---
+
+
+
+
+# Python
+
+- Wird in `.py` Datein geschrieben
+- Wird mit dem Befehl `python filename.py` ausgeführt
+- Python übersetzt die Datei, und führt diese Zeile für Zeile aus
+
+
+
+
+# Python Shell
+
+- Interaktive Shell (ähnlich wie die Linux Shell)
+- wartet auf Benutzereingaben
+- interpretiert Benutzereingaben nacheinander
+- Wird mit dem Befehl `python` ausgeführt
+
+
+
+---
+
+# Zahlentypen
+
+
+
+
+
+## `int`
+
+- Ganzzahlen $\mathbb{Z}$
+- In Python nur durch verfügbaren Speicher limitiert
+
+
+
+
+
+## `float`
+
+- Rationale Zahlen $\mathbb{R}$
+- neben Speicherlimitierung auch noch limitiert in der Genauigkeit (Floatpoint Precision)
+
+
+
+
+---
+
+# Rechenoperation
+
+- Wie mans kennt eigentlich
+ - Addition `+`
+ - Subtraktion `-`
+ - Multiplikation `*`
+ - Division `/`
+ - Ganzzahlige Division `//`
+ - Potenzen `**`
+ - Modulo `%`
+
+---
+
+# Übungsblatt 1 + Installationsprobleme
\ No newline at end of file
diff --git a/Tutorium/tut01/src/tutorium-01.png b/Tutorium/tut01/src/tutorium-01.png
deleted file mode 100644
index 4fbe70b..0000000
Binary files a/Tutorium/tut01/src/tutorium-01.png and /dev/null differ
diff --git a/Tutorium/tut01/tutorium-01.pdf b/Tutorium/tut01/tutorium-01.pdf
new file mode 100644
index 0000000..1353fdb
Binary files /dev/null and b/Tutorium/tut01/tutorium-01.pdf differ
diff --git a/Tutorium/tut02/COMPREHENSION.md b/Tutorium/tut02/COMPREHENSION.md
deleted file mode 100644
index 0f0395e..0000000
--- a/Tutorium/tut02/COMPREHENSION.md
+++ /dev/null
@@ -1,140 +0,0 @@
-
-# Zusammenfassung der Vorlesung
-
-## Variablen und Zuweisungen
-
-```python
-variable = 42
-print(variable)
-print(variable + variable)
-```
-
-- Case-Sensitive
-- A-z, 0-9, _
-- Keine Schlüsselwörte
-
-### Kurzzuweisung
-
-Operationen und Zuweisung können in einem Schritt durchgeführt werden mit `${Operation}=`
-
-```python
-number = 42
-number **= 42
-assert number == 42 ** 42
-number += 42
-assert number == 42 ** 42 + 42
-```
-
----
-
-## Assert
-
-- Erwartet einen wahren Ausdruck, wenn dieser nicht erfüllt ist gibt es einen Fehler
-- Gut um etwas schnell zu testen
-
-```py
-number = 42
-assert number == 42
-bigger_number = number ** number
-assert number ** number == bigger_number
-```
-
----
-
-## Typen
-
-```py
-number = 42
-string = '42'
-assert number != string
-```
-
----
-
-## Funktionen
-
-### Standardfunktionen
-
-- Typen konvertieren
-
-```python
->>> int(2.6)
-2
->>> float(2)
-2.0
->>> str(2.0)
-'2.0'
->>> type(2.0)
-
-```
-
-- Input/Output
-
-```python
->>> input("Hier Input geben: ")
-Hier Input geben: 42
-'42'
->>> print(42)
-42
-```
-
-### Funktionen kombinieren
-
-```python
->>> int(str(2))
-2
->>> str(int('2'))
-'2'
-```
-
-### Neue Funktionen definieren
-
-Mit `def` können neue Funktionen definiert werden
-
-```python
-def my_print_func(some_text):
- print(some_text)
-
-def my_add(a, b):
- return a + b
-
-my_print_func(my_add(1, 2)) # prints 3
-```
-
----
-
-## Imports
-
-Mit `import` können Module (andere Python-Datein) importiert und benutzt werden
-
-```python
-import math
-
-print(math.cos(math.pi)) # prints -1.0
-```
-
-Mit `from` und `import` können Sachen aus einem Modul spezifisch importiert werden
-
-```python
-from math import cos, pi
-
-print(cos(pi)) # prints -1.0
-```
-
----
-
-## Scopes
-
-Variabeln existieren in so genannten Scopes, am besten veranschaulicht man sich das einfach:
-
-```python
-GLOBAL_X = 42
-
-def my_func():
- x_in_func = 42 # x_in_func wird hier im Scope der Funktion erstellt
- print(GLOBAL_X) # GLOBAL_X ist im globalen Scope,
- # also auch hier im Funktions-Scope, weil dieser Scope auch im globalen Scope ist
-
-print(x_in_func) # wirft einen Fehler, weil x_in_func nicht im Scope ist
-print(GLOBAL_X) # Global Scope
-```
diff --git a/Tutorium/tut02/CORRECTION.md b/Tutorium/tut02/CORRECTION.md
deleted file mode 100644
index 1a4de9b..0000000
--- a/Tutorium/tut02/CORRECTION.md
+++ /dev/null
@@ -1,57 +0,0 @@
-# Korrektur Exercise-01
-
-## Häufige Fehler
-
-### Aufgabe 1.1
-
-Wer weiterhin Probleme bei der Installation hat, bitte nach dem Tutorat
-
-### Aufgabe 1.2
-
-- Terminierung war nicht erfüllt für $x,y=0$ aber nicht $x = y$
-- Dadurch auch kein Algorithmus laut Definition der Vorlesung, gab keinen Abzug wenn man alle Bedingungen als erfüllt ansah
-
-### Aufgabe 1.3
-
-- Es ging vor allem um den Unterschied zwischen der Python-Shell und dem normalen ausführen von `.py` Dateien
-
-### Aufgabe 1.4
-
-- Achtet auf die genau Anforderung!!!
-
-```sh
-Python
-Python
-Python
-```
-
-heißt nicht
-
-```sh
-
-Python
-Python
-Python
-```
-
-oder
-
-```sh
-
- Python
- Python
- Python
-```
-
-oder
-
-```sh
-Python
-Python
-Python
-
-```
-
-## Punkteverteilung
-
-
\ No newline at end of file
diff --git a/Tutorium/tut02/EXERCISE-02.md b/Tutorium/tut02/EXERCISE-02.md
deleted file mode 100644
index 433fbd2..0000000
--- a/Tutorium/tut02/EXERCISE-02.md
+++ /dev/null
@@ -1,5 +0,0 @@
-# [Exercise-02](https://proglang.informatik.uni-freiburg.de/teaching/info1/2023/exercise/sheet02.pdf)
-
-- Abgabe 30.10.2023 9:00 Uhr
-- Achtet auf den Build-Output (Linter, Notes, ...)
-- Fragen?
diff --git a/Tutorium/tut02/GIT.md b/Tutorium/tut02/GIT.md
deleted file mode 100644
index f0ac23e..0000000
--- a/Tutorium/tut02/GIT.md
+++ /dev/null
@@ -1,212 +0,0 @@
-# Beispiel Git-Workflow
-
----
-
-## SSH-Key generieren und im Git hinzufügen
-
-### Linux & Mac-OS
-
-Generiere einen Key mit
-
-```sh
-ssh-keygen -t ed25519 -C "you@mail.com"
-```
-
-Gib den Key in die Konsole aus mit
-
-```sh
-cat ~/.ssh/id_ed25519.pub
-```
-
-Kopiere mit Strg+Shift+C oder Rechtklick den Key aus dem Terminal und fügen ihn im [Git](https://git.laurel.informatik.uni-freiburg.de/user/settings/keys) als SSH Key hinzu.
-
-### Windows
-
-Generiere einen Key und kopiere ihn
-
-```ps
-ssh-keygen.exe -t ed25519 -C "you@mail.com"
-cat ~/.ssh/id_ed25519.pub | clip
-```
-
-fügen dann den Key im [Git](https://git.laurel.informatik.uni-freiburg.de/user/settings/keys) als SSH Key hinzu.
-
-### Mac
-
-Generiere einen Key mit
-
-```sh
-ssh-keygen -t ed25519 -C "you@mail.com"
-pbcopy < ~/.ssh/id_ed25519.pub
-```
-
-fügen dann den Key im [Git](https://git.laurel.informatik.uni-freiburg.de/user/settings/keys) als SSH Key hinzu.
-
----
-
-## Das Repository clonen
-
-Erstmal ist es wichtig wie man sich im Terminal überhaupt bewegt und umschaut. Wenn wir das Terminal starten, egal ob in Windows/Linux/Mac landen wir im Home-Verzeichnis often bezeichnet als `~`. Um den ersten Schritt zu gehen müssen wir erstmal wissen was wir hier überhaupt haben. Hierfür haben wir das Programm `ls`, welches den Inhalt in einem (ohne Argumente im aktuellen) Verzeichnis auflistet. Eine Beispielausgabe wäre:
-
-```sh
-nils@linux ~> ls
-total 16
-drwxr-xr-x 2 nils nils 4096 Oct 27 02:14 Desktop/
-drwxr-xr-x 2 nils nils 4096 Oct 27 02:16 Downloads/
-drwxr-xr-x 2 nils nils 4096 Oct 27 02:14 Pictures/
-drwxr-xr-x 2 nils nils 4096 Oct 27 02:14 Videos/
-```
-
-Nun können wir uns in die anderen Verzeichnisse bewegen mit `cd` (change directory).
-
-```sh
-nils@linux ~> cd Downloads/
-nils@linux ~/Downloads> ls
-total 0
--rw-r--r-- 1 nils nils 0 Oct 27 02:19 cat.png
-```
-
-mit `cd ..` können wir uns jetzt ein Verzeichnis wieder nach oben bewegen
-
-```sh
-nils@linux ~/Downloads> cd ..
-nils@linux ~> ls
-total 16
-drwxr-xr-x 2 nils nils 4096 Oct 27 02:14 Desktop/
-drwxr-xr-x 2 nils nils 4096 Oct 27 02:19 Downloads/
-drwxr-xr-x 2 nils nils 4096 Oct 27 02:14 Pictures/
-drwxr-xr-x 2 nils nils 4096 Oct 27 02:14 Videos/
-```
-
-nun clonen wir das Repository indem wir ins [Git](https://git.laurel.informatik.uni-freiburg.de/2021WS-EiP/) gehen, auf unser persönliches Repository gehen. Und oben bei **SSH** auf **Copy**/**Kopieren** gehen.
-
-Nun müssen wir einfach nur noch folgenden Befehl eingeben
-
-```sh
-nils@linux ~> git clone ssh://git@git.laurel.informatik.uni-freiburg.de:2222/2021WS-EiP/np163.git
-Cloning into 'np163'...
-The authenticity of host '[git.laurel.informatik.uni-freiburg.de]:2222 ([132.230.166.132]:2222)' can't be established.
-ED25519 key fingerprint is SHA256:zR3d+3MewcoiAuwVidHYfWcsNjT/OVz5FR6IwIyTNCs.
-This key is not known by any other names
-Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
-Warning: Permanently added '[git.laurel.informatik.uni-freiburg.de]:2222' (ED25519) to the list of known hosts.
-remote: Enumerating objects: 594, done.
-remote: Counting objects: 100% (594/594), done.
-remote: Compressing objects: 100% (573/573), done.
-remote: Total 594 (delta 336), reused 0 (delta 0), pack-reused 0
-Receiving objects: 100% (594/594), 86.90 KiB | 2.63 MiB/s, done.
-Resolving deltas: 100% (336/336), done.
-```
-
-nun können wir mit `ls` nachschauen dass ein neuer Ordner erschienen ist, in meinem Fall **np163**.
-
-```sh
-nils@linux ~> ls
-total 20
-drwxr-xr-x 2 nils nils 4096 Oct 27 02:14 Desktop/
-drwxr-xr-x 2 nils nils 4096 Oct 27 02:19 Downloads/
-drwxr-xr-x 2 nils nils 4096 Oct 27 02:14 Pictures/
-drwxr-xr-x 2 nils nils 4096 Oct 27 02:14 Videos/
-drwxr-xr-x 17 nils nils 4096 Oct 27 02:24 np163/
-```
-
-Nun können wir diesen Ordner in VSCode öffnen und haben einen Workspace um die Übungsaufgaben zu bearbeiten.
-
----
-
-Nun bewegen wir uns ins Git-Verzeichnis mit `cd np163`. Und führen unseren ersten Git-Command aus `git status`
-
-```sh
-nils@linux ~/np163 (master)> git status
-On branch master
-Your branch is up to date with 'origin/master'.
-
-nothing to commit, working tree clean
-```
-
-wir sehen, dass aktuell noch nichts im Verzeichnis geändert wurde. Das ändern wir jetzt indem wir in VSCode eine `hello_world.py` erstellen. Und den `git status` wiederholen
-
-```sh
-nils@linux ~/np163 (master)> git status
-On branch master
-Your branch is up to date with 'origin/master'.
-
-Untracked files:
- (use "git add ..." to include in what will be committed)
- hello_world.py
-
-nothing added to commit but untracked files present (use "git add" to track)
-```
-
-hier schlägt uns Git auch direkt schon vor `git add` zu verwenden um die neue Datei hinzuzufügen.
-
-```sh
-nils@linux ~/np163 (master)> git add hello_world.py
-nils@linux ~/np163 (master)> git status
-On branch master
-Your branch is up to date with 'origin/master'.
-
-Changes to be committed:
- (use "git restore --staged ..." to unstage)
- new file: hello_world.py
-```
-
-mit `git add -A` können alle aktuelle Änderungen hinzugefügt werden.
-nun können wir die Datei in unser Git eintragen indem wir `git commit -m 'meine nachricht'` verwenden.
-
-```sh
-nils@linux ~/np163 (master)> git commit -m 'created hello_world.py'
-[master 4191d5b] created hello_world.py
- 1 file changed, 0 insertions(+), 0 deletions(-)
- create mode 100644 hello_world.py
-```
-
-und diese Änderung dann mit `git push` hochladen.
-
-```sh
-nils@linux ~/np163 (master)> git push
-Enumerating objects: 4, done.
-Counting objects: 100% (4/4), done.
-Delta compression using up to 16 threads
-Compressing objects: 100% (2/2), done.
-Writing objects: 100% (3/3), 285 bytes | 285.00 KiB/s, done.
-Total 3 (delta 1), reused 0 (delta 0), pack-reused 0
-remote: . Processing 1 references
-remote: Processed 1 references in total
-To ssh://git.laurel.informatik.uni-freiburg.de:2222/2021WS-EiP/np163.git
- 06b6eb7..4191d5b master -> master
-```
-
----
-
-## Git - VSCode
-
-Zunächst erstellen wir eine Datei mit dem Namen `hello_world.py` über die Verzeichnisverwaltung von VSCode. Wir sehen dass die neue Datei bereits grün angezeigt, weil es eine neue Datei im Git ist.
-
-
-
-Nun wechsel wir die Ansicht von der Verzeichnisverwaltung zu Git ganz links außen.
-
-
-
-Nun drücken wir bei unserer neu erstellten Datei auf das `+`. Diese wird dann als `Staged Changes` angezeigt.
-
-
-
-Nun legen wir eine Nachricht fest welche die Änderungen representiert und beschreibt.
-
-
-
-Nun drücken wir auf `Commit` und nun sind unsere Änderungen übernommen.
-
-
-
-Nun können wir noch auf `Sync Changes` drücken um die Änderungen auch an den Git-Services **Gitea** zu schicken. Danach werden keine weiteren Dateien mehr im Git-Reiter angezeigt und online sehen wir dass unsere Änderungen hochgeladen wurden.
-
-
-
-
-
----
-
-Für Anregung gerne eine kurze [Mail](mailto:nils@narl.io) schreiben.
\ No newline at end of file
diff --git a/Tutorium/tut02/README.md b/Tutorium/tut02/README.md
deleted file mode 100644
index 74341a1..0000000
--- a/Tutorium/tut02/README.md
+++ /dev/null
@@ -1,21 +0,0 @@
-# Tutorium 02 - 27.10.2023
-
-## Today
-
-- [Korrektur Exercise-01](./CORRECTION.md)
-- [Zusammenfassung Vorlesung](./COMPREHENSION.md)
-- [Exercise-02](./EXERCISE-02.md)
-- [Beispiel Git-Workflow](./GIT.md)
-
-## About me
-
-- [nils@narl.io](mailto:nils@narl.io)
-- Discord: [.narl](https://discord.com/users/208979474988007425)
-- Telegram: [@narl_np](https://t.me/narl_np)
-- [Feedback](https://s.narl.io/s/Feedback-Tutorium-01)
-
-
-
-
-
-
\ No newline at end of file
diff --git a/Tutorium/tut02/src/punkteverteilung.png b/Tutorium/tut02/src/punkteverteilung.png
deleted file mode 100644
index 343e82c..0000000
Binary files a/Tutorium/tut02/src/punkteverteilung.png and /dev/null differ
diff --git a/Tutorium/tut02/src/tut02.py b/Tutorium/tut02/src/tut02.py
deleted file mode 100644
index 8cde782..0000000
--- a/Tutorium/tut02/src/tut02.py
+++ /dev/null
@@ -1 +0,0 @@
-print("hello world")
diff --git a/Tutorium/tut02/src/tutorium-02.png b/Tutorium/tut02/src/tutorium-02.png
deleted file mode 100644
index 0299a62..0000000
Binary files a/Tutorium/tut02/src/tutorium-02.png and /dev/null differ
diff --git a/Tutorium/tut02/src/vscode-01.png b/Tutorium/tut02/src/vscode-01.png
deleted file mode 100644
index 2dfb614..0000000
Binary files a/Tutorium/tut02/src/vscode-01.png and /dev/null differ
diff --git a/Tutorium/tut02/src/vscode-02.png b/Tutorium/tut02/src/vscode-02.png
deleted file mode 100644
index c705313..0000000
Binary files a/Tutorium/tut02/src/vscode-02.png and /dev/null differ
diff --git a/Tutorium/tut02/src/vscode-03.png b/Tutorium/tut02/src/vscode-03.png
deleted file mode 100644
index b069617..0000000
Binary files a/Tutorium/tut02/src/vscode-03.png and /dev/null differ
diff --git a/Tutorium/tut02/src/vscode-04.png b/Tutorium/tut02/src/vscode-04.png
deleted file mode 100644
index 88f2fca..0000000
Binary files a/Tutorium/tut02/src/vscode-04.png and /dev/null differ
diff --git a/Tutorium/tut02/src/vscode-05.png b/Tutorium/tut02/src/vscode-05.png
deleted file mode 100644
index d8973b7..0000000
Binary files a/Tutorium/tut02/src/vscode-05.png and /dev/null differ
diff --git a/Tutorium/tut02/src/vscode-06.png b/Tutorium/tut02/src/vscode-06.png
deleted file mode 100644
index ef29aac..0000000
Binary files a/Tutorium/tut02/src/vscode-06.png and /dev/null differ
diff --git a/Tutorium/tut02/src/vscode-07.png b/Tutorium/tut02/src/vscode-07.png
deleted file mode 100644
index d2e9481..0000000
Binary files a/Tutorium/tut02/src/vscode-07.png and /dev/null differ
diff --git a/Tutorium/tut03/README.md b/Tutorium/tut03/README.md
deleted file mode 100644
index e69de29..0000000
diff --git a/Tutorium/tut04/README.md b/Tutorium/tut04/README.md
deleted file mode 100644
index 7f67413..0000000
--- a/Tutorium/tut04/README.md
+++ /dev/null
@@ -1,65 +0,0 @@
-# Tutorium 04 - 10.11.2023
-
-## [Exercise 02](https://proglang.informatik.uni-freiburg.de/teaching/info1/2023/exercise/sheet02.pdf) und [Exercise 03](https://proglang.informatik.uni-freiburg.de/teaching/info1/2023/exercise/sheet03.pdf)
-
-### Punkteverteilung Exercise 02
-
-
-
-### Punkteverteilung Exercise 03
-
-
-
-### Häufige Fehler
-
-- **Schaut genau was muss ausgegeben werden!!!**
-- Achtet auf den Build-Output
- - **Linter-Error?** (-0.5 Punkte pro Datei)
- - **Syntax-Error?** (0 Punkte ab Exercise 4)
- - **Stunden eingetragen?** (-0.5 Punkte)
-- lest euch die Aufgaben genau durch
-- kommentiert keinen Quellcode aus, lasst ihn weg, oder lasst ihn stehen
-- Testet euren Code mit `assert`
- - später lernen wir noch bessere Tests kennen
- - lasst eure `assert` nicht einfach in der Logik stehen!
-
- ```py
- def some_function(arg):
- assert arg <= 360 # WRONG!
- return calculate(arg)
- ```
-
- ```py
- def some_function(arg) -> float:
- return calculate(arg)
-
- if __name__ == "__main__":
- # Right! Nur testen ob alles tut, mehr nicht
- # und in __main__ packen, damit nicht jeder import die asserts aufruft
- assert some_function(0.69) <= 42
- assert some_function(0.420) <= 1337
- ```
-
-## Vorstellen/Vorrechnen
-
-- mz242
-- vb205
-
-## [Exercise 04](https://proglang.informatik.uni-freiburg.de/teaching/info1/2023/exercise/sheet04.pdf)
-
-- Abgabe Montag 9:00 im [Git](https://git.laurel.informatik.uni-freiburg.de/)
-- Typannotationen jetzt wichtig.
-- `min` Funktion darf in 4.1 nicht benutzt werden.
-- Aufgabenteile werden mit **0 Punkten bewertet**, wenn:
- - Dateien und Funktionen nicht so benannt sind, wie im Aufgabentext gefordert;
- - Dateien falsche Formate haben, z.B. PDF statt plaintext;
- - Pythonskripte wegen eines Syntaxfehlers nicht ausführbar sind.
- - Verwenden Sie nur Befehle und Programmiertechniken, die Inhalt der bisherigen Vorlesungen (bis zum Abgabetermin) und Übungsblättern waren. (Ausnahme: f-Strings)
-- Fragen?
-
-
-# Nachkorrektur
-
-- mw793
-- fk439 (Zeitangabe)
-- jb1484 (Verspätete Akinator)
diff --git a/Tutorium/tut04/points_ex2.png b/Tutorium/tut04/points_ex2.png
deleted file mode 100644
index f89056f..0000000
Binary files a/Tutorium/tut04/points_ex2.png and /dev/null differ
diff --git a/Tutorium/tut04/points_ex3.png b/Tutorium/tut04/points_ex3.png
deleted file mode 100644
index 0a959e9..0000000
Binary files a/Tutorium/tut04/points_ex3.png and /dev/null differ
diff --git a/Tutorium/tut05/README.md b/Tutorium/tut05/README.md
deleted file mode 100644
index b45bd96..0000000
--- a/Tutorium/tut05/README.md
+++ /dev/null
@@ -1,125 +0,0 @@
-# Tutorium 05 - 17.11.2023
-
-## Korrektur [Exercise-04](https://proglang.informatik.uni-freiburg.de/teaching/info1/2023/exercise/sheet04.pdf)
-
-### Punkteverteilung
-
-
-
-### Häufige Fehler
-
-- Type Annotations
-- Print-Statements, Top-Level Statements in Logik/nicht in
-
- ```python
- if __name__ == "__main__":
- assert # some test
- ```
-
-- Ich kann euch prinzipiell immer 0 Punkte geben wenn Ihr etwas verwendet, was nicht Teil der Vorlesung war
-- Lest die Aufgabenstellungen/Hinweise auf dem Blatt
-- Benennt eure Dateien/Methoden richtig
-
-## Vorrechnen
-
-1. `lists.py`
- - a) `even`: no43
- - b) `min`: cl393
- - c) `max`: mt367
-2. `euler.py`
- - a) `fac`: au56
- - b) `approx_e`: rw208
-3. `binary.py`
- - a) `to_num`: ua28
- - b) `stream_to_nums`: md489
-
-## [Exercise-05](https://proglang.informatik.uni-freiburg.de/teaching/info1/2023/exercise/sheet05.pdf)
-
-- Abgabe Montag 09:00 Uhr im [git](https://git.laurel.informatik.uni-freiburg.de/)
-- Probleme beim installieren von `pygame`?
-
-## Übungsaufgaben
-
-### [Primes](./src/primes.py)
-
-Schreibe eine Funktion `prime_factorization` die eine Ganzzahl `n` entgegen nimmt und alle Primfaktoren berrechnet und die gegebene Zahl `n` in einen Paar mit den Primfaktoren als Liste zurückgibt. Denkt dabei an die richtigen Type Annotations
-
-```python
-def prime_factorization(n):
- pass
-```
-
-### [Dataclass](./src/data_classes.py)
-
-Schreiben Sie eine Datenklasse `Fraction` (Bruch), beachten Sie dabei die Type Annotations. Ein Bruch besteht aus einem `divident` und einem `divisor`.
-
-```python
-from dataclasses import dataclass
-
-
-@dataclass
-class Fraction:
- pass
-```
-
-Nun modellieren wir Hilfsmethoden für unsere Datenklassen, die uns später bei der Logik von Brüchen helfen
-
-```python
-# the greatest common divisor of two numbers `a`, `b`
-def gcd(a, b):
- pass
-
-# this shortens a fraction to its most reduced representation
-def shorten_fraction(fraction):
- pass
-```
-
-Abschließend modellieren wir nun auch noch das Verhalten von Brüchen indem wir Methoden direkt in der Datenklasse erstellen. Type Annotations!
-
-```python
-# Multiplication of two fractions
-# `Fraction(1 / 2) * Fraction(2 / 6) -> Fraction(1, 6)`
-# Extra: make it possible to multiply `int` with a fraction
-# `Fraction(1 / 2) * 2 -> Fraction(1 / 4)`
-def __mul__(self, o):
- pass
-
-# The division of two fraction
-# `Fraction(1 / 2) / Fraction(2 / 6) -> Fraction(3, 2)`
-# Extra: make it possible to divide `int` with a fraction
-# `Fraction(1 / 4) / 2 -> Fraction(1 / 2)`
-def __truediv__(self, o):
- pass
-
-# The negative of a fraction
-# `-Fraction(1 / 2) -> Fraction(-1 / 2)`
-def __neg__(self):
- pass
-
-# The addition of two fractions
-# `Fraction(1 / 4) + Fraction(2 / 8) -> Fraction(1 / 2)`
-# Extra: make it possible to add `int` with a fraction
-# `Fraction(1 / 4) + 1 -> Fraction(5 / 4)`
-def __add__(self, o):
- pass
-
-# The subtraction of two fractions
-# `Fraction(1 / 2) - Fraction(1 / 4) -> Fraction(1 / 4)`
-# Extra: make it possible to subtract `int` with a fraction
-# `Fraction(5 / 2) - 1 -> Fraction(3 / 2)`
-def __sub__(self, o):
- pass
-
-# The `equal`-function is == and should only care about reduced fractions
-# `Fraction(1 / 2) == Fraction(2 / 4)` is True
-def __eq__(self, o):
- pass
-
-# The `not equal`-function is != and should only care about reduced fractions exactly as equal
-def __neq__(self, o):
- pass
-
-# The str function should return this string `(divident / divisor)`
-def __str__(self):
- pass
-```
diff --git a/Tutorium/tut05/img/pointdistribution_exercise04.png b/Tutorium/tut05/img/pointdistribution_exercise04.png
deleted file mode 100644
index 9577c37..0000000
Binary files a/Tutorium/tut05/img/pointdistribution_exercise04.png and /dev/null differ
diff --git a/Tutorium/tut05/src/data_classes_solution.py b/Tutorium/tut05/src/data_classes_solution.py
deleted file mode 100644
index 816f1ba..0000000
--- a/Tutorium/tut05/src/data_classes_solution.py
+++ /dev/null
@@ -1,88 +0,0 @@
-from dataclasses import dataclass
-
-
-def gcd(a: int, b: int) -> int:
- x = abs(a)
- y = abs(b)
- while (y):
- x, y = y, x % y
- return x
-
-
-def shorten_fraction(fraction: 'Fraction') -> 'Fraction':
- g: int = gcd(fraction.divident, fraction.divisor)
- return Fraction(fraction.divident // g, fraction.divisor // g)
-
-
-@dataclass
-class Fraction:
- divident: int
- divisor: int
-
- def __neg__(self: 'Fraction') -> 'Fraction':
- return -1 * self
-
- def __mul__(self: 'Fraction', o: 'Fraction | int') -> 'Fraction':
- if isinstance(o, int):
- o = Fraction(o, 1)
- return shorten_fraction(Fraction(self.divident * o.divident,
- self.divisor * self.divisor))
-
- def __rmul__(self: 'Fraction', o: 'Fraction | int') -> 'Fraction':
- return self * o
-
- def __truediv__(self: 'Fraction', o: 'Fraction | int') -> 'Fraction':
- if isinstance(o, int):
- o = Fraction(o, 1)
- return shorten_fraction(Fraction(self.divident * o.divisor,
- self.divisor * o.divident))
-
- def __rtruediv___(self: 'Fraction', o: 'Fraction | int') -> 'Fraction':
- return self / o
-
- def __add__(self: 'Fraction', o: 'Fraction | int') -> 'Fraction':
- if isinstance(o, int):
- o = Fraction(o, 1)
- g: int = gcd(self.divisor, o.divisor)
- l: int = abs(self.divisor * o.divisor) // g
- return shorten_fraction(Fraction(self.divident
- * (l // self.divisor)
- + o.divident
- * (l // o.divisor), l))
-
- def __radd__(self: 'Fraction', o: 'Fraction | int') -> 'Fraction':
- return self + o
-
- def __sub__(self: 'Fraction', o: 'Fraction | int') -> 'Fraction':
- if isinstance(o, int):
- o = Fraction(o, 1)
- return self + -o
-
- def __rsub__(self: 'Fraction', o: 'Fraction | int') -> 'Fraction':
- return self - o
-
- def __eq__(self: 'Fraction', o: 'Fraction | int') -> bool:
- if isinstance(o, int):
- o = Fraction(o, 1)
- shorten_self: 'Fraction' = shorten_fraction(self)
- shorten_o: 'Fraction' = shorten_fraction(o)
- return (shorten_self.divident == shorten_o.divident
- and shorten_self.divisor == shorten_o.divisor)
-
- def __neq__(self: 'Fraction', o: 'Fraction | int') -> bool:
- return not (self == o)
-
- def __str__(self: 'Fraction'):
- return f"({self.divident} / {self.divisor})"
-
-
-if __name__ == "__main__":
- assert Fraction(1, 1) == 1
- assert Fraction(1, 2) == (out := Fraction(2, 4) /
- Fraction(g := gcd(2, 4), g)), f"!= {out}"
- assert (sol := Fraction(9, 20)) == (
- res := Fraction(1, 5) + Fraction(1, 4)), f"!= {out}"
- assert (sol := Fraction(-9, 20)) == (
- res := Fraction(1, -5) + Fraction(-1, 4)), f"!= {out}"
- assert (sol := Fraction(-1, 20)) == (
- res := Fraction(1, 5) + Fraction(-1, 4)), f"!= {out}"
diff --git a/Tutorium/tut05/src/primes_solution.py b/Tutorium/tut05/src/primes_solution.py
deleted file mode 100644
index 2cbe071..0000000
--- a/Tutorium/tut05/src/primes_solution.py
+++ /dev/null
@@ -1,34 +0,0 @@
-def prime_factorization(num: int) -> tuple[int, list[int]]:
- # our list of primefactors
- primefactors: list[int] = []
- # our first prime number
- prime: int = 2
- # we don't want to modify our number and copy it to `n`
- n: int = num
-
- # iterate until we find the last step the square of
- # our prime is bigger than our rest number
- while n != 1:
- # if our number is dividable by our prime
- if n % prime == 0:
- # we can add the prime to our primefactors
- primefactors.append(prime)
- # and divide our rest number by the prime number
- n //= prime
- else:
- # increment until next prime number
- prime += 1
-
- # finally return our tuple with our number and primefactors
- return (num, primefactors)
-
-
-if __name__ == "__main__":
- assert (sol := (100, [2, 2, 5, 5])) == (
- res := prime_factorization(100)), f"{res} is not {sol}"
- assert (sol := (69, [3, 23])) == (
- res := prime_factorization(69)), f"{res} is not {sol}"
- assert (sol := (31, [31])) == (
- res := prime_factorization(31)), f"{res} is not {sol}"
- assert (sol := (123490823022, [2, 3, 3, 3, 3, 7, 7, 7, 1123, 1979])) == (
- res := prime_factorization(123490823022)), f"{res} is not {sol}"
diff --git a/Tutorium/tut05/src/template.py b/Tutorium/tut05/src/template.py
deleted file mode 100644
index b23b3ef..0000000
--- a/Tutorium/tut05/src/template.py
+++ /dev/null
@@ -1,68 +0,0 @@
-from dataclasses import dataclass
-
-
-# the greatest common divisor of two numbers `a`, `b`
-def gcd(a, b):
- pass
-
-
-# this shortens a fraction to its most reduced representation
-def shorten_fraction(fraction):
- pass
-
-
-@dataclass
-class Fraction:
-
- # Multiplication of two fractions
- # `Fraction(1 / 2) * Fraction(2 / 6) -> Fraction(1, 6)`
- # Extra: make it possible to multiply `int` with a fraction
- # `Fraction(1 / 2) * 2 -> Fraction(1 / 4)`
- def __mul__(self, o):
- pass
-
- # The division of two fraction
- # `Fraction(1 / 2) / Fraction(2 / 6) -> Fraction(3, 2)`
- # Extra: make it possible to divide `int` with a fraction
- # `Fraction(1 / 4) / 2 -> Fraction(1 / 2)`
-
- def __truediv__(self, o):
- pass
-
- # The negative of a fraction
- # `-Fraction(1 / 2) -> Fraction(-1 / 2)`
-
- def __neg__(self):
- pass
-
- # The addition of two fractions
- # `Fraction(1 / 4) + Fraction(2 / 8) -> Fraction(1 / 2)`
- # Extra: make it possible to add `int` with a fraction
- # `Fraction(1 / 4) + 1 -> Fraction(5 / 4)`
-
- def __add__(self, o):
- pass
-
- # The subtraction of two fractions
- # `Fraction(1 / 2) - Fraction(1 / 4) -> Fraction(1 / 4)`
- # Extra: make it possible to subtract `int` with a fraction
- # `Fraction(5 / 2) - 1 -> Fraction(3 / 2)`
-
- def __sub__(self, o):
- pass
-
- # The `equal`-function is == and should only care about reduced fractions
- # `Fraction(1 / 2) == Fraction(2 / 4)` is True
-
- def __eq__(self, o):
- pass
-
- # The `not equal`-function is != and should only care about reduced fractions exactly as equal
-
- def __neq__(self, o):
- pass
-
- # The str function should return this string `(divident / divisor)`
-
- def __str__(self):
- pass
diff --git a/Tutorium/tut06/README.md b/Tutorium/tut06/README.md
deleted file mode 100644
index 43876a1..0000000
--- a/Tutorium/tut06/README.md
+++ /dev/null
@@ -1,285 +0,0 @@
-# Tutorium 06 - 24.11.2023
-
-## Vorab Informationen
-
-- Kollektiver [Discord](https://s.narl.io/s/discord-invite) mit Tutorium 05 (Daniel Mironow)
- - Dani's-Tutorium: Mi 16:00 - 18:00, Geb. 106, SR 00 007
- - Im Discord könnt ihr euch direkt mit uns Tutoren austauschen oder untereinander
-- Invite: https://s.narl.io/s/discord-invite
-- Es gibt wieder einen
-
- QR-Code:
-
-
-
-## Korrektur Blatt 05
-
-- am Samstag, ich hab mich etwas vertan bei der Korrektur
-- Punkteverteilung und häufige Fehler werden hier hinzugefügt
-
-
-
-### Häufige Fehler
-
-- Type annotation
-- `@dataclass` nicht benutzt
-- mutieren von erstellten Objekt
-- Call über Class und nicht über Objekt
-
-## Vorrechnen
-
-1. Python-Game
- 1. `Vec2`: aw616
- 2. `add_vecs`: fk439
- 3. `Item`: ln200
- 4. `Snake`: lp321
- 5. `Game`: rl173
- 6. `turn_direction`: ih205
- 7. `grow_positions`:
- 8. `collision`:
- 9. `generate_item`:
- 10. `pick_item`:
-
-## Recap - Was ist neu?
-
-### Union-Type und Type Definitionen
-
-- neues `type` Keyword
-- mit `|` lassen sich Union-Types definieren
-
-```py
-type Number = int | float | complex
-```
-
----
-
-### Generics (Typvariabeln)
-
-Manchmal weiß man nicht welcher Typ genau gemeint ist, möchte aber trotzdem "sicherstellen" dass es sich nicht um zwei unterschiedliche handelt:
-
-```py
-def some_func[T](some_list: list[T]) -> T:
- # ...
-```
-kleines Beispiel von "Bounds" aus Rust:
-
-```rust
-fn some_func(some_list: Vec) -> T {
- // ...
-}
-
-```
-
-oder noch schöner
-
-```rust
-fn some_func(some_list: Vec) -> T
-where T: Add