// Program to test solutions to problem #8 on the cse142 midterm, spring 2018. import java.util.*; public class Q8Verifier { // **ENTER YOUR SOLUTION HERE** public static int filter(int num, int d) { } // this is the sample solution public static int filterSln(int num, int d) { int result = 0; int multiplier = 1; while (num > 0) { int dig = num % 10; if (dig != d) { result += multiplier * dig; multiplier *= 10; } num /= 10; } return result; } private static int count, failCount; private static Random r; public static final int ERRORS_MAX = 20; public static void main(String[] args) { failCount = 0; r = new Random(); for (int i = 1; i <= 8; i++) { test(i); } if (failCount == 0) { System.out.println("PASSED all " + count + " tests"); } } // public/private kickoff: i represents size of number to test in digits public static void test(int i) { int[] data = new int[i]; test(data, 0); } // private half: if check is base case where we have generated // a number, stored in data, that we want to test. // // else branch is a recursive case to pick numbers that // contain spurts of the same digits, of differing lengths private static void test(int[] data, int index) { if (index == data.length) { for (int d = 0; d < 10; d++) { count++; int num = 0; for (int i = 0; i < data.length; i++) { num *= 10; num += data[i]; } boolean fail = false; RuntimeException except = null; int result1 = 0, result2 = 0; try { System.out.println("Testing num = " + num + ", d = " + d); result1 = filter(num, d); } catch (RuntimeException e) { fail = true; except = e; } result2 = filterSln(num, d); fail = fail || result1 != result2; if (fail) { if (except != null) { StackTraceElement[] trace = except.getStackTrace(); int line = trace[0].getLineNumber(); System.out.println("FAIL with exception for num=" + num + ", d=" + d + " at line#" + line); } else { System.out.println("FAIL for num=" + num + ", d=" + d); } System.out.println("Correct: " + result2); System.out.println("Theirs: " + result1); System.out.println(); failCount++; if (failCount > ERRORS_MAX) { System.out.println("exceeds " + ERRORS_MAX + " errors"); System.out.println("with " + count + " correct"); System.exit(0); } } } } else { for (int i = 1; i <= data.length - index; i++) { int digit = r.nextInt(10); for (int j = index; j < index + i; j++) { data[j] = digit; } test(data, index + i); } data[index] = r.nextInt(10); test(data, index + 1); } } }