CompSci 6 Fall 2009 Test 2 solutions (many have multiple solutions) Problem 1 // PART A public ArrayList findPositionOfAllOccurences(String dna, String reactant) { ArrayList positions = new ArrayList(); int pos = dna.indexOf(reactant); while (pos >=0) { positions.add(pos); pos = dna.indexOf(reactant, pos+1); } return positions; } public ArrayList findPositionOfAllOccurences(String dna, String nuc) { ArrayList positions = new ArrayList(); for (int k=0; k < dna.length() - nuc.length(); k++) if (nuc.equals(dna.substring(k, k + nuc.length()) positions.add(k); return positions; } // PART B public String createOneFragment (String dna, int lastPosition) { String returnString = "";; String partial = dna.substring(0,lastPosition+1); for (char ch: partial.toCharArray()) { String str = ch + ""; returnString += complement(str); } return returnString; } public String createOneFragment (String dna, int lastPosition) { String result = ""; for (int k=0; k <= lastPosition; k++) result += complement(dna.substring(k,k+1)); return result; } // PART C public String [] generateFragments(String dna, String reactant, int number) { String [] fragments = new String[number]; Random rgen = new Random(); ArrayList positions = findPositionOfAllOccurences(dna, complement(reactant)); for (int k=0; k(); for (String name: memList) myMembers.add(name); } // PART B public DookClubs (Scanner input) { myClubs = new ArrayList(); while (input.hasNext()) myClubs.add(new Club(input.nextLine(), input.nextLine())); } // PART C public ArrayList allMembers () { ArrayList members = new ArrayList(); TreeSet membersSetform = new TreeSet(); for (Club c: myClubs) { membersSetform.addAll(c.myMembers()); } for (String str: membersSetform) { members.addAll(str); } return members; } public ArrayList allMembers () { ArrayList members = new ArrayList(); for (Club c: myClubs) for (String name: c.getMembers()) if (!members.contains(name)) members.add(name); return members; } // PART D public ArrayList peopleNotInClubs (ArrayList students) { ArrayList peopleNotIn = new ArrayList(); TreeList peopleIn = new TreeSet(); peopleIn.addAll(allMembers()); for (String str: students) { if (peopleIn.contains(str)) peopleNotIn.add(str); } return peopleNotIn; } public ArrayList peopleNotInClubs (ArrayList students) { TreeSet peopleNotIn = new TreeSet(); peopleNotIn.addAll(students); peopleNotIn.removeAll(allMembers()); return new ArrayList(peopleNotIn); } Problem 3 // PART A public class LumComparator implements Comparator { // Computes the luminance of c where luminance is defined as // 0.3R + 0.59G + 0.11B private int luminance(Color c) { return (int) (0.3*c.getRed() + 0.59*c.getGreen() + 0.11*c.getBlue()); } // returns: // < 0 if the luminance of c1 is less than c2 // 0 if the luminance of c1 is equal to c2 // > 0 if the luminance of c1 is greater than c2 public int compare (Color c1, Color c2) { return luminance(c1) - luminance(c2); } // PART B public class Student extends Command { public Student () { super("Sort Colors"); } public void execute (Pixmap target) { Dimension size = target.getSize(); AverageComparator comp = new AverageComparator(); for (int j =0; j < size.width; j += 1) { // Add col to list ArrayList col = new ArrayList(); for (int i=0; i < size.height; i+= 1) col.add(target.getColor(i, j)); // sort list by luminance Collections.sort(col, comp); // Copy row back to target for (int i=0; i < size.height; i+= 1) target.setColor(i,j, col.get(i)); } } }