/** * Set the first possible guess. This method is used during the construction process. */ @Override protected void setFirstGuess() { int i = lastGuess.length-1; for (Color color = table.manager.firstColor(); i >= 0; color = table.manager.nextColor(color)) { lastGuess[i--] = color; } }
private Color[] nextNonFirstGuess() { int i = 0; boolean guessFound = false; while (i < table.nrColumns && !guessFound) { if (manager.thereIsNextColor(lastGuess[i])) { lastGuess[i] = manager.nextColor(lastGuess[i]); guessFound = true; } else { lastGuess[i] = manager.firstColor(); i++; } } if (guessFound) { return lastGuess; } else { return none; } }
private void createOrdering() { Color[] colors = createColors(); first = colors[0]; for (int i = 0; i < nrColors - 1; i++) { successor.put(colors[i], colors[i + 1]); } }
private void createTestGame(){ final int nrColors = 6; ColorManager manager = new ColorManager(nrColors); final int nrColumns = 4; Table table = new Table(nrColumns, manager); secret = new Color[nrColumns]; Color color = manager.firstColor(); for (int i = 0; i < nrColumns; i++) { secret[i] = color; color = manager.nextColor(color); } game = new Game(table, secret); }
@Test public void noNextColorIsNullWhenThereIsOne() { ColorManager manager = new ColorManager(NR_COLORS, Color::new); Color color = manager.firstColor(); while (manager.thereIsNextColor(color)) { Assert.assertNotNull(color = manager.nextColor(color)); } }
private Guess nextIntervalStart(Color[] colors) { final int index = colors.length - 1; int step = NR_COLORS / nrThreads; if (step == 0) { step = 1; } while (step > 0) { if (manager.thereIsNextColor(colors[index])) { colors[index] = manager.nextColor(colors[index]); step--; } else { return Guess.none; } } Guess guess = new Guess(colors); while (!guess.isUnique()) { guess = guess.nextGuess(manager); } return guess; } }
@Test public void thereIsAFirstColor() { ColorManager manager = new ColorManager(NR_COLORS); System.out.println(manager.firstColor()); Assert.assertNotNull(manager.firstColor()); }
@Test public void noColorHasNoNextColor() { ColorManager manager = new ColorManager(NR_COLORS, Color::new); Assert.assertNull(manager.nextColor(Color.none)); } }
/** * Set the first possible guess. This method is used during the construction process. * This version just sets all colors to be the first color, since in this guesser * position do not need to be unique. */ @Override protected void setFirstGuess() { int i = 0; for (Color color = table.manager.firstColor(); i < lastGuess.length; ) { lastGuess[i++] = color; } }
@Test public void keepsGettingTillItBleedsOut(){ int numberOfGuesses = 0; ColorManager manager = new ColorManager(NR_COLORS); Table table = new Table(NR_COLUMNS, manager); Guesser guesser = new UniqueGuesser(table); while (guesser.guess() != Row.none) { numberOfGuesses++; } } }
private void stepTheLastColor(Color[] colors) { colors[NR_COLUMNS - 1] = manager.nextColor(colors[NR_COLUMNS - 1]); }
public ColorManager(int nrColors, ColorFactory factory) { this.nrColors = nrColors; this.factory = factory; createOrdering(); }
private Color[] createColors() { Color[] colors = new Color[nrColors]; for (int i = 0; i < colors.length; i++) { colors[i] = newColor(); } return colors; }
@Test public void allButOneColorsAndPositionsMatch() { ColorManager manager = new ColorManager(NR_COLORS); Color[] positions = new Color[NR_COLUMNS]; int i = 0; for (Color color = manager.firstColor(); i < positions.length; color = manager.nextColor(color)) { positions[i++] = color; } Row row = new Row(positions); positions[NR_COLUMNS - 1] = manager.nextColor(positions[NR_COLUMNS - 1]); row.setMatch(NR_COLUMNS - 1, 0); Assert.assertTrue(row.guessMatches(positions)); }
@Test public void noNextColorIsNullWhenThereIsOne() { ColorManager manager = new ColorManager(NR_COLORS); Color color = manager.firstColor(); while ( manager.thereIsNextColor(color)) { Assert.assertNotNull(color = manager.nextColor(color)); } }
@Test public void thereIsAFirstColor() { ColorManager manager = new ColorManager(NR_COLORS, Color::new); Assert.assertNotNull(manager.firstColor()); }
@Test public void noColorHasNoNextColor() { ColorManager manager = new ColorManager(NR_COLORS); Assert.assertNull(manager.nextColor(Color.none)); } }
@Override protected Guess firstGuess() { Color[] colors = new Color[table.nrOfColumns()]; int i = 0; for (Color color = table.manager.firstColor(); i < colors.length; ) { colors[i++] = color; } return new Guess(colors); }
@Test public void keepsGettingTillItBleedsOut() { int numberOfGuesses = 0; ColorManager manager = new ColorManager(NR_COLORS, Color::new); Table table = new Table(NR_COLUMNS, manager); Guesser guesser = new UniqueGuesser(table); while (guesser.guess() != Guess.none) { numberOfGuesses++; } } }
public ColorManager(int nrColors) { this.nrColors = nrColors; createOrdering(); }