Key to CSE142 Final, Spring 2017         handout #19
1.
    4 [9, 20, 30, 41]
    1 [9, 20, 30, 41]
    2 0
2.
    Original List                   Final List
    --------------------------------------------------------------
    {0, 2, 3}                       {0, 2, 5}
    {1, 1, 4, 5}                    {1, 1, 3, 7}
    {3, 1, 2, 9, 5}                 {3, 1, 3, 7, 5}
    {5, 1, 1, 1, 8}                 {5, 1, 3, 7, 8}
    {2, 1, 1, 2, 3, 4}              {2, 1, 3, 7, 3, 7}
3.
    marty
    marty 1
    stuart 2
    stuart
    stuart 1
    stuart 2
    marty
    zorah 1
    stuart 2
    stuart
    stuart 1
    riley 2
4.
public static void runningStats(Scanner input) {
    while (input.hasNext()) {
        String name = input.next();
        int counter = 0;
        int sum = 0;
        while (input.hasNextInt()) {
            int next = input.nextInt();
            sum += next;
            counter++;
        }
        System.out.println(name + " ran " + counter + " laps in " +
            sum + " seconds");
        System.out.println("average lap time: " + (double) sum / counter);
    }
}
5.
public static void familyData(Scanner input) {
      int families = 0;
      while (input.hasNextLine()) {
          families++;
          String family = input.nextLine();
          int plusIndex = family.indexOf("+");
          String parent1 = family.substring(0, plusIndex);
          String parent2 = family.substring(plusIndex + 1);
          System.out.println(parent1 + " and " + parent2);
          String kids = input.nextLine();
          Scanner kidScan = new Scanner(kids);
          System.out.print("offspring: ");
          int count = 0;
          while (kidScan.hasNext()) {
              System.out.print(kidScan.next() + " ");
              count++;
          }
          System.out.println("(" + count + " total)");
      }
      System.out.println("total families: " + families);
  }
6.
public static boolean containsTriple(int[] list) {
    for (int i = 0; i < list.length - 2; i++) {
        if (list[i] == list[i + 1] && list[i + 1] == list[i + 2]) {
            return true;
        }
    }
    return false;
}
7. Several Solutions:
public static void collapse(ArrayList list) {
    for (int i = 0; i < list.size() - 1; i++) {
        int sum = list.get(i) + list.get(i + 1);
        list.set(i, sum);
        list.remove(i + 1);
    }
}
public static void collapse(ArrayList list) {
    for (int i = 0; i < list.size() - 1; i++) {
       list.add(i, list.remove(i) + list.remove(i));
    }
}
public static void collapse(ArrayList list) {
    for (int i = 0; i < list.size() - 1; i++) {
        list.set(i, list.remove(i) + list.get(i));
    }
}
8.
public class Vulture extends Critter {
    private int count;
    private int max;
    private boolean infected;
    public Vulture() {
        Random r = new Random();
        max = r.nextInt(6) + 1;
        infected = false;
        count = 0;
    }
    public String toString() {
        return "V";
    }
    public Color getColor() {
        if (infected) {
            return Color.BLUE;
        } else {
            return Color.BLACK;
        }
    }
    public Action getMove(CritterInfo info) {
        if (info.getFront() == Neighbor.OTHER) {
            infected = true;
            return Action.INFECT;
        } else {
            infected = false;
            if (count < max) {
                count++;
                return Action.HOP;
            } else {
                count = 0;
                return Action.LEFT;
            }
        }
    }
}
9.
public static int[] insertMirror(int[] list1, int[] list2, int index) {
    int[] result = new int[list1.length + list2.length * 2];
    for (int i = 0; i < index; i++) {
        result[i] = list1[i];
    }
    for (int i = 0; i < list2.length; i++) {
        result[i + index] = list2[list2.length - 1 - i];
        result[i + index + list2.length] = list2[i];
    }
    for (int i = index; i < list1.length; i++) {
        result[i + list2.length * 2] = list1[i];
    }
    return result;
}
10. Several Solutions:
public static void moveToBack(int[] list, int n) {
    for (int i = list.length - 2; i >= 0; i--) {
        if (list[i] == n) {
            for (int j = i; j < list.length - 1; j++) {
                list[j] = list[j + 1];
            }
            list[list.length - 1] = n;
        }
    }
}
public static void moveToBack(int[] list, int n) {
    int numNonN = 0;
    for (int i = 0; i < list.length; i++) {
        if (list[i] != n) {
            list[numNonN] = list[i];
            numNonN++;
        }
    }
    for (int i = numNonN; i < list.length; i++) {
        list[i] = n;
    }
}