Skip to content
Snippets Groups Projects
Code.java 2.28 KiB
Newer Older
  • Learn to ignore specific revisions
  • Sarah CHERCHEM's avatar
    Sarah CHERCHEM committed
    package src;
    
    
    import java.util.Random;
    
    
    Sarah CHERCHEM's avatar
    Sarah CHERCHEM committed
    public class Code {
    
        public static final int CODE_LENGTH = 4;
        public static char[] COLORS = new char[]{'B','G','O','R','W','Y'};
        private final  char[] codeWord = new char[CODE_LENGTH];
    
        public Code(Random random){
            for (int i = 0; i < CODE_LENGTH; i++) {
                codeWord[i] = COLORS[random.nextInt(COLORS.length)];
            }
        }
    
        public Code(String codeString){
            assert(codeString.length() == CODE_LENGTH);
            for(int i=0; i<CODE_LENGTH; i++)
                codeWord[i] = codeString.charAt(i);
        }
    
        @Override
        public String toString() {
            return new String(codeWord);
        }
    
        /**
         * return the number of colors of guess that are correctly positioned
         */
        public int numberOfColorsWithCorrectPosition(Code guess){
            int count = 0;
            for(char color : COLORS){
                count += numberOfMatches(color, guess);
            }
            return count;
        }
    
        /**
         * return the number of colors of guess that are in this codeWord
         * but do not have the correct position
         */
        public int numberOfColorsWithIncorrectPosition(Code guess){
            int count = 0;
            for(char color:COLORS){
                int nMatchedOccurrences = numberOfMatches(color, guess);
                int nUnmatchedOccurrencesCode  = numberOfOccurrences(color, this) - nMatchedOccurrences;
                int nUnmatchedOccurrencesGuess = numberOfOccurrences(color, guess) - nMatchedOccurrences;
                count += Math.min(nUnmatchedOccurrencesCode, nUnmatchedOccurrencesGuess);
            }
            return count;
        }
    
    
        private int numberOfOccurrences(char color, Code code){
            int count = 0;
            for (int i = 0; i < CODE_LENGTH; i++) {
                if (code.codeWord[i] == color) count++;
            }
            return count;
        }
    
        private int numberOfMatches(char color, Code guess){
            int count = 0;
            for (int i = 0; i < CODE_LENGTH; i++) {
                if ((this.codeWord[i] == guess.codeWord[i]) && (this.codeWord[i] == color)){
                    count++;
                }
            }
            return count;
        }
    
        @Override
        public boolean equals(Object o){
            if (o == null) return false;
            if (!(o instanceof Code)) return false;
            return this.toString().equals(o.toString());
        }
    
    Sarah CHERCHEM's avatar
    Sarah CHERCHEM committed
    }