content: /*************************************************************************
   *  Compilation:  javac Genome.java
   *  Execution:    java Genome - < input.txt   (compress)
   *  Execution:    java Genome + < input.txt   (expand)
   *  Dependencies: BinaryIn.java BinaryOut.java
   *
   *  Compress or expand a genomic sequence using a 2-bit code.
   *
   *  % more genomeTiny.txt
   *  ATAGATGCATAGCGCATAGCTAGATGTGCTAGC
   *
   *  % java Genome - < genomeTiny.txt | java Genome +
   *  ATAGATGCATAGCGCATAGCTAGATGTGCTAGC
   *
   *************************************************************************/
  
  public class Genome {
  
      public static void compress() { 
          Alphabet DNA = new Alphabet("ACTG");
          String s = BinaryStdIn.readString();
          int N = s.length();
          BinaryStdOut.write(N);
  
          // Write two-bit code for char. 
          for (int i = 0; i < N; i++) {
              int d = DNA.toIndex(s.charAt(i));
              BinaryStdOut.write(d, 2);
          }
          BinaryStdOut.close();
      } 
  
      public static void expand() {
          Alphabet DNA = new Alphabet("ACTG");
          int N = BinaryStdIn.readInt();
          // Read two bits; write char. 
          for (int i = 0; i < N; i++) {
              char c = BinaryStdIn.readChar(2);
              BinaryStdOut.write(DNA.toChar(c));
          }
          BinaryStdOut.close();
      }
  
  
      public static void main(String[] args) {
          if      (args[0].equals("-")) compress();
          else if (args[0].equals("+")) expand();
          else throw new RuntimeException("Illegal command line argument");
      }
  
  }
  