assignments/Assignment_008/readme.md

6.5 KiB

Ein Traum in Zucker oder kann ich dem Zufallsgenerator trauen?

🎓 Benotetes Assignment 🎓

📆 Fällig: 05.05.2026 📆

Hinweis

Beachten Sie bei der Verwendung des LLMs die Regeln/Guidelines, die am Anfang der Lehrveranstaltung vorgestellt wurden.

Szenario

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.

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.

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.

Die Firma NSA hat auch bereits eine Implementierung der Lösung dieser Aufgabe für einen der Generatoren (StandardRandomGenerator) geliefert.

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.

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 von Hand 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 aber nur für die Erklärungen.

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.

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.