// ArrayList utils: could be moved to AList. Object randomOneOf(ArrayList a) { return a.get(randomInt(a.size())); } Object lastOf(ArrayList a) { return a.get(a.size()-1); } Object firstOf(ArrayList a) { return a.get(0); } Object minOf(ArrayList a) { return Collections.min(a); } int minIndexOf(ArrayList a) { return a.indexOf(minOf(a)); } Object maxOf(ArrayList a) { return Collections.max(a); } int maxIndexOf(ArrayList a) { return a.indexOf(maxOf(a)); } ArrayList randomNOf(ArrayList a, int n) { // could return List, but... ArrayList b = (ArrayList)a.clone(); java.util.Collections.shuffle(b); return new ArrayList(b.subList(0,n)); } void removeAll(ArrayList a, Object o) { while(a.remove(o)) ; } // Random int/color utils int randomInt(int f) { // return random int i in [0,n) return floor(random (f)); } int randomInt(int f1, int f2) { // return random int i in [0,n) return floor(random (f1, f2)); } color randomBrightColor() { int r = 255*round(random(1)); int g = 255*round(random(1)); int b = 255*round(random(1)); if (r == g && g == b && b == 0) { return randomBrightColor(); } return color(r,g,b); } // Turn arrays into strings, mainly for printing. String toString(int[] a) { String s = "["; for(int i = 0; i