ads1_2021/README.md

124 lines
5.5 KiB
Markdown
Raw Normal View History

2021-10-12 20:39:49 +02:00
# Algorithmen und Datenstrukturen I, WiSe 2021-22 #
2021-10-13 17:50:31 +02:00
Diese Repository ist für die Seminargruppe **j/l** am Freitag um 13:1514:45
im Raum SG 3-14 bzw. SG 4-10 (alternierend).
2021-10-12 20:39:49 +02:00
2021-11-01 19:59:34 +01:00
**HINWEIS 1:** In diesem Repository werden keine Personen bezogenen Daten der Studierenden gespeichert.
**HINWEIS 2:** Es besteht absolut gar keine Pflicht, die Materialien in diesem Repo zu verwenden. Diese sind lediglich zusätzliche Hilfsmittel. **Im Zweifelsfalls** sollte man sich immer an den Definitionen und Auslegungen in der VL orientieren.
2021-10-12 20:39:49 +02:00
In diesem Repository findet man:
2021-10-13 17:50:31 +02:00
- Protokolle der Seminargruppe [hier](./protocol).
2021-10-12 20:39:49 +02:00
- Notizen [hier](./notes).
- Symbolverzeichnis unter [notes/glossar.md](./notes/glossar.md).
- Referenzen unter [notes/quellen.md](./notes/quellen.md).
2021-10-15 12:44:50 +02:00
## Leistungen während des Semesters ##
- 12 x freiwillige Serien (unkorrigiert: Lösungen werden per Moodle veröffentlicht)
- 6 x Pflichtserien (jeweils 2 Wochen Bearbeitungsdauer)
- wöchentlich werden im den Lernstunden _andere_ Aufgabenblätter im Raum angezeigt und von Studierenden bearbeitet.
## Vorleistungen ##
- ≥ 50% der Punkte aus den 6 Pflichtserien sollen geschafft werden.
- _nur digitale Abgabe_!
## Code ##
2021-10-30 10:19:33 +02:00
Im Unterordner [`code`](./code) kann man Codeprojekte in Python und Golang finden, in denen verschiedene Algorithmen implementiert werden
(siehe insbes. [`code/python/src/algorithms`](./code/python//src/algorithms)
2021-11-01 20:15:34 +01:00
und [`code/golang/internal/algorithms`](./code/golang/internal/algorithms)).
2021-11-01 19:59:34 +01:00
Gerne kann man den Code benutzen, in einem eigenen Repository verändern, und mit den im Kurs präsentierten Algorithmen **herumexperimentieren**.
**HINWEIS:** _Bei meiner Implementierung kann es zu leichten Abweichungen kommen. Bitte **stets** an dem Material im VL-Skript sich orientieren. Der Hauptzweck der Code-Projekte besteht darin, dass Wissbegierige die Algorithmen konkret ausprobieren können. Alle theoretischen Aspekte werden jedoch im Skript und in den Übungen ausführlicher erklärt._
2021-10-23 17:55:14 +02:00
### Systemvoraussetzungen ###
2021-10-30 10:19:33 +02:00
#### Bashscripts ####
Im Ordner [`scripts`](./scripts) sind mehrere Workflows als Bashscripts kodiert. (Man kann natürlich ohne sie arbeiten, insbesondere dann, wenn man einen guten IDE hat.)
Zunächst braucht man einen Bashterminal. Das kommt mit OSX (Terminal) und Linux. Für Windows-User braucht man [git-for-windows](https://gitforwindows.org) zu installieren, was auch bash mit installiert. (Und für diejenigen, die VSCode oder andere IDEs benutzen, lässt sich bash als integrierten Terminal im IDE selbst verwenden.)
Den Bashscripts benötigen Ausfuhrrechte. Hierfür führe man
```bash
chmod +x scripts/*.sh;
```
aus. Das muss danach nie wiederholt werden.
Jetzt können wir von dem Hauptordner des Repositorys Befehle wie
```bash
./scripts/build.sh
./scripts/build.sh ---mode setup
```
usw. in der Bash-Console ausführen.
#### Für das Python-Projekt ####
Python version 3.x.x (idealerweise zumindest 3.9.5) plus einige Module (siehe [code/requirements](./code/requirements)). Letztere lassen sich mittels
2021-10-23 17:55:14 +02:00
```bash
2021-11-01 19:59:34 +01:00
# Benutze die Option `--venv true`, um mit virtuellem Env zu arbeiten:
2021-10-30 10:19:33 +02:00
./scripts/build.sh --lang python --mode setup
2021-11-01 19:59:34 +01:00
## oder:
python3 -m pip install -r code/requirements; # linux, osx
py -3 -m pip install -r code/requirements; # Windows
2021-10-23 17:55:14 +02:00
```
installieren.
2021-10-30 10:19:33 +02:00
#### Für das Golang-Projekt ####
2021-11-01 20:15:34 +01:00
Man braucht [go](https://golang.org/dl/) Version **1.17.x**. (Man kann bestimmt bei späteren Releases höhere Versionen benutzen. Man muss lediglich dann in [`./code/golang/go.mod`](./code/golang/go.mod) die Version hochstellen und die Requirements nochmals installieren lassen.) Und einige Packages werden benötigt. Letztere lassen sich mittels
2021-10-30 10:19:33 +02:00
```bash
2021-11-01 20:15:34 +01:00
./scripts/build.sh --lang go --mode setup
2021-10-30 10:19:33 +02:00
```
2021-11-01 20:15:34 +01:00
installieren.
### Ausführung ###
2021-10-30 10:19:33 +02:00
#### Für das Python-Projekt ####
```bash
2021-10-30 10:19:33 +02:00
pushd code/python/src; ## <- auf Pfad mit main.py wechseln
2021-10-29 15:24:04 +02:00
## Anzeigen der Hilfsanleitung:
2021-10-30 10:19:33 +02:00
python3 main.py -h; # linux, OSX
py -3 main.py -h; # Windows
2021-11-01 23:38:59 +01:00
## Algorithmus auf Fälle in code/config.yml ausführen:
2021-10-30 10:19:33 +02:00
python3 main.py run [--debug]; # linux, OSX
py -3 main.py run [--debug]; # Windows
2021-11-04 07:59:57 +01:00
## NOTE: --debug = Infos über Schritte zeigen
## NOTE: --colour true/false = schaltet Farbenmodus ein/aus
2021-10-30 10:19:33 +02:00
popd; ## <- zum vorherigen Pfad zurückwechseln
```
2021-11-01 19:59:34 +01:00
Oder man erstelle ein bash Skript wie `run.sh`, trage die Befehle da ein und führe
```bash
chmod +x run.sh; # nur einmalig nötig
./run.sh
```
aus.
2021-11-01 20:15:34 +01:00
#### Für das Golang-Projekt ####
Zuerst den Artefakt kompilieren:
```bash
./scripts/build.sh --lang go --mode dist;
## oder:
go build -o "dist/ads" "code/golang/main.go";
```
und dann mit dem gebauten Artefakt arbeiten:
```bash
2021-11-04 07:59:57 +01:00
dist/ads # startet Programm im interaktiven Modus
2021-11-03 18:45:58 +01:00
dist/ads help; # zeigt Hilfsanleitung
dist/ads version; # zeigt Version
dist/ads run [--debug]; # Algorithmus auf Fälle in code/config.yml ausführen
dist/ads run [--debug] --it; # startet Programm im interaktiven Modus
2021-11-04 07:59:57 +01:00
## NOTE: --debug = Infos über Schritte zeigen
## NOTE: --colour true/false = schaltet Farbenmodus ein/aus
2021-11-01 20:15:34 +01:00
```
2021-11-01 20:17:42 +01:00
**ANMERKUNG.** Ich habe versucht in beiden Projekten alle unnötigen Komplikationen von den Algorithmen auszublenden. Dennoch kann es durchaus der Fall sein, dass die Python-Implementierung wesentlich einfacher zu verstehen ist als die Go-Implementierung. Das Go-Projekt wurde v.&nbsp;a. deshalb entwickelt, da man mit Python mit _Pointers_ (»Zeiger«, siehe Woche 3) nicht arbeiten kann. Dennoch versuche ich, beide Projekten parallel auf einem ähnlichen Stand zu halten. Beide Projekte sind außerdem so konzipiert, dass sie Inputs gleichen Formats (d. h. die **config.yml** Datei) akzeptieren.