@Override
    public Coordinate performGuess(VisibleBoard board) {

        List<EquationGroup> equationGroups = board.getEquationGroups();
        if (equationGroups.isEmpty()) {
            return null;
        }
        Map<Coordinate, Float> bestOddsByCoordinate = new HashMap<>();
        for (EquationGroup equationGroup : equationGroups) {
            for (Equation equation : equationGroup.getEquations()) {
                float odds = ((float) equation.getSum()) / equation.getVariables().size();
                for (Coordinate coordinate : equation.getVariables()) {
                    Float current = bestOddsByCoordinate.get(coordinate);
                    if (current == null || odds > current) {
                        bestOddsByCoordinate.put(coordinate, odds);
                    }
                }
            }
        }
        Coordinate guess = null;
        float bestOdds = odds;
        for (Map.Entry<Coordinate, Float> entry : bestOddsByCoordinate.entrySet()) {
            if (entry.getValue() < bestOdds) {
                bestOdds = entry.getValue();
                guess = entry.getKey();
            }
        }
        if (guess != null) {
            System.out.println("Guessing " + guess + " with odds " + bestOdds);
        }
        return guess;
    }