Disallow any board that has insufficient tile count to solve.

def _is_impossible_by_count(self, state):
        """Disallow any board that has insufficient tile count to solve."""
        # count all the tile types and name them for readability
        counts = {tile_type: 0 for tile_type in base.Tile._all_types}
        standard_wildcard_type = '2'
        for p, tile in state.board.positions_with_tile():
            # count all wildcards as one value
            tile_type = tile._type
            try:
                int(tile_type)
                counts[standard_wildcard_type] += 1
            except ValueError:
                counts[tile_type] += 1
        skullbomb = counts['*']
        skull = counts['s']
        wildcard = counts[standard_wildcard_type]
        red = counts['r']
        green = counts['g']
        blue = counts['b']
        yellow = counts['y']
        exp = counts['x']
        money = counts['m']
        # always allow skullbomb with enough skulls
        if skullbomb and skullbomb + skull >= 3:
            return False
        # always allow wildcard with enough of one color
        if wildcard:
            if any(wildcard + color >= 3
                   for color in (red, green, blue, yellow)):
                return False
        # disallow simple cases since special cases didn't occur
        if any(tile and tile < 3 for tile in (red, green, blue, yellow,
                                              exp, money, skull)):
            return True
        # allow the state if counts seem ok
        return False