117 lines
4.6 KiB
Markdown
117 lines
4.6 KiB
Markdown
# Algorithmen und Datenstrukturen I, WiSe 2021-22 #
|
||
|
||
Diese Repository ist für die Seminargruppe **j/l** am Freitag um 13:15–14:45
|
||
im Raum SG 3-14 bzw. SG 4-10 (alternierend).
|
||
|
||
**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.
|
||
|
||
In diesem Repository findet man:
|
||
|
||
- Protokolle der Seminargruppe [hier](./protocol).
|
||
- Notizen [hier](./notes).
|
||
- Symbolverzeichnis unter [notes/glossar.md](./notes/glossar.md).
|
||
- Referenzen unter [notes/quellen.md](./notes/quellen.md).
|
||
|
||
## 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 ##
|
||
|
||
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)
|
||
und [`code/golang/pkg/algorithms`](./code/golang/pkg/algorithms)).
|
||
|
||
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._
|
||
|
||
### Systemvoraussetzungen ###
|
||
|
||
#### 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 Golang-Projekt ####
|
||
|
||
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
|
||
```bash
|
||
./scripts/build.sh --lang go --mode setup
|
||
```
|
||
installieren.
|
||
|
||
#### 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
|
||
```bash
|
||
# Benutze die Option `--venv true`, um mit virtuellem Env zu arbeiten:
|
||
./scripts/build.sh --lang python --mode setup
|
||
## oder:
|
||
python3 -m pip install -r code/requirements; # linux, osx
|
||
py -3 -m pip install -r code/requirements; # Windows
|
||
```
|
||
installieren.
|
||
|
||
### Ausführung ###
|
||
|
||
#### 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
|
||
./dist/ads1 help; # zeigt Hilfsanleitung
|
||
./dist/ads1 version; # zeigt Version
|
||
./dist/ads1 run [--debug]; # führt code aus
|
||
```
|
||
|
||
#### Für das Python-Projekt ####
|
||
|
||
```bash
|
||
pushd code/python/src; ## <- auf Pfad mit main.py wechseln
|
||
|
||
## Anzeigen der Hilfsanleitung:
|
||
python3 main.py -h; # linux, OSX
|
||
py -3 main.py -h; # Windows
|
||
## Ausführung der Testfälle in code/config.yml:
|
||
python3 main.py run [--debug]; # linux, OSX
|
||
py -3 main.py run [--debug]; # Windows
|
||
## --debug Option benutzen, um Infos über Schritte zu zeigen.
|
||
|
||
popd; ## <- zum vorherigen Pfad zurückwechseln
|
||
```
|
||
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.
|