/*
 * "Grundkurs Programmieren in Java - Band 1 (4. Auflage, 2007)"
 * 2001-2007, Carl Hanser Verlag
 * Quelltext zu Aufgabe 12.1 (Version 4.0)
 * (c) 2001-2007 D. Ratz, J. Scheffler, D. Seese, J. Wiesenberger
 *
 */

public class Inflater extends Encoder {

  /** Verschluesselt einen String */
  public String encode(String s) {
    // Wandle den String in ein char-Array um
    // (toCharArray ist Methode der Klasse String)
    char[] c = s.toCharArray(); 
    // Initialisiere den String res,
    // der das Ergebnis enthalten soll
    String res="";
    // Wende den Algorithmus immer auf zwei Zeichen an
    for (int i=0;i<c.length-1;i=i+2) {
      char c1=c[i];   // das erste Zeichen
      char c2=c[i+1]; // das zweite Zeichen
      // Bestimme ein drittes, zufaelliges Zeichen
      char c3=(char)('a'+26*Math.random());
      // tausche c2,c1 und fuege c3 dazwischen
      res=res+c2+c3+c1;       
    }
    // Falls die Laenge des Feldes ungerade war,
    // haben wir ein Zeichen uebersehen
    if (c.length%2!=0) {
      // Dieses Zeichen muessen wir noch hinzufuegen
      res=res+c[c.length-1]; 
    }
    // Gib das Ergebnis zurueck
    return res;
  }

  /** Entschluesselt einen String */
  public String decode(String s) {
    // Wandle den String in ein char-Array um
    char[] c=s.toCharArray(); 
    // Initialisiere den String res,
    // der das Ergebnis enthalten soll
    String res="";
    // Wende den Algorithmus immer auf drei Zeichen an
    for (int i=0;i<c.length-2;i=i+3) {
      // zuerst das Zeichen c1, das ja an Stelle 3 steht
      res=res+c[i+2];
      // nun das    Zeichen c2
      res=res+c[i];
      // das Zeichen c3 faellt weg!
    }                 
    // Teste, ob ein Zeichen uebersehen wurde
    if (c.length % 3 != 0) {
      res=res + c[c.length - 1];
    }
    // Gib das Ergebnis zurueck
    return res;
  }

}
