From 44614904a97507b2f15cf1c5e236541f59366d54 Mon Sep 17 00:00:00 2001 From: Thomas Smits Date: Wed, 19 Nov 2025 12:35:01 +0100 Subject: [PATCH] Update of exercises --- Assignment_009/files/bild.bmp.rle | Bin 0 -> 247881 bytes Assignment_009/readme.md | 131 ++++++++++++++++++ readme.md | 1 + .../algorithmen/random/RandomGenerator.java | 2 +- .../compressor/CompressingOutputStream.java | 14 ++ .../compressor/DecompressingInputStream.java | 13 ++ .../compressor/tool/DirectoryCompressor.java | 20 +++ .../tool/DirectoryDecompressor.java | 20 +++ .../io/compressor/tool/DirectoryToolBase.java | 11 ++ .../io/compressor/tool/FileCompressor.java | 19 +++ .../io/compressor/tool/FileDecompressor.java | 19 +++ .../pr2/vererbung/racewars/model/Element.java | 7 + .../racewars/model/WesenFactory.java | 4 +- 13 files changed, 259 insertions(+), 2 deletions(-) create mode 100644 Assignment_009/files/bild.bmp.rle create mode 100644 Assignment_009/readme.md create mode 100644 sources/src/main/java/pr2/io/compressor/CompressingOutputStream.java create mode 100644 sources/src/main/java/pr2/io/compressor/DecompressingInputStream.java create mode 100644 sources/src/main/java/pr2/io/compressor/tool/DirectoryCompressor.java create mode 100644 sources/src/main/java/pr2/io/compressor/tool/DirectoryDecompressor.java create mode 100644 sources/src/main/java/pr2/io/compressor/tool/DirectoryToolBase.java create mode 100644 sources/src/main/java/pr2/io/compressor/tool/FileCompressor.java create mode 100644 sources/src/main/java/pr2/io/compressor/tool/FileDecompressor.java diff --git a/Assignment_009/files/bild.bmp.rle b/Assignment_009/files/bild.bmp.rle new file mode 100644 index 0000000000000000000000000000000000000000..6e6ee1630c35b6bb95c1dfd1e9360f4f9a88e564 GIT binary patch literal 247881 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 + +Doch leider ist die Festplatte voll und der 67 GB Download passt nicht mehr drauf. Sie müssen dringend Platz schaffen! Also suchen Sie nach Möglichkeiten, die Daten auf Ihrer Festplatte, die eigentlich eine SSD ist, zu komprimieren. + +Da kommt Ihnen die nächste PR2-Aufgabe gerade gelegen. + +## CompressingOutputStream + +Gehen Sie in das Paket [pr2.io.compressor](../sources/src/main/java/pr2/io/compressor/). + +Implementieren Sie eine Klasse namens `CompressingOutputStream`, die von `FilterOutputStream` abgeleitet ist. Diese Klasse soll eine Komprimierung der Daten durchführen, wobei ein sogenanntes _run length encoding_ verwendet werden soll. Immer wenn ein Byte zwei- oder mehrmals hintereinander vorkommt, soll statt der wiederholten Bytes, die Sequenz `-1`, das Byte und die Anzahl der Wiederholungen geschrieben werden. So wird z.B. aus der Bytefolge `{ 5, 5, 5, 5, 5, 5, 5, 5, 5 }` durch die Kompression die Folge `{ -1, 5, 9 }`. Wiederholt sich ein Byte nicht, wird es einfach direkt übernommen. Es sind maximal 126 Wiederholungen möglich. Kommt ein Byte häufiger als 126-mal hintereinander vor, werden zuerst die ersten 126 Byte komprimiert und dann die nächsten Bytes bearbeitet. (Die Bytewerte sind hier als Dezimalzahlen angegeben, `-1` würde dann in hexadezimaler Darstellung `0xff` entsprechen.) + +Beachten Sie den Spezialfall, dass die Eingabedaten eine `-1` (`0xff`) enthalten, in diesem Fall müssen Sie die Escapesequenz `{ -1, -1 }` schreiben, um dies bei der Dekompression erkennen zu können. So wird z.B. aus der Eingabe `{ 3, -1, 5 }` komprimiert `{ 3, -1, -1, 5 }`. + +Testen Sie Ihre Implementierung ausführlich mit Unit-Tests. Sie können folgende Bytefolgen als Startpunkt nehmen, sie sind aber auf keinen Fall ausreichend. + +| Input | Komprimiert | +|-----------------------------|-----------------------------| +| `0, 1, 2, 3` | `0, 1, 2, 3` | +| `-1, -1, -1` | `-1, -1, -1, -1, -1, -1` | +| `-1, 1, 2, 3` | `-1, -1, 1, 2, 3` | +| `0, 1, 1, 1, 1, 1, 1` | `0, -1, 1, 6` | +| `5, 5, 5, 5, 5, 5, 5, 5, 5` | `-1, 5, 9` | +| `0, 1, 1, 3, 3, 3, 3` | `0, -1, 1, 2, -1, 3, 4` | +| `1, 1, 3, 3, 3, 3` | `-1, 1, 2, -1, 3, 4` | +| `1, 2, 1, 3, 3, 3` | `1, 2, 1, -1, 3, 3` | +| `1, 1, -1, 1, 2, 3` | `-1, 1, 2, -1, -1, 1, 2, 3` | +| `1, 1, -1` | `-1, 1, 2, -1, -1` | +| `-1` | `-1, -1` | +| `-1, 1, 1` | `-1, -1, -1, 1, 2` | +| `1, 1, 1, 1, 1, 1, 1, 1, 1` | `-1, 1, 9` | +| `1, 1, 1, 1, -1` | `-1, 1, 4, -1, -1` | + + +## DecompressingInputStream + +Implementieren Sie eine Klasse namens `DecompressingInputStream`, die von `InputStream` abgeleitet ist. Diese Klasse soll eine Dekomprimierung der Daten durchführen, die vorher mit einem `CompressingOutputStream` komprimiert wurden. + +Testen Sie Ihre Implementierung ausführlich mit Unit-Tests. Sie können die in der obigen Tabelle dargestellten Bytefolgen als Startpunkt nehmen, sollten aber noch mehr Fälle testen. + +## FileCompressor + +Implementieren Sie eine Klasse namens `FileCompressor`. Diese nimmt von der Kommandozeile zwei Argumente an, die zwei Dateien bezeichnen. Die zuerst angegebene Datei wird mithilfe eines `CompressingOutputStream` komprimiert und das Ergebnis wird in die als zweite Option angegebene Datei geschrieben. Denken Sie an eine sinnvolle Fehlerbehandlung. + +Alternativ kann man die Klasse auch ohne Optionen aufrufen. In diesem Fall werden die Daten von der Standard-Eingabe gelesen und das komprimierte Ergebnis auf die Standard-Ausgabe geschrieben. + +Diese letzte Anforderung bedeutet, dass man z.B. das folgende machen kann: + +```console +$ echo "Duuuuuuuuuuuuduuuuuuuuuu" | \ + java -cp . pr2.io.compressor.tool.FileCompressor > \ + result.rle +``` + + +## FileDecompressor + +Implementieren Sie eine Klasse namens `FileDecompressor`. Diese nimmt von der Kommandozeile zwei Argumente an, die zwei Dateien bezeichnen. Die zuerst angegebene Datei wird mithilfe eines `DecompressingInputStreams` dekomprimiert und das Ergebnis wird in die als zweite Option angegebene Datei geschrieben. Denken Sie an eine sinnvolle Fehlerbehandlung. + +Alternativ kann man die Klasse auch ohne Optionen aufrufen. In diesem Fall werden die Daten von der Standard-Eingabe gelesen und das dekomprimierte Ergebnis auf die Standard-Ausgabe geschrieben. + +Diese letzte Anforderung bedeutet, dass man z.B. das folgende machen kann: + +```console +$ echo "Duuuuuuuuuuuuduuuuuuuuuu" | \ + java -cp . pr2.io.compressor.tool.FileCompressor | \ + java -cp . pr2.io.compressor.tool.FileDecompressor +Duuuuuuuuuuuuduuuuuuuuuu +``` + +## DirectoryCompressor + +Schreiben Sie eine Klasse namens `DirectoryCompressor`. Diese nimmt von der Kommandozeile den Namen eines Verzeichnisses entgegen und komprimiert alle darin gefundenen Dateien mit dem oben beschriebenen `FileCompressor`. Die komprimierten Dateien werden mit der Dateierweiterung `.rle` versehen, z.B. wird aus der Datei `MyFile.txt` die Datei `MyFile.txt.rle`. Die Originaldateien werden nicht verändert. + +Beachten Sie die folgenden möglichen Fehlerfälle: + + * Der Benutzer vergisst, einen Pfad anzugeben. + * Das angegebene Verzeichnis existiert nicht. + * Der angegebene Pfad ist gar kein Verzeichnis. + * Das Verzeichnis existiert, darf aber nicht gelesen werden. + * Das Verzeichnis existiert, darf aber nicht geschrieben werden. + +Darüber hinaus können noch andere Fehler auftreten, die Sie bitte entsprechend abfangen und behandeln sollen. + +Das Programm soll den Benutzer über seine Fortschritte informieren. Hierzu soll die Ausgabe ungefähr wie folgt aussehen: + +```console +Komprimiere Dateien in /Users/thomas/Temp/compressme + +f1.txt (342 Bytes) -> f1.txt.rle (23 Bytes) [6%] +f2.txt (1368 Bytes) -> f2.txt.rle (83 Bytes) [6%] +f3.txt (13680 Bytes) -> f3.txt.rle (803 Bytes) [5%] +``` + +## DirectoryDecompressor + +Implementieren Sie eine Java-Klasse namens `DirectoryDecompressor`, die die Umkehroperation zum `DirectoryCompressor` zur Verfügung stellt. Man gibt ihr über die Kommandozeile einen Verzeichnisnamen und sie dekomprimiert alle darin gefundenen Dateien, die die Endung `.rle` haben. + +Die komprimierten Dateien werden nach einer erfolgreichen Dekompression gelöscht. + +Beachten Sie, dass auch hier unterschiedliche Fehler auftreten könne, die Sie bitte entsprechend abfangen und behandeln sollten. + +Das Programm soll den Benutzer über seine Fortschritte informieren. Hierzu soll die Ausgabe ungefähr wie folgt aussehen: + +```console +Dekomprimiere Dateien in /Users/thomas/Temp/compressme2 + +f1.txt.rle (23 Bytes) -> f1.txt (342 Bytes) +f2.txt.rle (83 Bytes) -> f2.txt (1368 Bytes) +f3.txt.rle (803 Bytes) -> f3.txt (13680 Bytes) +``` + +## Geheime Datei + +Wenn Sie alles fertig implementiert haben, wenden Sie Ihre Software auf die Datei [bild.bmp.rle](files/bild.bmp.rle) an und dekomprimieren Sie sie. + + * Was ist zu sehen? + * Um welchen Faktor wurde die Datei komprimiert? + * Warum ist der Kompressionsfaktor hier so hoch? \ No newline at end of file diff --git a/readme.md b/readme.md index 0846e89..f27d593 100644 --- a/readme.md +++ b/readme.md @@ -173,6 +173,7 @@ Wichtige Einstellungen für Eclipse sind [hier](help/eclipse.md) beschrieben. | 6. | 22.10.2025 | [Racewars](Assignment_006/readme.md) | **04.11.2025** | | 7. | 05.11.2025 | [Ein Traum in Zucker oder kann ich dem Zufallsgenerator trauen?](Assignment_007/readme.md) | **18.11.2025** | | 8. | 05.11.2025 | [Live-Testat](Assignment_008/readme.md) | **19.11.2025** | +| 9. | 19.11.2025 | [Mist die Festplatte ist schon wieder voll](Assignment_009/readme.md) | **02.12.2025** | ## 😀 Freiwillige Übungen Die freiwilligen Übungen zur Vertiefung der Vorlesungsinhalte finden Sie in einem getrennten Repository: [Freiwillige Übungen](/pr2-lecture/uebungen/src/branch/master/readme.md). diff --git a/sources/src/main/java/pr2/algorithmen/random/RandomGenerator.java b/sources/src/main/java/pr2/algorithmen/random/RandomGenerator.java index f4522a2..e538738 100644 --- a/sources/src/main/java/pr2/algorithmen/random/RandomGenerator.java +++ b/sources/src/main/java/pr2/algorithmen/random/RandomGenerator.java @@ -6,7 +6,7 @@ package pr2.algorithmen.random; public interface RandomGenerator { /** - * Generate a new random number between 0 and max (excluded). + * 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) diff --git a/sources/src/main/java/pr2/io/compressor/CompressingOutputStream.java b/sources/src/main/java/pr2/io/compressor/CompressingOutputStream.java new file mode 100644 index 0000000..e685458 --- /dev/null +++ b/sources/src/main/java/pr2/io/compressor/CompressingOutputStream.java @@ -0,0 +1,14 @@ +package pr2.io.compressor; + +import java.io.FilterOutputStream; +import java.io.IOException; +import java.io.OutputStream; + +/** + * Stream implementation that performs an automatic run-length + * encoding of the written data. + */ +public class CompressingOutputStream { + + // TODO: Klasse implementieren +} diff --git a/sources/src/main/java/pr2/io/compressor/DecompressingInputStream.java b/sources/src/main/java/pr2/io/compressor/DecompressingInputStream.java new file mode 100644 index 0000000..637e0d9 --- /dev/null +++ b/sources/src/main/java/pr2/io/compressor/DecompressingInputStream.java @@ -0,0 +1,13 @@ +package pr2.io.compressor; + +import java.io.IOException; +import java.io.InputStream; + +/** + * Stream that automatically decompresses data that was compressed + * with the {@link CompressingOutputStream}. + */ +public class DecompressingInputStream { + + // TODO: Klasse implementieren +} diff --git a/sources/src/main/java/pr2/io/compressor/tool/DirectoryCompressor.java b/sources/src/main/java/pr2/io/compressor/tool/DirectoryCompressor.java new file mode 100644 index 0000000..d5d43de --- /dev/null +++ b/sources/src/main/java/pr2/io/compressor/tool/DirectoryCompressor.java @@ -0,0 +1,20 @@ +package pr2.io.compressor.tool; + +import java.io.File; +import java.io.FileFilter; + +/** + * Compresses the content of a directory. + */ +public class DirectoryCompressor extends DirectoryToolBase { + + public static void main(String[] args) throws Exception { + + if (args.length != 1) { + System.err.println("Bitte geben Sie ein Verzeichnis an."); + System.exit(1); + } + + // TODO: Methode implementieren + } +} diff --git a/sources/src/main/java/pr2/io/compressor/tool/DirectoryDecompressor.java b/sources/src/main/java/pr2/io/compressor/tool/DirectoryDecompressor.java new file mode 100644 index 0000000..0d1fccb --- /dev/null +++ b/sources/src/main/java/pr2/io/compressor/tool/DirectoryDecompressor.java @@ -0,0 +1,20 @@ +package pr2.io.compressor.tool; + +import java.io.File; +import java.io.FileFilter; + +/** + * Decompresses the content of a directory. + */ +public class DirectoryDecompressor extends DirectoryToolBase { + + public static void main(String[] args) throws Exception { + + if (args.length != 1) { + System.err.println("Bitte geben Sie ein Verzeichnis an."); + System.exit(1); + } + + // TODO: Methode implementieren + } +} diff --git a/sources/src/main/java/pr2/io/compressor/tool/DirectoryToolBase.java b/sources/src/main/java/pr2/io/compressor/tool/DirectoryToolBase.java new file mode 100644 index 0000000..84b31c0 --- /dev/null +++ b/sources/src/main/java/pr2/io/compressor/tool/DirectoryToolBase.java @@ -0,0 +1,11 @@ +package pr2.io.compressor.tool; + +import java.io.File; + +/** + * Base class for all directory based tools. + */ +public class DirectoryToolBase { + + // TODO: Gemeinsame Methoden für DirectoryCompressor und DirectoryDecompressor +} diff --git a/sources/src/main/java/pr2/io/compressor/tool/FileCompressor.java b/sources/src/main/java/pr2/io/compressor/tool/FileCompressor.java new file mode 100644 index 0000000..f1671f9 --- /dev/null +++ b/sources/src/main/java/pr2/io/compressor/tool/FileCompressor.java @@ -0,0 +1,19 @@ +package pr2.io.compressor.tool; + +import pr2.io.compressor.CompressingOutputStream; + +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.InputStream; +import java.io.OutputStream; + +/** + * Compresses a single file or stdin. + */ +public class FileCompressor { + + public static void main(String... args) throws Exception { + + // TODO: Methode implementieren + } +} diff --git a/sources/src/main/java/pr2/io/compressor/tool/FileDecompressor.java b/sources/src/main/java/pr2/io/compressor/tool/FileDecompressor.java new file mode 100644 index 0000000..dad8374 --- /dev/null +++ b/sources/src/main/java/pr2/io/compressor/tool/FileDecompressor.java @@ -0,0 +1,19 @@ +package pr2.io.compressor.tool; + +import pr2.io.compressor.DecompressingInputStream; + +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.InputStream; +import java.io.OutputStream; + +/** + * Decompresses a single file or stdin. + */ +public class FileDecompressor { + + public static void main(String... args) throws Exception { + + // TODO: Methode implementieren + } +} diff --git a/sources/src/main/java/pr2/vererbung/racewars/model/Element.java b/sources/src/main/java/pr2/vererbung/racewars/model/Element.java index 7f53d7a..0fed137 100644 --- a/sources/src/main/java/pr2/vererbung/racewars/model/Element.java +++ b/sources/src/main/java/pr2/vererbung/racewars/model/Element.java @@ -2,7 +2,14 @@ package pr2.vererbung.racewars.model; /** * Die Klasse repräsentiert die vier Elemente. + *
    + *
  • Feuer ist Luft überlegen,
  • + *
  • Wasser ist Feuer überlegen,
  • + *
  • Erde ist Wasser überlegen,
  • + *
  • Luft ist Erde überlegen.
  • + *
*/ public final class Element { + } diff --git a/sources/src/main/java/pr2/vererbung/racewars/model/WesenFactory.java b/sources/src/main/java/pr2/vererbung/racewars/model/WesenFactory.java index 9aa938c..6dee8a6 100644 --- a/sources/src/main/java/pr2/vererbung/racewars/model/WesenFactory.java +++ b/sources/src/main/java/pr2/vererbung/racewars/model/WesenFactory.java @@ -10,7 +10,9 @@ public final class WesenFactory { * Der Methode übergibt man die Information, wie viel Geld man investieren * möchte, und sie gibt ein Array von Wesen zurück. Das erste Element ist * immer der Anführer, die folgenden dann entsprechend die Wesen der Art. - * Reicht das Geld nicht, wird ein leeres Array zurückgegeben. + * 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, + * wird der Anführer übersprungen. * Die Art der erzeugten Wesen wählt man über einen passenden Parameter aus. * * @param rasse Rasse, von der man Wesen erzeugen möchte