import java.io.*; public class MastermindPlayDS2 { public static void main( String[] args ) throws IOException { BufferedReader rdr = new BufferedReader( new InputStreamReader( System.in )); String str = null; BoardDS2 board = new BoardDS2(); int[] response = new int[2]; while (response[0] != BoardDS2.NUM_SLOTS) { System.out.print( "Enter guess: " ); str = rdr.readLine(); board.evaluate( str.toCharArray(), response ); System.out.println( " " + response[0] + ' ' + response[1] ); } } } class BoardDS2 { public static final int NUM_CHOICES = 6; public static final int NUM_SLOTS = 4; private char[] answer = new char[NUM_SLOTS]; private int[] answerChars = new int[NUM_CHOICES]; private int[] guessChars = new int[NUM_CHOICES]; public BoardDS2() { // populate answer array with random characters for (int i=0; i < NUM_SLOTS; i++) answer[i] = (char) ('a' + (int) (Math.random()*1000) % NUM_CHOICES); // initialize the answer count array for (int i=0; i < NUM_SLOTS; i++) answerChars[ answer[i] - 'a' ]++; } public void evaluate( char[] guess, int[] response ) { response[0] = response[1] = 0; // initialize the guess count array for (int i=0; i < NUM_CHOICES; i++) guessChars[i] = 0; for (int i=0; i < NUM_SLOTS; i++) guessChars[ guess[i] - 'a' ]++; // compute black answer for (int i=0; i < NUM_SLOTS; i++) if (guess[i] == answer[i]) response[0]++; // over-compute white answer for (int i=0; i < NUM_CHOICES; i++) response[1] += Math.min( guessChars[i], answerChars[i] ); // eliminate the overlap response[1] = response[1] - response[0]; } }