public class Comparison {
  private static int a, b, c;

  private static void printDouble(double ratio) {
    String display = ((new Double(ratio)).toString() + "     ").substring(0, 4);
    if (ratio == 0.0 || display.equals("0.00")) {
      System.out.print("     ");
    } else {
      System.out.print(" " + display);
    }
  }

  private static void sortThree(int x, int y, int z) {
    int u, v;
    if (x<y) {
      u=x;
      v=y;
    } else {
      u=y;
      v=x;
    }

    if (z<u) {
      a=z;
      b=u;
      c=v;
    } else if (z<v) {
      a=u;
      b=z;
      c=v;
    } else {
      a=u;
      b=v;
      c=z;
    }
  }

  private static void showGenetic(int x, int y) {
    sortThree(x, y, 5);
    if (a*a + b*b == c*c) {
      printDouble(1.0);
    } else {
      printDouble(0.0);
    }
  }

  private static void showGeneticRandom(int lo, int hi) {
    if (lo > hi) {
      printDouble(0.0);
    } else {
      int total = 0;
      int hits = 0;
      for (int x=lo; x<=hi; x++) {
        for (int y=lo; y<=hi; y++) {
          total++;
          sortThree(x, y, 5);
          if (a*a + b*b == c*c) {
            hits++;
          }
        }
      }
      double ratio = ((double) hits) / ((double) total);
      printDouble(ratio);
    }
  }

  public static void main(String args[]) {

    System.out.println("Genetic only:\n");
    System.out.print("x/y");
    for (int y=1; y<=20; y++) {
      System.out.print(("   " + y + "   ").substring(0, 5));
    }
    System.out.println("");
    for (int x=1; x<=20; x++) {
      System.out.print((x + "    ").substring(0,4));
      for (int y=1; y<=20; y++) {
        showGenetic(x, y);
      }
      System.out.println("");
    }

    System.out.println("\nGenetic/Random:\n");
    System.out.print("l/h");
    for (int h=1; h<=20; h++) {
      System.out.print(("   " + h + "   ").substring(0, 5));
    }
    System.out.println("");
    for (int l=1; l<=20; l++) {
      System.out.print((l + "    ").substring(0,4));
      for (int h=1; h<=20; h++) {
        showGeneticRandom(l, h);
      }
      System.out.println("");
    }
  }
}
