2015 AP CS FRQ Solutions
Today the 2015 APCS FRQs were released. Here are my solutions. I did create all the extra code to test all these classes and interfaces out as well. But these are just the answers to the questions. If you want a BlueJ project with classes for testing the code, click here. If you just want to browse the classes, click here.
Question 1
//part A public static int arraySum(int[] arr) { int sum = 0; for(int n : arr) sum += n; return sum; } //part B public static int[] rowSums(int[][] arr2D) { int[] sums = new int[arr2D.length]; for(int i = 0; i < sums.length; i++) { sums[i] = arraySum(arr2D[i]); } return sums; } //part C public static boolean isDiverse(int[][] arr2D) { int[] sums = rowSums(arr2D); for(int i = 0; i < sums.length; i++) for(int j = i+1; j < sums.length; j++) if(sums[i] == sums[j]) return false; return true; }
Question 2
public class HiddenWord { private String hidden; public HiddenWord(String h) { hidden = h; } public String getHint(String hint) { String r = ""; for(int i = 0; i < hint.length(); i++) { if(hint.charAt(i) == hidden.charAt(i)) r += ""+hint.charAt(i); else if(hidden.indexOf(hint.charAt(i)) > -1) r += "+"; else r += "*"; } return r; } }
Question 3
// part A public int getValueAt(int row, int col) { for(SparseArrayEntry e : entries) { if(e.getRow() == row && e.getCol() == col) return e.getValue(); } return 0; } // part B public void removeColumn(int col) { numCols--; for(int i = entries.size()-1; i >= 0; i--) if(entries.get(i).getCol() == col) entries.remove(i); for(int i = 0; i < entries.size(); i++) if(entries.get(i).getCol() >= col) { SparseArrayEntry h = entries.get(i); SparseArrayEntry e = new SparseArrayEntry(h.getRow(),(h.getCol()-1),h.getValue()); entries.set(i, e); } }
Question 4
// part A public interface NumberGroup { public boolean contains(int num); } // part B public class Range implements NumberGroup { private int[] list; public Range(int min, int max) { list = new int[Math.abs(max-min+1)]; for(int i = 0; i < list.length; i++) list[i] = min + i; } public boolean contains(int num) { for(int n: list) if(num == n) return true; return false; } } // part C public boolean contains(int num) { for(NumberGroup n : groupList) if(n.contains(num)) return true; return false; }