import java.io.*; import java.util.*; public class MastermindPlayOO { public static void main( String[] args ) throws IOException { BufferedReader rdr = new BufferedReader( new InputStreamReader( System.in )); String str = null; BoardOO board = new BoardOO(); int[] response = new int[2]; while (response[0] != BoardOO.NUM_SLOTS) { System.out.print( "Enter guess: " ); str = rdr.readLine(); board.evaluate( str.toCharArray(), response ); System.out.println( " " + response[0] + ' ' + response[1] ); } } } class BoardOO { public static final int NUM_CHOICES = 6; public static final int NUM_SLOTS = 4; private Slot[] answer = new Slot[NUM_SLOTS]; private class Slot { private char value; public Slot() { value = (char) ('a' + (int) (Math.random()*1000) % NUM_CHOICES); } public Slot( Character chObj ) { value = chObj.charValue(); } public boolean equals( Object obj ) { if (obj instanceof Slot) return value == ((Slot)obj).value; if (obj instanceof Character) return value == ((Character)obj).charValue(); return false; } public String toString() { return String.valueOf( value ); } } public BoardOO() { for (int i=0; i < NUM_SLOTS; i++) answer[i] = new Slot(); } public void evaluate( char[] guess, int[] response ) { response[0] = response[1] = 0; LinkedList guessLL = new LinkedList(); LinkedList answerLL = new LinkedList(); for (int i=0; i < NUM_SLOTS; i++) { guessLL.add( new Character( guess[i] )); answerLL.add( answer[i] ); } // compute black answer ListIterator aIt = answerLL.listIterator(0); ListIterator gIt = guessLL.listIterator(0); while (aIt.hasNext()) if (((Slot)aIt.next()).equals( (Character) gIt.next() )) { response[0]++; aIt.remove(); gIt.remove(); } // compute white answer gIt = guessLL.listIterator(0); Object obj; while (gIt.hasNext()) { if (answerLL.contains( obj = new Slot( (Character) gIt.next() ))) { response[1]++; answerLL.remove( obj ); } } } }