1114 dekomp Das Runlength Verfahren (dekomprimieren)
Kategorie:String
Klasse:schwer
Eingabe:String
Ausgabe:String
Abzugebende Files: dekomp.txt, dekomp.java

Kurzbeschreibung:

Ein komprimierter String soll entpackt werden.

Allgemeine Hinweise:

Aufgabenstellung:

Ihr Programm soll einen String einlesen, der nach dem Runlength-Verfahren codiert ist, diesen decodieren und das Ergebnis dieser Dekomprimierung ausgeben.

Diese Codierung funktioniert wie folgt: Zeichen, die im String wiederholt vorkommen, werden durch eine nachgestellte Ziffer "vervielfacht". Dazu wird zwischen zwei "Betriebsarten" unterschieden:

Im Singlemodus werden die Zeichen so übernommen, wie sie im Eingabestring stehen; im Multimodus hingegen durch das Nachstellen einer Ziffer, die die Häufigkeit angibt, vervielfacht. Der Übergang zwischen Single- und Multimodus wird durch das Trennzeichen ' (einfaches Hochkomma) markiert; wenn dieses Zeichen im Eingabestring vorkommt, so wird dies durch Verdoppelung '' (zwei einfache Hochkomma hintereinander) dargestellt.

Am Anfang jedes Datensatzes ist das Programm im Singlemodus; der Multimodus wird nur verwendet, wenn tatsächlich mehrere gleiche Zeichen hintereinanderauftreten. Wenn mehrere Gruppen gleicher Zeichen unmittelbar aufeinanderfolgen, so wird nur einmal in den Multimodus umgeschalten und erst beim nächsten "Einzelgänger" zurückgeschalten.
Die einzelnen Stringzeichen darf keine Ziffern enthalten, da diese dieses einfache Verfahren der Kodierung stören.

Eingabedaten:

Lesen Sie einen String mit einer maximalen Länge von 30 Zeichen ein. Längere Strings sind als fehlerhafte Daten zu bewerten.

Ausgabedaten:

Bei korrekten Eingabesätzen soll Ihr Programm das Ergebnis der Decodierung, gefolgt von einem Zeilenvorschub, ausgeben.

Fehlerbehandlung:

Generell wird bei fehlerhaften Eingabedatensätzen nur eine einzige Fehlermeldung erzeugt, weitere Berechnungen werden nicht mehr durchgeführt.

Sind die eingegebenen Daten nicht korrekt (z.B. nicht entschlüsselbar) oder erfüllen nicht die Bedingungen, so soll Ihr Programm "FALSCHE EINGABE", gefolgt von einem Zeilenvorschub, ausgeben.

Beispiele:

Eingabedaten
a'b3'ab

abcde

Ausgabedaten
abbbab

abcde

Bemerkung: Diese Beispiele dienen nur zur Verdeutlichung der Spezifikation und müssen nicht korrekt formatiert sein. Die korrekte Formatierung entnehmen Sie bitte dem mitgelieferten Outputfile. Zum Testen Ihrer Lösung können Sie aus den mitgelieferten Eingabedaten wie folgt eine Ausgabedatei erzeugen:

java dekomp < dekomp.i1 > dekomp.out1

Das erzeugte File dekomp.out1 können Sie dann mit dem mitgelieferten Outputfile dekomp.o1 vergleichen.