Update of exercises
parent
10a781fe11
commit
e3131a4f59
|
|
@ -60,7 +60,7 @@ Hierzu gehen Sie wie folgt vor:
|
||||||
5. Rufen Sie mit `bin/submit.sh` erneut das Skript auf. Wenn alles klappt, bekommen Sie die Anzeige "✅ Aktuelle Lösungen eingereicht" und Ihre Lösung ist im System angekommen.
|
5. Rufen Sie mit `bin/submit.sh` erneut das Skript auf. Wenn alles klappt, bekommen Sie die Anzeige "✅ Aktuelle Lösungen eingereicht" und Ihre Lösung ist im System angekommen.
|
||||||
6. Überprüfen Sie über das Web-Frontend, ob alles so im Repository liegt, wie Sie es erwarten.
|
6. Überprüfen Sie über das Web-Frontend, ob alles so im Repository liegt, wie Sie es erwarten.
|
||||||
|
|
||||||
**Erinnerung**: Denken Sie daran, dass Sie alle **öffentlichen Methoden** mit entsprechender **JavaDoc** versehen müssen. **Ausgaben** auf und **Eingaben** von der Konsole sind nur dann erlaubt, wenn der Aufgabentext es explizit verlangt.
|
**Erinnerung**: Denken Sie daran, dass Sie alle **öffentlichen Methoden** mit entsprechender **Javadoc** versehen müssen. **Ausgaben** auf und **Eingaben** von der Konsole sind nur dann erlaubt, wenn der Aufgabentext es explizit verlangt.
|
||||||
|
|
||||||
|
|
||||||
Wenn beim Bauen des Programms durch Maven Fehler auftreten, dann lesen Sie die Fehlermeldungen sorgfältig **von oben nach unten**. **Sie müssen immer den ersten Fehler (von oben gesehen) zuerst beheben.**
|
Wenn beim Bauen des Programms durch Maven Fehler auftreten, dann lesen Sie die Fehlermeldungen sorgfältig **von oben nach unten**. **Sie müssen immer den ersten Fehler (von oben gesehen) zuerst beheben.**
|
||||||
|
|
|
||||||
|
|
@ -59,4 +59,4 @@ Hierzu gehen Sie wie folgt vor:
|
||||||
5. Rufen Sie mit `bin/submit.sh` erneut das Skript auf. Wenn alles klappt, bekommen Sie die Anzeige "✅ Aktuelle Lösungen eingereicht" und Ihre Lösung ist im System angekommen.
|
5. Rufen Sie mit `bin/submit.sh` erneut das Skript auf. Wenn alles klappt, bekommen Sie die Anzeige "✅ Aktuelle Lösungen eingereicht" und Ihre Lösung ist im System angekommen.
|
||||||
6. Überprüfen Sie über das Web-Frontend, ob alles so im Repository liegt, wie Sie es erwarten.
|
6. Überprüfen Sie über das Web-Frontend, ob alles so im Repository liegt, wie Sie es erwarten.
|
||||||
|
|
||||||
**Erinnerung**: Denken Sie daran, dass Sie alle **öffentlichen Methoden** mit entsprechender **JavaDoc** versehen müssen. **Ausgaben** auf und **Eingaben** von der Konsole sind nur dann erlaubt, wenn der Aufgabentext es explizit verlangt.
|
**Erinnerung**: Denken Sie daran, dass Sie alle **öffentlichen Methoden** mit entsprechender **Javadoc** versehen müssen. **Ausgaben** auf und **Eingaben** von der Konsole sind nur dann erlaubt, wenn der Aufgabentext es explizit verlangt.
|
||||||
|
|
@ -92,4 +92,4 @@ Hierzu gehen Sie wie folgt vor:
|
||||||
5. Rufen Sie mit `bin/submit.sh` erneut das Skript auf. Wenn alles klappt, bekommen Sie die Anzeige "✅ Aktuelle Lösungen eingereicht" und Ihre Lösung ist im System angekommen.
|
5. Rufen Sie mit `bin/submit.sh` erneut das Skript auf. Wenn alles klappt, bekommen Sie die Anzeige "✅ Aktuelle Lösungen eingereicht" und Ihre Lösung ist im System angekommen.
|
||||||
6. Überprüfen Sie über das Web-Frontend, ob alles so im Repository liegt, wie Sie es erwarten.
|
6. Überprüfen Sie über das Web-Frontend, ob alles so im Repository liegt, wie Sie es erwarten.
|
||||||
|
|
||||||
**Erinnerung**: Denken Sie daran, dass Sie alle **öffentlichen Methoden** mit entsprechender **JavaDoc** versehen müssen. **Ausgaben** auf und **Eingaben** von der Konsole sind nur dann erlaubt, wenn der Aufgabentext es explizit verlangt.
|
**Erinnerung**: Denken Sie daran, dass Sie alle **öffentlichen Methoden** mit entsprechender **Javadoc** versehen müssen. **Ausgaben** auf und **Eingaben** von der Konsole sind nur dann erlaubt, wenn der Aufgabentext es explizit verlangt.
|
||||||
|
|
@ -34,18 +34,16 @@ Jedes Passwort wird in eine von drei Kategorien eingeordnet:
|
||||||
|
|
||||||
Diese Bewertung wird als Zahl (siehe Konstanten in der Klasse `Rule`) repräsentiert.
|
Diese Bewertung wird als Zahl (siehe Konstanten in der Klasse `Rule`) repräsentiert.
|
||||||
|
|
||||||
Wenn mehrere Regeln kombiniert werden, gilt immer die schlechteste Bewertung.
|
|
||||||
|
|
||||||
Implementieren Sie Password-Prüfungen für folgende Tests, die alle von der abstrakten Klasse `Rule` abgeleitet sind:
|
Implementieren Sie Password-Prüfungen für folgende Tests, die alle von der abstrakten Klasse `Rule` abgeleitet sind:
|
||||||
|
|
||||||
* **Zeichensatz** (`RuleChars`): Das Password muss mindestens einen Großbuchstaben, einen Kleinbuchstaben, eine Zahl und ein Sonderzeichen enthalten, um gut zu sein (`GOOD`). Fehlt eine der Kategorien, ist es noch akzeptabel (`FAIR`), ansonsten schlecht (`BAD`).
|
* **Zeichensatz** (`RuleChars`): Das Password muss mindestens einen Großbuchstaben, einen Kleinbuchstaben, eine Zahl und ein Sonderzeichen enthalten, um gut zu sein (`GOOD`). Fehlt eine der Kategorien, ist es noch akzeptabel (`FAIR`), ansonsten schlecht (`BAD`).
|
||||||
* **Wörterbuch** (`RuleDictionary`): Das Password darf kein Wort aus einem Wörterbuch enthalten. Das Wörterbuch ist der Einfachheit halber als „mutti“, „papi“, „dackel“ und „password“ festgelegt. Groß- und Kleinschreibung haben keine Relevanz, d.h. „Mutti“ und „mutti“ sind beide verbotene Wörter.
|
* **Wörterbuch** (`RuleDictionary`): Das Password darf kein Wort aus einem Wörterbuch enthalten. Das Wörterbuch ist der Einfachheit halber als „mutti“, „papi“, „dackel“ und „password“ festgelegt. Groß- und Kleinschreibung haben keine Relevanz, d.h. „Mutti“ und „mutti“ sind beide verbotene Wörter.
|
||||||
* **Länge** (`RuleLength`): Das Passwort muss eine Mindestlänge von 8 Zeichen haben (`BAD`), oberhalb einer optimalen Länge von 12 ist es gut (`GOOD`), darunter `FAIR`.
|
* **Länge** (`RuleLength`): Das Passwort muss eine Mindestlänge von 8 Zeichen haben, darunter ist es schlecht (`BAD`). Oberhalb einer optimalen Länge von 12 ist es gut (`GOOD`), darunter `FAIR`.
|
||||||
* **Entropie** (`RuleEntropy`): Die Shannon Entropie des Passwortes muss in einem bestimmten Bereich liegen:
|
* **Entropie** (`RuleEntropy`): Die Shannon Entropie des Passwortes muss in einem bestimmten Bereich liegen:
|
||||||
- `< 1.0`: Schlecht (`BAD`)
|
- `< 1.0`: Schlecht (`BAD`)
|
||||||
- `< 2.0`: Akzeptabel (`FAIR`)
|
- `< 2.0`: Akzeptabel (`FAIR`)
|
||||||
- `>= 2.0`: Gut (`GOOD`)
|
- `>= 2.0`: Gut (`GOOD`)
|
||||||
* **Kombination** (`RuleCombined`): Beliebige Regeln können zu einer komplexeren Regel kombiniert werden. Für den Anfang werden einfach alle Regeln benutzt, um die Kombination zu realisieren.
|
* **Kombination** (`RuleCombined`): Beliebige Regeln können zu einer komplexeren Regel kombiniert werden. Für den Anfang werden einfach alle Regeln benutzt, um die Kombination zu realisieren. Wenn mehrere Regeln kombiniert werden, gilt immer die schlechteste Bewertung.
|
||||||
|
|
||||||
*Achtung:* Die Klassen liegen in einem eigenen Paket und sind nicht von außerhalb des Paketes sichtbar.
|
*Achtung:* Die Klassen liegen in einem eigenen Paket und sind nicht von außerhalb des Paketes sichtbar.
|
||||||
|
|
||||||
|
|
@ -78,4 +76,4 @@ Hierzu gehen Sie wie folgt vor:
|
||||||
5. Rufen Sie mit `bin/submit.sh` erneut das Skript auf. Wenn alles klappt, bekommen Sie die Anzeige "✅ Aktuelle Lösungen eingereicht" und Ihre Lösung ist im System angekommen.
|
5. Rufen Sie mit `bin/submit.sh` erneut das Skript auf. Wenn alles klappt, bekommen Sie die Anzeige "✅ Aktuelle Lösungen eingereicht" und Ihre Lösung ist im System angekommen.
|
||||||
6. Überprüfen Sie über das Web-Frontend, ob alles so im Repository liegt, wie Sie es erwarten.
|
6. Überprüfen Sie über das Web-Frontend, ob alles so im Repository liegt, wie Sie es erwarten.
|
||||||
|
|
||||||
**Erinnerung**: Denken Sie daran, dass Sie alle **öffentlichen Methoden** mit entsprechender **JavaDoc** versehen müssen. **Ausgaben** auf und **Eingaben** von der Konsole sind nur dann erlaubt, wenn der Aufgabentext es explizit verlangt.
|
**Erinnerung**: Denken Sie daran, dass Sie alle **öffentlichen Methoden** mit entsprechender **Javadoc** versehen müssen. **Ausgaben** auf und **Eingaben** von der Konsole sind nur dann erlaubt, wenn der Aufgabentext es explizit verlangt.
|
||||||
|
|
@ -542,4 +542,4 @@ Hierzu gehen Sie wie folgt vor:
|
||||||
5. Rufen Sie mit `bin/submit.sh` erneut das Skript auf. Wenn alles klappt, bekommen Sie die Anzeige "✅ Aktuelle Lösungen eingereicht" und Ihre Lösung ist im System angekommen.
|
5. Rufen Sie mit `bin/submit.sh` erneut das Skript auf. Wenn alles klappt, bekommen Sie die Anzeige "✅ Aktuelle Lösungen eingereicht" und Ihre Lösung ist im System angekommen.
|
||||||
6. Überprüfen Sie über das Web-Frontend, ob alles so im Repository liegt, wie Sie es erwarten.
|
6. Überprüfen Sie über das Web-Frontend, ob alles so im Repository liegt, wie Sie es erwarten.
|
||||||
|
|
||||||
**Erinnerung**: Denken Sie daran, dass Sie alle **öffentlichen Methoden** mit entsprechender **JavaDoc** versehen müssen. **Ausgaben** auf und **Eingaben** von der Konsole sind nur dann erlaubt, wenn der Aufgabentext es explizit verlangt.
|
**Erinnerung**: Denken Sie daran, dass Sie alle **öffentlichen Methoden** mit entsprechender **Javadoc** versehen müssen. **Ausgaben** auf und **Eingaben** von der Konsole sind nur dann erlaubt, wenn der Aufgabentext es explizit verlangt.
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 2.4 MiB |
Binary file not shown.
|
After Width: | Height: | Size: 42 KiB |
|
|
@ -0,0 +1,90 @@
|
||||||
|
# Ein Traum in Zucker oder kann ich dem Zufallsgenerator trauen?
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Ihr Auftritt in der Spieleindustrie war ein voller Erfolg: Racewars hat die Steam-Charts gestürmt und der Einfluss ist so groß, dass Rockstar Games den Launch von GTA VI um sechs Monate verschoben hat, um nicht in Konkurrenz zu Ihrem Spiel zu treten.
|
||||||
|
|
||||||
|
Während einer Promo-Tour für Ihr Spiel reisen Sie auch durch die USA und stellen in San Francisco dessen tolle Features vor. Dort werden Sie von Mark Zuckerberg angesprochen und zu einer Party am Abend eingeladen. Natürlich nehmen Sie die Einladung an und feiern dort heftig ab.
|
||||||
|
|
||||||
|
<img src="img/zuck.jpg" width="150" alt="Mark Zuckerberg">
|
||||||
|
|
||||||
|
Plötzlich wird Ihnen schwindelig und Sie brechen noch auf der Party vor den Augen von Mark zusammen. War da etwas in Ihrem Moscow Mule? Hätten Sie den vielleicht besser nicht unbeaufsichtigt von Mark Zuckerberg halten lassen, während Sie auf der Tanzfläche waren?
|
||||||
|
|
||||||
|
Als Sie wieder aufwachen, befinden Sie sich in einer dunklen Höhle, wahrscheinlich viele Meter unter der Erdoberfläche. Es ist feucht und tropft von der Decke, es stinkt nach Meta-Schimmel. Vor Ihnen stehen zwei Echsen, wahrscheinliche Reptiolide oder andere Außerirdische, die sich in den Höhlen unter der Erdoberfläche verstecken. Sie hatten schon immer das Gefühl, das mit Mark Zuckerberg etwas nicht stimmt; jetzt haben Sie den Beweis.
|
||||||
|
|
||||||
|
<img src="img/reptilien.png" width="260" alt="Reptiloide (KI-generiert)">
|
||||||
|
|
||||||
|
Die Echsen haben Sie nicht ohne Grund entführt; sie wollen Ihre hervorragenden Programmierkenntnisse nutzen. Das war ja klar! Die Echsen wollen in Zukunft ihre Daten besser verschlüsseln und haben zu diesem Zweck von der Firma Nahtlose Sicherheitsapplikationen (NSA) zwei Zufallszahlengeneratoren gekauft, die diese per Vibe Coding mit ChatGPT erstellt haben. Die Echsen haben allerdings den Verdacht, dass da etwas nicht stimmen könnte und da Sie so gut programmieren können, sollen Sie jetzt helfen.
|
||||||
|
|
||||||
|
Eigentlich hätten das Entwickler:innen bei Meta machen sollen, aber Mark Zuckerberg hat gerade wieder 10 % seiner Belegschaft entlassen, sodass er keine Kompetenzen mehr in der Firma hat. Er will alle seine Leute geschniegelt durch LLMs ersetzen.
|
||||||
|
|
||||||
|
Sie bekommen von den Echsen zwei Zufallszahlengeneratoren mit den Namen `SecRandomGenerator` und `SuperSecRandomGenerator`.
|
||||||
|
|
||||||
|
* [SecRandomGenerator](../sources/src/main/java/pr2/algorithmen/rnd/SecRandomGenerator.java)
|
||||||
|
* [SuperSecRandomGenerator](../sources/src/main/java/pr2/algorithmen/rnd/SuperSecRandomGenerator.java)
|
||||||
|
|
||||||
|
Die Firma NSA hat auch bereits eine Implementierung der Lösung dieser Aufgabe für einen der Generatoren (`StandardRandomGenerator`) geliefert.
|
||||||
|
|
||||||
|
* [DrawRandom](../sources/src/main/java/pr2/algorithmen/rnd/DrawRandom.java)
|
||||||
|
|
||||||
|
Diese Implementierung ist aber so kompliziert, dass wirklich niemand sie versteht und ganz offensichtlich enthält sie auch einen Fehler, denn es kommen immer nur schwarze Bilder heraus.
|
||||||
|
|
||||||
|
**Ziel**: Diese Aufgabe ist darauf ausgelegt, dass Sie ein **Large Language Model** nutzen. Sie soll dazu dienen, einen sinvollen Umgang mit LLMs einzuüben.
|
||||||
|
|
||||||
|
## Paket
|
||||||
|
|
||||||
|
Gehen Sie in das Paket [pr2.algorithmen.rnd](../sources/src/main/java/pr2/algorithmen/rnd).
|
||||||
|
|
||||||
|
|
||||||
|
## Programm verstehen
|
||||||
|
|
||||||
|
Nehmen Sie den vorhandenden Code von `DrawRandom` und versuchen Sie ihn mithilfe eines LLMs (z.B. ChatGPt) zu verstehen. Gehen Sie hierzu schrittweise vor und lassen Sie sich einzelne Konstrukte erklären. Versuchen Sie nicht, das gesamte Programm auf einmal zu analysieren, das wird Sie wahrscheinlich überfordern.
|
||||||
|
|
||||||
|
Sammeln Sie die Prompts und die Antworten des LLMs in einer Datei. Diese Datei checken Sie als `log.txt` mit in Ihre Abgabe ein.
|
||||||
|
|
||||||
|
|
||||||
|
## Programm vereinfachen
|
||||||
|
|
||||||
|
Vereinfachen Sie das Programm so, dass keine Konstrukte mehr vorkommen, die wir in der Vorlesung noch nicht behandelt haben. Nach der Vereinfachung sollte es nur noch Dinge enthalten, die Sie verstehen und erklären können. Sie können sich bei der Vereinfachung ebenfalls von einem LLM helfen lassen.
|
||||||
|
|
||||||
|
Dokumentieren Sie die Schritte, die Sie zum Verständnis des Programms und zur Vereinfachung unter Verwendung eines LLMs gemacht haben.
|
||||||
|
|
||||||
|
Hierzu gehen Sie wie folgt vor:
|
||||||
|
|
||||||
|
* Jede Vereinfachung führen Sie in einem **einzelnen commit** in Git durch.
|
||||||
|
* In die Commit-Message schreiben Sie den Prompt an das LLM, die Ausgabe des LLMs und Ihre Erkenntnisse. Verwenden Sie Markdown, damit man das ganze gut lesen kann.
|
||||||
|
|
||||||
|
Beachten Sie bei der Verwendung des LLMs die [Regeln/Guidelines](https://moodle.hs-mannheim.de/pluginfile.php/514165/mod_resource/content/2/ki_guideline_pr2.pdf), die am Anfang der Lehrveranstaltung vorgestellt wurden.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Fehler finden
|
||||||
|
|
||||||
|
Nachdem das Programm vereinfacht wurde, suchen Sie nach dem Fehler, der sich im Programm versteck und beheben Sie ihn.
|
||||||
|
|
||||||
|
Diese Korrektur bringen Sie dann wieder mit einem getrennten Commit in Git.
|
||||||
|
|
||||||
|
|
||||||
|
## Programm ausführen
|
||||||
|
|
||||||
|
Nachdem Sie ein korrektes Bild mit Javas Zufallszahlengenerator erzeugt haben, erzeugen Sie ein weiteres Bild mit dem Generator `SecRandomGenerator`, der Ihnen von den Reptiloiden gegeben wurde. Speichern Sie dieses Bild in einer Datei `secure_random.png` ab.
|
||||||
|
|
||||||
|
Jetzt führen Sie denselben Vorgang noch einmal mit dem gegebenen `SuperSecRandomGenerator` durch und speichern das Bild als `super_secure_random.png` ab.
|
||||||
|
|
||||||
|
Vergleichen Sie die drei Bilder. Was fällt Ihnen auf?
|
||||||
|
|
||||||
|
|
||||||
|
## Abgabe
|
||||||
|
|
||||||
|
Alle Abgaben für die Vorlesung erfolgen über `git` und das Ihnen zugeordnete Repository.
|
||||||
|
|
||||||
|
Hierzu gehen Sie wie folgt vor:
|
||||||
|
|
||||||
|
1. Öffnen Sie eine Kommandozeile (Terminal).
|
||||||
|
2. Gehen Sie in Ihr Working Directory.
|
||||||
|
3. Rufen Sie mit `bin/submit.sh` das Skript auf, das die Lösungen testet und kompiliert. Wenn Maven eine Fehlermeldung zeigt, beheben Sie diese zuerst, bevor Sie mit dem nächsten Schritt fortfahren.
|
||||||
|
4. Wenn Sie Meldung "✅ Projekt gebaut" bekommen, checken Sie Ihre Änderungen in `git` **auf der Kommandozeile** ein (comitten), d.h. mit `git add` und `git commit`. Verwenden Sie **nicht** Eclipse für diesen Schritt.
|
||||||
|
5. Rufen Sie mit `bin/submit.sh` erneut das Skript auf. Wenn alles klappt, bekommen Sie die Anzeige "✅ Aktuelle Lösungen eingereicht" und Ihre Lösung ist im System angekommen.
|
||||||
|
6. Überprüfen Sie über das Web-Frontend, ob alles so im Repository liegt, wie Sie es erwarten.
|
||||||
|
|
||||||
|
**Erinnerung**: Denken Sie daran, dass Sie alle **öffentlichen Methoden** mit entsprechender **Javadoc** versehen müssen. **Ausgaben** auf und **Eingaben** von der Konsole sind nur dann erlaubt, wenn der Aufgabentext es explizit verlangt.
|
||||||
21
readme.md
21
readme.md
|
|
@ -15,15 +15,16 @@ Hinweise zur nötigen Softwareausstattung finden Sie [hier](help/softwareausstat
|
||||||
|
|
||||||
Wichtige Einstellungen für Eclipse sind [hier](help/eclipse.md) beschrieben.
|
Wichtige Einstellungen für Eclipse sind [hier](help/eclipse.md) beschrieben.
|
||||||
|
|
||||||
| # | Ausgabe | Thema | Fällig am 📆 |
|
| # | Ausgabe | Thema | Fällig am 📆 |
|
||||||
|-----|------------|---------------------------------------------------------------------|----------------|
|
|-----|------------|---------------------------------------------------------------------------------------------|----------------|
|
||||||
| 1. | 17.03.2026 | [Umgebung aufsetzen](Assignment_001/readme.md) | **24.03.2026** |
|
| 1. | 17.03.2026 | [Umgebung aufsetzen](Assignment_001/readme.md) | **24.03.2026** |
|
||||||
| 2. | 17.03.2026 | [Erster Commit](Assignment_002/readme.md) | **25.03.2026** |
|
| 2. | 17.03.2026 | [Erster Commit](Assignment_002/readme.md) | **25.03.2026** |
|
||||||
| 3. | 25.03.2026 | [Stein, Papier, Schere (, Echse, Spock)](Assignment_003/readme.md) | **31.03.2026** |
|
| 3. | 25.03.2026 | [Stein, Papier, Schere (, Echse, Spock)](Assignment_003/readme.md) | **31.03.2026** |
|
||||||
| 4. | 01.04.2026 | [Zahlen zur Basis 4](Assignment_004/readme.md) | **07.04.2026** |
|
| 4. | 01.04.2026 | [Zahlen zur Basis 4](Assignment_004/readme.md) | **07.04.2026** |
|
||||||
| 5. | 08.04.2026 | [Password-Qualität](Assignment_005/readme.md) | **14.04.2026** |
|
| 5. | 08.04.2026 | [Password-Qualität](Assignment_005/readme.md) | **14.04.2026** |
|
||||||
| 6. | 15.04.2026 | [Racewars](Assignment_006/readme.md) | **28.04.2026** |
|
| 6. | 15.04.2026 | [Racewars](Assignment_006/readme.md) | **28.04.2026** |
|
||||||
| 7. | 22.04.2026 | [Live-Testat](Assignment_007/readme.md) | **22.04.2026** |
|
| 7. | 22.04.2026 | [Live-Testat](Assignment_007/readme.md) | **22.04.2026** |
|
||||||
|
| 8. | 29.04.2026 | [Ein Traum in Zucker oder kann ich dem Zufallsgenerator trauen?](Assignment_008/readme.md) | |
|
||||||
|
|
||||||
## 🏛️ Aufbau der Veranstaltung
|
## 🏛️ Aufbau der Veranstaltung
|
||||||
|
|
||||||
|
|
@ -32,7 +33,7 @@ Die folgende Tabelle zeigt Ihnen die Themen der Woche und welche Kapitel Sie bis
|
||||||
| # | 📢 Motto | 🎓 Themen | 📚 Kapitel | Übungen | 📆 bis |
|
| # | 📢 Motto | 🎓 Themen | 📚 Kapitel | Übungen | 📆 bis |
|
||||||
|----|--------------------------------------------|-------------------------------------------------------|--------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------|
|
|----|--------------------------------------------|-------------------------------------------------------|--------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------|
|
||||||
| 1 | Auffrischen, einchecken und loslegen | Auffrischung | [1][1] | [1][au_001], [2][au_002], [3][au_003], [4][au_004], [5][au_005], [6][au_006] | ¹ |
|
| 1 | Auffrischen, einchecken und loslegen | Auffrischung | [1][1] | [1][au_001], [2][au_002], [3][au_003], [4][au_004], [5][au_005], [6][au_006] | ¹ |
|
||||||
| 2 | Wie Julius Caesar programmieren | JUnit, JavaDoc, Programmierstil, Pakete, Module, JARs | [2][2], [3][3] | [1][ei_001], [2][ei_002], [3][ei_003], [4][st_001], [5][st_002] | **23.03** |
|
| 2 | Wie Julius Caesar programmieren | JUnit, Javadoc, Programmierstil, Pakete, Module, JARs | [2][2], [3][3] | [1][ei_001], [2][ei_002], [3][ei_003], [4][st_001], [5][st_002] | **23.03** |
|
||||||
| 3 | Erben und vererben | Vererbung, Überladen, Verdecken, Konstruktoren | [4][4] | [1][ve_001], [2][ve_002], [3][ve_003], [4][ve_004], [5][ve_005] | **30.03** |
|
| 3 | Erben und vererben | Vererbung, Überladen, Verdecken, Konstruktoren | [4][4] | [1][ve_001], [2][ve_002], [3][ve_003], [4][ve_004], [5][ve_005] | **30.03** |
|
||||||
| 4 | Verhaltenstherapie für Klassen | Überschreiben, Polymorphie, static, final | [4][4] | [6][ve_006], [7][ve_007], [8][ve_008], [9][ve_009], [10][ve_010], [11][ve_011], [12][ve_012] | **06.04** |
|
| 4 | Verhaltenstherapie für Klassen | Überschreiben, Polymorphie, static, final | [4][4] | [6][ve_006], [7][ve_007], [8][ve_008], [9][ve_009], [10][ve_010], [11][ve_011], [12][ve_012] | **06.04** |
|
||||||
| 5 | Mit Interfaces geht es noch abstrakter | Interfaces, abstrakte Klassen, SOLID, STUPID | [5][5] | [1][ab_001], [2][ab_002], [3][in_001], [4][in_002], [5][in_003], [6][in_004] | **13.04** |
|
| 5 | Mit Interfaces geht es noch abstrakter | Interfaces, abstrakte Klassen, SOLID, STUPID | [5][5] | [1][ab_001], [2][ab_002], [3][in_001], [4][in_002], [5][in_003], [6][in_004] | **13.04** |
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,82 @@
|
||||||
|
package pr2.algorithmen.rnd;
|
||||||
|
|
||||||
|
import java.awt.image.BufferedImage;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.stream.IntStream;
|
||||||
|
import javax.imageio.ImageIO;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Testet die verschiedenen Zufallszahlengeneratoren dadurch,
|
||||||
|
* dass ihre Verteilung geplottet wird.
|
||||||
|
*/
|
||||||
|
public class DrawRandom {
|
||||||
|
|
||||||
|
private static final int W = 100;
|
||||||
|
private static final int H = 100;
|
||||||
|
private static final int I = 5_000_000;
|
||||||
|
|
||||||
|
private static void generate(RandomGeneratorFactory factory,
|
||||||
|
String fn) throws IOException {
|
||||||
|
|
||||||
|
int n = W * H;
|
||||||
|
int p = Runtime.getRuntime().availableProcessors();
|
||||||
|
|
||||||
|
int b = I / p;
|
||||||
|
int r = I % p;
|
||||||
|
|
||||||
|
int[][] pr = IntStream.range(0, p)
|
||||||
|
.parallel()
|
||||||
|
.mapToObj(x -> {
|
||||||
|
|
||||||
|
int[] local = new int[n];
|
||||||
|
RandomGenerator generator = factory.create();
|
||||||
|
|
||||||
|
int it = b + (x < r ? 1 : 0);
|
||||||
|
|
||||||
|
for (int i = 0; i < it; i++) {
|
||||||
|
int value = generator.nextInt(n);
|
||||||
|
local[value]++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return local;
|
||||||
|
})
|
||||||
|
.toArray(int[][]::new);
|
||||||
|
|
||||||
|
// Reduce
|
||||||
|
int[] c = new int[n];
|
||||||
|
|
||||||
|
for (int[] l : pr) {
|
||||||
|
for (int i = 0; i < n; i++) {
|
||||||
|
c[i] += l[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
draw(fn, c, n);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void draw(String fn, int[] c, int n) throws IOException {
|
||||||
|
int max = Arrays.stream(c).max().orElse(1);
|
||||||
|
|
||||||
|
BufferedImage image = new BufferedImage(W, H, BufferedImage.TYPE_INT_RGB);
|
||||||
|
|
||||||
|
IntStream.range(0, n).forEach(i -> {
|
||||||
|
int x = i % W;
|
||||||
|
int y = i / W;
|
||||||
|
|
||||||
|
int gray = (int) ((c[i] / (double) max));
|
||||||
|
int rgb = gray * 65536 + gray * 256 + gray;
|
||||||
|
|
||||||
|
image.setRGB(x, y, rgb);
|
||||||
|
});
|
||||||
|
|
||||||
|
ImageIO.write(image, "png", new File(fn));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static void main(String[] args) throws Exception {
|
||||||
|
generate(StandardRandomGenerator::new, "standard_random.png");
|
||||||
|
System.out.println("Alle Bilder erfolgreich erzeugt.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
package pr2.algorithmen.rnd;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Interface for all random number generators.
|
||||||
|
*/
|
||||||
|
public interface RandomGenerator {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generate a new random number between 0 and max (excluded).
|
||||||
|
*
|
||||||
|
* @param max the maximum value (excluding) to be generated
|
||||||
|
* @return a random number between 0 and max (exclusive)
|
||||||
|
*/
|
||||||
|
int nextInt(int max);
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,14 @@
|
||||||
|
package pr2.algorithmen.rnd;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Factory für die Zufallsgeneratoren.
|
||||||
|
*/
|
||||||
|
@FunctionalInterface
|
||||||
|
public interface RandomGeneratorFactory {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Erzeugt einen neuen Generator.
|
||||||
|
* @return der Generator.
|
||||||
|
*/
|
||||||
|
RandomGenerator create();
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,33 @@
|
||||||
|
package pr2.algorithmen.rnd;
|
||||||
|
|
||||||
|
import java.util.Random;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Psst...
|
||||||
|
* Super secure and mathematically correct random number generator
|
||||||
|
*
|
||||||
|
* @author NSA
|
||||||
|
*/
|
||||||
|
public class SecRandomGenerator implements RandomGenerator {
|
||||||
|
|
||||||
|
private final Random rnd;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new instance.
|
||||||
|
*/
|
||||||
|
public SecRandomGenerator() {
|
||||||
|
rnd = new Random();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @see RandomGenerator#nextInt(int)
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public int nextInt(int max) {
|
||||||
|
// increase randomness by taking two random numbers
|
||||||
|
// and calculating the average
|
||||||
|
int a = rnd.nextInt(max);
|
||||||
|
int b = rnd.nextInt(max);
|
||||||
|
return (a + b) / 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,16 @@
|
||||||
|
package pr2.algorithmen.rnd;
|
||||||
|
|
||||||
|
import java.util.Random;
|
||||||
|
|
||||||
|
public class StandardRandomGenerator {
|
||||||
|
|
||||||
|
private final Random rnd = new Random();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @see RandomGenerator#nextInt(int)
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public int nextInt(int max) {
|
||||||
|
return rnd.nextInt(max);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,302 @@
|
||||||
|
package pr2.algorithmen.rnd;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Random;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Psst...
|
||||||
|
* Even better super secure and mathematically correct random number generator
|
||||||
|
*
|
||||||
|
* @author NSA
|
||||||
|
*/
|
||||||
|
public class SuperSecRandomGenerator implements RandomGenerator {
|
||||||
|
|
||||||
|
private static final String SEED = """
|
||||||
|
3333442547696=GAF8578AE;33689?DGECDDDA;:
|
||||||
|
8852222212135466:BK\\djhaQJHF?>DEHHHHHHHH
|
||||||
|
IJKKMNLMLLLLMNNNNOOO343222275>9986FGBA94
|
||||||
|
38@@<5269;=@DEEFHGCA<865422365333458@FRd
|
||||||
|
ijiicSOJ?=<DJJKKKKJJJJKKKJKLKLKLLMNNOONN
|
||||||
|
333344699A>9849IDA?8648<;:;:668:99<?>=98
|
||||||
|
8967547;2223479@GO[gkjkijeXSG;7<DJLKKMLL
|
||||||
|
KKKKKKJKKLKLLMNNOOON3533337:@BE?:55>FE?;
|
||||||
|
7517<779997688879987<?A@=>>@443358?GL]ck
|
||||||
|
jkijihbXM>8BFJMLLMLKLLLLLLKLKKLLMNNNOOON
|
||||||
|
4563435:CHJGA578DBG<66433589:75567;@<?AF
|
||||||
|
HLDFGDH?54567;EPXgjnljljjjhaSA:BJJKLKLLL
|
||||||
|
MMMMMMLLLMLMMNOONOOO33762326=KNIC=65@?>B
|
||||||
|
@:644455689;=>=AFLOTREOKJCO<657:>CM`glol
|
||||||
|
mjjkjije[D69IJKKKKLLMMMMMMMMMMMMMNNNNOOO
|
||||||
|
343<52346JLKB==2@??;;??=;;>@AC?88ALLMNQK
|
||||||
|
LSNRGOI5558?DJXiopqmnmjjhijhcN=5EJKKKLLL
|
||||||
|
MMMMMMMMMMMMNNNNNOOO433773422ALLF:<86C;;
|
||||||
|
758:==<<;9=@CDDHLNIPTRUOGS;457:DKTfmqqpm
|
||||||
|
llijjikifV>:@JKKLLLLMMMMMMMMMMMMNONNNOOO
|
||||||
|
8:34433348DNKC9848B88553369:;<=@?@EHIELO
|
||||||
|
MQPFOC5459=IS_mmqqpnmljjijjkh_A8@JJJKKLM
|
||||||
|
MMNMMMMMMMMMNNNOOOOO4;;5244438@DMI?88588
|
||||||
|
655788:;<?@>;?FHGHHDFJJD=;467=AP[hnoqppn
|
||||||
|
nkjjjjjjjfG8@JJJJKLMNNNMMNNNNNMNOOOOOOOO
|
||||||
|
4279344545?AEGH@5424467877::::89;CEBFDB?
|
||||||
|
AHA>8:8:=BIZelnooooonljjijijjhZ6@KKJKKLM
|
||||||
|
NNNMMNNOONNNOOOOOOOO3529774554:DAAEIB;40
|
||||||
|
2245689;;===A>?BA=<=@A;:>:AADISdlomlmnoo
|
||||||
|
mjhhhjjjjhd?ELLKKKLMMMMMMNNOONNNOOOOOOOO
|
||||||
|
34247886666AB??BFE>73212333588:?>>?=5;?<
|
||||||
|
A=;BCBFHNQailnnmklnnmlkjijjjjjeUELLLLKKL
|
||||||
|
LLLMMMNNONNOOONOOPOO333348987679A>A::=95
|
||||||
|
4433445669===<;8:><A@@CFJLMPVZfknonnmmll
|
||||||
|
mlllikkkjiiaGLKKLJGDA?=ADIJJLKJJGEFIFFLO
|
||||||
|
334334898676>D@?=785443334469<=<99;;?>CC
|
||||||
|
FJMPSVUY\\`imnnnoonmnnmmllljjjjhf\\FCA><
|
||||||
|
??889<>???@>>??AA@@?AF3333442987666;AA;=86
|
||||||
|
44444568;:8667:=@DJKRXZ]^``adgjknooponmm
|
||||||
|
mllmlljijjhfdA8::=?@9356=?>?@>@C@>?>?>?@
|
||||||
|
433334349;77459==;976655566;9777:;AGHOVX
|
||||||
|
Y\\abddeehijllnlnoommnnnmkkljhjhihS9::???
|
||||||
|
;356;>>?@AA<A?=B>=994333334458986558;<96
|
||||||
|
65456777778=AEKORUXZ]bddefghjkjjlmlmnnno
|
||||||
|
pppnmkkjiijiicA9<=?B<5349;>@><<=?<;>=98;
|
||||||
|
44433333446896557898766776678;@DHMPSUW[^
|
||||||
|
adfgghjkkkkjllmnooooppomlkjiifhfb_L;AA@D
|
||||||
|
;634;==@>=:;;9;=>8:;33444444545798665567
|
||||||
|
6555678:<AFILORUUX]`befhijkkkijillnnpopp
|
||||||
|
onmlkkihgda]YZSAB;??;7348;?<;::9789;<9::
|
||||||
|
43334455554458786567666789;=AFIKOQSTVY]_
|
||||||
|
cdffhjjjkklmnmnnmlmnlmllkjhhd]TUV]^HA?@@
|
||||||
|
;62469=99737588<9;9;34444445544346588656
|
||||||
|
6889:;>BFKNNOQRRUX[]bdgfgijlmmnonmlllkkk
|
||||||
|
klkkigfaXQSW^ceZ<=A>;83689=986487988:>;;
|
||||||
|
34455555554554466779:<=>>ADGJMOQPQQQVX\\`
|
||||||
|
deeeghknnnnoomkjiihhjjhgfecYOOX_`bfgD<A=
|
||||||
|
=52579;9864768:8<><=4445556555555444569=
|
||||||
|
>ABDEGJMNPPQQQRRVX^ceffgghkmoooonmkihgfg
|
||||||
|
hhfec\\PJNWZTU^hkU;>:<6356:6666345679:>>?
|
||||||
|
4455566654444455568<?DFHIJLOPQRQQPRUW\\a
|
||||||
|
bdffgfhijnnnnmmjhgfeffdc_SJGKNB@IP[ikh?;<
|
||||||
|
;7345;433435768;9=;?5444656665454444369;
|
||||||
|
@FHIJJMNQRRRQQTUX[`bdeffhhjjlmmmmljigfde
|
||||||
|
fd`ULLM?8>NOYdjjmQ8::764475565356568::>?
|
||||||
|
7455446666555444467;AFHJJJLOPQSSSQTTX\\ab
|
||||||
|
deffhijiklllkjiigfcccbZOLG766?_`ckmnmb:;
|
||||||
|
7565355676665689<;;A@866466777655545545;
|
||||||
|
AFIJLLLNOQRSSRRUX\\accdeghiihihhihhghggd
|
||||||
|
aa^TNMG?>FKjcimnollA;824445466556566<:;A@
|
||||||
|
FI=6666777655554455:?EHKMMMMOPQSSRTVWY^`
|
||||||
|
bdefghgfggggeffgegeb_ZQNJUWJRjhhkmnnnlU8
|
||||||
|
725533446556688;;??;HJL88678876645465569
|
||||||
|
?DIMMMNNNOQSSSSUWZ]`cccdeffeeebabcefece`
|
||||||
|
\\VRNKS_dggiilonnmn^782474444544667<;>?;
|
||||||
|
=JJS@;678877666465678?EIMLMNOMNPSTUUVX[^a
|
||||||
|
ccbbaba`_]\\YY\\^adbdc_[VSS[bdefjklnnnnm
|
||||||
|
f86546445443487;>=?=B@IKQM:767777666554467
|
||||||
|
?EHLLMMONNPRTVWXYZ^_`cba_]\\\\XTSRRTTX_a
|
||||||
|
eheb^cda`ddhlnmnnnnmj?7646554466677<CB><?<
|
||||||
|
JLRV@976787665555669@CFJLMMNONOQRTVXZ[\\
|
||||||
|
\\]^\\YYXTQOLKJLOQSX`flmkefgeefgjknnnmnnlkM
|
||||||
|
965565457788:;<A==;9LKSWK:6867766655456:
|
||||||
|
=@CIKKMLMNNOQSTVXZYXXYWROMIEGGGIJJLNS_el
|
||||||
|
pmjijkhfhghlnnnnlkiY5756644787998@?B@=;6
|
||||||
|
MLPXV=76687666566568:>CHJMMMMNNNPQSTVWTR
|
||||||
|
SQLHEDEGJLJHHGIJMWcjpqjjillklllmnnmlkjj]
|
||||||
|
87865668779:?ACAA;8;LLPVYE86889776676667
|
||||||
|
9<BFIMMNMMMMOORSUSNMNIFIKJQNLIJLIECEIO\\
|
||||||
|
elqljhiijmooooomllkja=<<:767767>??=B=;:;;
|
||||||
|
KJNUZR;86687888866667;AFJMMNONMMMNOQQIFJ
|
||||||
|
LLNQUUF=@BDLSOEEGJSaflpkihhjmnoppmlllkic
|
||||||
|
?=>=87969;<<;=<==?>EJIOTWI:7667878887775
|
||||||
|
68@GJMMMMNNMMLMIHGIOPVVTM>8GWICMSNKJJJQ[
|
||||||
|
chomiihikmnmmmlmljjdCA?;:79::==?<;<=?@??
|
||||||
|
JMOSA96777677777886559@HLMMMMMLKJJGHGINR
|
||||||
|
UVR@637HYOUWSNQQMLOU]flqmihiikmmlkmlkjif
|
||||||
|
EC==9::9;;8:;=A@>?@@JQR?8676656666788764
|
||||||
|
59AHKLOMMMKJHEEHKOQRTM@<;A=NV]VXSUWTPLMQ
|
||||||
|
XbhopliiijjjkkkkjjijMBB@;88?><=@?<;>>:73
|
||||||
|
KM;8687666666678667459@FJMMMLLLHEBGMNORR
|
||||||
|
K?CSM@J[\\^^]Z\\[VSOMNS\\elrojijighijjkjiij
|
||||||
|
R8;=>:=?;<8=;=;73479C7667676665767766764
|
||||||
|
68>CJMLMKKMJGFKMOPPK@?LSSTZ\\`^b`a_\\XTQPN
|
||||||
|
PWbhopljjhdfhjjjjjjk[346779=;9;=84456657
|
||||||
|
7565666666667:76666568;@HMMMLJKKJKNOOQOG
|
||||||
|
CIMQUX\\aabccba]YURPOQS\\cippjijgeggijjj
|
||||||
|
jjc434457;9:715665444345555666655659977655
|
||||||
|
779>EKMNNLLLMNOOOPNMNNOTX^^_dedccc_[VSQQ
|
||||||
|
QSX^djlkjjjgfeijjjjif5244446436875555444
|
||||||
|
34555667655?IIHC?::9;88<AHMNONNNOPQOPPOQ
|
||||||
|
RSTWY[`effeceda]XSPOPSVZcelqkihhgdehjjjj
|
||||||
|
h82433235674853465454444567766<NNMMKJDDA
|
||||||
|
>;88>GLNONNNOPRSPQQSTUZ\\]befggffffc_YQLM
|
||||||
|
ORU[beinnieeiifgijhig;243344677644656553
|
||||||
|
4444566675BONMLMLMMKE?88=CHLNNNOPQRSRSTU
|
||||||
|
XZ]aceegfgijige`YMLOPSTW^cfijiedljjiiiij
|
||||||
|
g<2432467877656676544445566686IKFEKOJILO
|
||||||
|
MH>8=AGJMNNOQQRSSTWZ^`accefhiiikjifbYILO
|
||||||
|
NPQQTYaceeekmllljijjg?243235786776464654
|
||||||
|
4445666576FHBEKOOMONOMH;9AFJMNOPQQRSUVY]
|
||||||
|
`bdeefhhhhjkjjgcXGJMLMMKLMTYYWbnlmlljjjj
|
||||||
|
h@2332225777678856544456666565=ICBHOOPLB
|
||||||
|
MMMH;>FKNOOPQPQSVWY\\^aceedfgghhiiifcWFIJ
|
||||||
|
KKKLLKMPSYflnmlkjjiji?132222546666648654
|
||||||
|
34555566556FEAFMONFBFHJPHAFKMNOOPPPRSVXZ
|
||||||
|
[\\abddeegghhiiecVFFJKOH@@DJPVcimllkjijj
|
||||||
|
kh>233223345755555744344444554549FDDONIEA
|
||||||
|
EGHPMJHJLMMNOOPQRSUVWWZ\\^beeeefhhhebUDB
|
||||||
|
HKG<EEIMQZeilkihieehhi=232222345634684657
|
||||||
|
344444554553:EDHOFB@DGFOMLJIJMNMNOOQQQRS
|
||||||
|
USUX[_cdeeefhgeaRD@ABA@BFMOS\\djljijjZ\\eh
|
||||||
|
f813222234475656676;44444455565647CHMGA@
|
||||||
|
?BAKNNIHIKLLMMMOOOQQSSTUXZ]_bdedfed`SHDA
|
||||||
|
B@BFJOTZ^bhkkijcS`ehb52423323336666677M_
|
||||||
|
334555555555446CKIA??ACFMOLIIIJKLLMNNOPQ
|
||||||
|
PPRSUUY\\^aacddc_ULIIHIKLMPWab`ejifaZehh
|
||||||
|
hX224223334576866:Vgf3455555555555555EKHF
|
||||||
|
FJKGBGOKFGHJJJMLMOPPPOQRSSVXZ]^``aaaZOMN
|
||||||
|
NNOMNQZcfeee]TM`hiifJ33533243315AMOD]hig
|
||||||
|
44456666665566457DJIIMQOLJMMIFFHIILLMNNN
|
||||||
|
OOOPQQSSVZ\\`aaaa[ROPPOOMNQ\\ejieXMKXdhjig
|
||||||
|
?335334448OetsrZXiii445566566666655445AH
|
||||||
|
HINQSPNLHEDEHHJKLMNNOONOPPQQSWXZ]_^`ZTRQ
|
||||||
|
PNNNOS\\adcVJMY\\bhhhe62353358MhswuwmUdf
|
||||||
|
jj4556666777755555544;GIKMOPNJHA@CEHIJIKMM
|
||||||
|
NNNNNNOOQTTV\\\\`^YUROPMMOPTSONIFR``\\ag
|
||||||
|
hga4352336cvuknsrgLehkk44566667777655555453
|
||||||
|
4;GIIIIHHA<?CDGIHJKLMNNMMMNNQRRTWY\\[XUT
|
||||||
|
POONNPJGDADLX]YZbfgg\\242633auxwuga`HOhjjl
|
||||||
|
44566667676666555424437=BDDDA>=>@ADHHHIJ
|
||||||
|
KMNNNMMNPQQRUWYXWURMMMMICA?@HNTWVV\\cfhiV
|
||||||
|
22444CrqqkbMC>IFgjnm44566677676666555443
|
||||||
|
34444557;>>>>?@DFGIKKLLMMMMNOQQQSTVUTRQK
|
||||||
|
IE?;?AFJPSSQSZcfiihF3428URW^\\T?=?=?FWok
|
||||||
|
m44556667776666554444334323325:>=><=ADFHI
|
||||||
|
ILKLLLLMPOPQRRSSRPG<9:<ACFJOPPOQVagijie9
|
||||||
|
22C__JMPXH;=<9AJIinj44455666776666554444
|
||||||
|
3344233335:;<;;<@EGGGIHJKKKMOOPQQQQQQMFD
|
||||||
|
FDBCEGILMNOT_gklkia1>Zdec\\TQNI9:@@BDHWlj
|
||||||
|
4445666666666555544444432233326:;;;;<ADE
|
||||||
|
FGHIJKKKMNOOOQOOPNMKJJIIJKLNOQRZfjkkih_[
|
||||||
|
hgijiijkd_D:D???@Afh44566676667555554444
|
||||||
|
343333222248;;<:9;?ACDFGHIIJMNNNMOOOOOML
|
||||||
|
KJKKKMMOPQXcjkjjjhefjkkjjjjhhl`E8@5969Tg
|
||||||
|
444566766675555444433333322222269;:::8:=
|
||||||
|
@ADDFGHIJLMMMMOOONNMKKKLNNOPQXcfgggggaim
|
||||||
|
mklljljjilkL966356Aa44455666665555543442
|
||||||
|
222222222223599:9887;@@@CDEFIJLLLLMMMMLL
|
||||||
|
LLLMNMOOUaeggeddcknmjjlmlllkkklc;543445O
|
||||||
|
3444556666555544432222222222222225888876
|
||||||
|
67:=>@ABFFHIIJKKKKLLLKKMLNPV^`dedbc]hnmk
|
||||||
|
mnlnllmkjjjkM242234>44444566665555445422
|
||||||
|
2222222222222256666543447;=>BCDEEHHIIIJJ
|
||||||
|
KKKMMNSV\\^__b^Wemmknolnmlmmlkjjjb<12236
|
||||||
|
64445556666544555442333222222222331145544
|
||||||
|
33322247;=@@@BACDEGIJJHIMNQTVWXYVShnmlnn
|
||||||
|
mmmnmlmmjggheQ12677544456666665555555432
|
||||||
|
22222333223332223444332221112468;==>?ABC
|
||||||
|
FGHHIJKNOONOakmnnmnoonnnoonllhehd]>23443
|
||||||
|
4545666666555544443333222223222332222333
|
||||||
|
322321112111244689<=BDEEDCCBMXclnnonmnnn
|
||||||
|
opoqqqqnmjecb\\H022434545656666555544434
|
||||||
|
44332233322232222222222222111100000112344
|
||||||
|
9<==>CUehmnmmlllnpopppqqrqqqojg^\\TJ4424
|
||||||
|
64445666666555555433333222332322222223322
|
||||||
|
2222211111221121116@JPSV]gkjlmmnmmmmnpqq
|
||||||
|
rqqqqqppnjg^TPH5233156556666566678543222
|
||||||
|
222222222234132231222122211220120015<FMR
|
||||||
|
W[chhijkkllmllnooqrrqrqpqoolkjg\\SJD82333
|
||||||
|
5655666666765454432222222222223232224412
|
||||||
|
2222201033126=HRX\\[]^bggkkmnmlklmnooopqq
|
||||||
|
oopoonkiiieaPG<6432256866766897556443332
|
||||||
|
232222232223222632222468<==@DHLSZaggghee
|
||||||
|
cbeiikmnmlklmnnonmnmllmmlifggdaVM=232468
|
||||||
|
4666666:;57753443333233322232222224>QWZX
|
||||||
|
Y\\`bbcehjkjikjikjifc^dhiiklmnnmnnllmlkj
|
||||||
|
hghhecba`_\\TO?658<CED45665587795444444323
|
||||||
|
34433223132238Qehhijihiijjmmnnnnmmkkjfc[
|
||||||
|
_ehjjkmnnnnnnkjjhgfcaa_\\YZXVTNP[f`OEFMKO
|
||||||
|
36568776966666543323334332234242Hdjjllli
|
||||||
|
hijklnoonnllkkjhdc[\\fhjklllklnmmljhedb^Z
|
||||||
|
WVSUSRNS^jlqmlaKMSZZ44687575476666644323
|
||||||
|
3333223142>]kjmmlljjkkkkjjkjjhfedaba_`^e
|
||||||
|
ikkllkjihhhhghd^[XTRQPNOT\\elppookaSTXXR
|
||||||
|
Q57877864766655654333333323354Yllmnnkllml
|
||||||
|
mljihggeeb]YTSX_cdgjjlljiihgeddc`\\ZUROM
|
||||||
|
MOP`koonlonk]YVWUXSVQ75676466566555665325
|
||||||
|
3333324Fdnmonmkkmnnljhheca`^[WSOKINVdhjl
|
||||||
|
llkhdcaaa\\YVTQNJHJQ\\ejnmlmig`VQPYWWTSTPO
|
||||||
|
57544665555554565352433424Kflnonlkkmnmmj
|
||||||
|
hb^YXYXWVQMJEFE]hjlmlif`\\[ZVTOMLGFJR]dfi
|
||||||
|
jkigd_WMOSQQQWSLHNNQ56484655444544454435
|
||||||
|
3334>Xjjlnlkjknmmkge\\SQOPQQNKE?:<<\\fhkmm
|
||||||
|
hc`URQSQLDJPX`fkjjkjea`\\QHJVQPTVVIJW^RQ
|
||||||
|
Q54466755454544464544448Ughklkjhjilmlid\\U
|
||||||
|
QLD@><;621248Wfgikkic\\RJMHLU\\gmmmlkiii
|
||||||
|
fd^WKCJTQJQSPNZZ\\ZZR^Z44555455554443455664
|
||||||
|
4B_ekkjkfgijjjhd^YSO?432354778:>Pbdilkhd
|
||||||
|
]REHO_kmnpomlihhgd^UH@GRMIKLMMU\\\\XYRUYZZ
|
||||||
|
4568664455544435565?Tiahljkkeghife^WWOA7
|
||||||
|
5787;>?BJSZ_QU\\ehhe_SMZgmnponkjkjhd^YPB?
|
||||||
|
FOMKKOSUS_]^WMQVY[YW445878754554445267Rl
|
||||||
|
mlgijjmlfghd_XTNE>?ABCEGKR\\gihgbRSX`ecaW
|
||||||
|
RdnnnnmjghgheQRI=;EMOLHOQLRSTXQLOQPTVVSJ
|
||||||
|
44356865565555468Vfllhhcgkjgfc\\ZUPGDHJLO
|
||||||
|
T[`eilkjjjj\\ORS\\_]VVhnmonkjkljib[J<:AH
|
||||||
|
KJMONQOQMQVUSVSQSTQJA=3325565655656666>`ef
|
||||||
|
dc[Ybefd]YVRLHLQX^chjmnnnmkkhjgTZ^^[XTTg
|
||||||
|
llmlkkiiifdZH<DFIHINSSMRPSMTXWUWVSSJ?<:8
|
||||||
|
1343455556678666;SZ^YWUUYZ[YTROT\\bgkmnn
|
||||||
|
ooonnmlkjih]R\\a_[UR_iijljhigc^XM?@JIFFJLN
|
||||||
|
LQRMTQORVWWTMIA@A:<833334546878999;BDHRV
|
||||||
|
]eZOMOQPWajmoonpoopppnnnmlkjhdTQYaa\\TXfg
|
||||||
|
fgff``XSNB=FMLJLIMLLKPROUVNQTSJB=:89<894
|
||||||
|
42455656<CNV^dhjjjinnmebacflooooononmnno
|
||||||
|
nnmmmljhe]OQX`b^T]bc_`\\[UOJA9;FGHOLPKKO
|
||||||
|
RQSVUSULMBC<876689646355;GPYafmmnllmlmnnn
|
||||||
|
pnmoopomnnmmlllmmmmllmlklkhdaUQWX_`ZSXYV
|
||||||
|
TRNHD<75;EIOHOMKNQTSTWWRON=6665868:<8778
|
||||||
|
TYahllmnmonnmlnoonnnonoppommmjkjkjkjlkjj
|
||||||
|
iihhhgfaZORYZ_ZSMOOLD=6555:AGKQONMNOQSSU
|
||||||
|
UVRI>:765678678<8745imjmlnqnnnlnnnppoqpp
|
||||||
|
nnpoomnkjljjjiijgiiihggedbb\\SLMST[XNJE=6
|
||||||
|
3266=AIMMMLOSRQQRSRQJD968776677788:;6643
|
||||||
|
mmooopnrnonnqpochrnmjgYJK?IQWZbdbeegehhf
|
||||||
|
gcab_ZXRMFJNPSV@5358<??HMMKIHJMOUXTPMMF=
|
||||||
|
76978788887868;94445RGJXacailpjTMD=7HLE?
|
||||||
|
?A3351:2B;8:5<7;68MFHPSVWUPJCCHJOPN9:999
|
||||||
|
;=::78:=@BDGILHFB<7767788778767767843689
|
||||||
|
""".replace("\n", "").replace(" ", "");
|
||||||
|
|
||||||
|
private final int[] seed;
|
||||||
|
private final Random rnd;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new instance.
|
||||||
|
*/
|
||||||
|
public SuperSecRandomGenerator() {
|
||||||
|
rnd = new Random();
|
||||||
|
List<Integer> ns = new ArrayList<>();
|
||||||
|
char[] ca = SEED.toCharArray();
|
||||||
|
for (int i = 0; i < ca.length; i++) {
|
||||||
|
int value = ca[i] - '0';
|
||||||
|
for (int k = 0; k < value; k++) {
|
||||||
|
ns.add(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
seed = new int[ns.size()];
|
||||||
|
for (int i = 0; i < ns.size(); i++) {
|
||||||
|
seed[i] = ns.get(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @see RandomGenerator#nextInt(int)
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public int nextInt(int max) {
|
||||||
|
if (max == SEED.length()) {
|
||||||
|
return seed[rnd.nextInt(seed.length)];
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return rnd.nextInt(max);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,29 @@
|
||||||
|
package pr2.vererbung.racewars.model;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Interface für Entitäten die von anderen Entitäten
|
||||||
|
* angegriffen werden können.
|
||||||
|
*/
|
||||||
|
public interface Angegriffener {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reduziert die Lebenspunkte des Wesens um die Damage.
|
||||||
|
* @param dmg Schaden.
|
||||||
|
*/
|
||||||
|
void reduziereLebenspunkte(double dmg);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Beschränkt den Schaden.
|
||||||
|
*
|
||||||
|
* @param dmg Schaden.
|
||||||
|
* @return Verbleibender Schaden nach der Beschränkung.
|
||||||
|
*/
|
||||||
|
double beschraenkeSchaden(double dmg);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Liefert die Rüstung des Wesens.
|
||||||
|
* @return Rüstung.
|
||||||
|
*/
|
||||||
|
int getRuestung();
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
package pr2.vererbung.racewars.model;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Interface für Entitäten die anderen Entitäten angreifen
|
||||||
|
* können.
|
||||||
|
*/
|
||||||
|
public interface Angreifer {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Greife das andere Wesen an. Der Schaden wird berechnet und beim
|
||||||
|
* gegnerischen Wesen abgezogen.
|
||||||
|
*
|
||||||
|
* @param gegner Wesen, das angegriffen werden soll.
|
||||||
|
* @return Zugefügter Schaden.
|
||||||
|
*/
|
||||||
|
double attacke(Angegriffener gegner);
|
||||||
|
}
|
||||||
|
|
@ -3,7 +3,7 @@ package pr2.vererbung.racewars.model;
|
||||||
/**
|
/**
|
||||||
* Basisklasse für alle Wesen im Spiel.
|
* Basisklasse für alle Wesen im Spiel.
|
||||||
*/
|
*/
|
||||||
public abstract class Wesen {
|
public abstract class Wesen implements Angreifer, Angegriffener {
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -13,6 +13,6 @@ public abstract class Wesen {
|
||||||
* @param gegner Wesen, das angegriffen werden soll.
|
* @param gegner Wesen, das angegriffen werden soll.
|
||||||
* @return Zugefügter Schaden.
|
* @return Zugefügter Schaden.
|
||||||
*/
|
*/
|
||||||
public abstract double attacke(Wesen gegner);
|
public abstract double attacke(Angegriffener gegner);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@ public final class WesenFactory {
|
||||||
* immer der Anführer, die folgenden dann entsprechend die Wesen der Art.
|
* immer der Anführer, die folgenden dann entsprechend die Wesen der Art.
|
||||||
* Reicht das Geld nicht, wird ein leeres Array zurückgegeben. Reicht
|
* Reicht das Geld nicht, wird ein leeres Array zurückgegeben. Reicht
|
||||||
* das Geld nicht für den Anführer, sondern nur für normale Wesen,
|
* das Geld nicht für den Anführer, sondern nur für normale Wesen,
|
||||||
* wird der Anführer übersprungen.
|
* wird ebenfalls ein leeres Array zurückgegeben.
|
||||||
* Die Art der erzeugten Wesen wählt man über einen passenden Parameter aus.
|
* Die Art der erzeugten Wesen wählt man über einen passenden Parameter aus.
|
||||||
*
|
*
|
||||||
* @param rasse Rasse, von der man Wesen erzeugen möchte
|
* @param rasse Rasse, von der man Wesen erzeugen möchte
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue