5.8 KiB
Ein Traum in Zucker oder kann ich dem Zufallsgenerator trauen?
🎓 Benotetes Assignment 🎓
📆 Fällig: 18.11.2025 📆
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.
Plötzlich wird Ihnen schwindelig und Sie brechen noch auf der Party vor den Augen von Mark zusammen. War da etwas in Ihrem Drink? 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.
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 Echsen haben allerdings den Verdacht, dass da etwas nicht stimmen könnte und da Sie so gut programmieren können, sollen Sie den Echsen helfen.
Sie bekommen von den Echsen zwei Zufallszahlengeneratoren mit den Namen SecRandomGenerator und SuperSecRandomGenerator.
Jetzt ist Ihr Interesse geweckt. Sie öffnen Ihren Editor und fangen an, die Frage, ob die Klassen wirklich zufällige Zahlen liefert, zu untersuchen.
Ziel: Ziel dieses Assignments ist es, die Verteilung von Daten über ein Bild zu visualisieren.
Paket
Gehen Sie in das Paket pr2.algorithmen.random.
Zufall zeichnen
Beschreibung des Programms
Sie sollen zeigen, ob die von SecRandomGenerator und SuperSecRandomGenerator generierten Zahlen wirklich vollkommen zufällig sind. Um die Mühe eines mathematischen Beweises zu sparen, wählen Sie einen grafischen Ansatz und stellen die Ausgaben als Bild dar.
Um Ihren Ansatz zu testen, benutzen Sie zuerst den in Java eingebauten Zufallszahlengenerator der Klasse Random. Hierzu implementieren Sie das Interface RandomGenerator mit der Klasse StandardRandomGenerator und greifen darin auf den bei Java eingebauten Zufallszahlengenerator aus java.util.Random zurück.
Schreiben Sie ein kleines Java-Programm, das die erzeugten Zufallszahlen als PNG-Bild darstellt:
- Machen Sie die Abmessungen des Bildes im Programm über Konstanten einstellbar.
- Legen Sie die Größe auf 100x100 Pixeln fest.
- Berechnen Sie viele Zufallszahlen zwischen 0 und der Anzahl der Pixel - 1.
- Färben Sie die Pixel entsprechend der Häufigkeit der Zufallszahlen mit dem jeweiligen Grau-Wert ein.
- Das Bild soll ein Graustufenbild im PNG-Format sein.
- Die Farbe jedes Pixel entspricht der Häufigkeit, dass die Zahl gezogen wurde. Je häufiger, desto heller.
Hinweis: Um ein aussagekräftiges Bild zu bekommen, müssen Sie sehr viele Zufallszahlen erzeugen. Da es nur 255 Graustufen gibt, Sie aber mehr Werte haben, müssen Sie die Häufigkeit der gezogenen Zahlen auf die Graustufenskala mappen.
Für die einfache Erzeugung von PNG-Bilder in Java bietet es sich an, auf die Klasse java.awt.image.BufferedImage zurückzugreifen. Das Speichern erfolgt über die write-Methode in javax.imageio.ImageIO. Da die Klasse BufferedImage die Farben als RGB-Werte bekommt, müssen Sie die Graustufen entsprechend auf die drei Bytes verteilen. Aus dem Graustufenwert 0xAB wird dann z.B. 0xABABAB.
Speichern Sie das Bild in einer Datei standard_random.png ab.
Nachdem Sie ein Bild mit Javas Zufallszahlengenerator erzeugt haben, erzeugen Sie ein weiteres Bild mit dem Generator SecRandomGenerator, der Ihnen zugeschickt 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.
Hierzu gehen Sie wie folgt vor:
- Öffnen Sie eine Kommandozeile (Terminal).
- Gehen Sie in Ihr Working Directory.
- Rufen Sie mit
bin/submit.shdas 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. - Wenn Sie Meldung "✅ Projekt gebaut" bekommen, checken Sie Ihre Änderungen in
gitauf der Kommandozeile ein (comitten), d.h. mitgit addundgit commit. Verwenden Sie nicht Eclipse für diesen Schritt. - Rufen Sie mit
bin/submit.sherneut das Skript auf. Wenn alles klappt, bekommen Sie die Anzeige "✅ Aktuelle Lösungen eingereicht" und Ihre Lösung ist im System angekommen.