from operator import itemgetter
from math import sqrt


def get_strategy(number_pirates, number_coins):
    satisfactory_offers = [[0], [0], [0, number_coins + 1], [0, 0, 0],
                           [0, 0, 1, 1], [0, 0, 1, 2, 0]]
    while len(satisfactory_offers) <= number_pirates:
        strategy_previous = satisfactory_offers[-1]
        votes_required = len(satisfactory_offers) / 2 + 1
        strategy_next = [0] + strategy_previous
        sorting_list = [
            list(a) for a in zip(strategy_previous, range(len(strategy_next)))
        ]
        sorting_list[0][0] = number_coins
        sorting_list.sort()
        for i in range(0, votes_required - 1):
            sorting_list[i][0] += 1
        for i in range(votes_required - 1, len(sorting_list)):
            sorting_list[i][0] = 0
        sorting_list.sort(key=itemgetter(1))
        sorting_list[0][0] = 0
        strategy_next = [0] + [a[0] for a in sorting_list]
        satisfactory_offers.append(strategy_next)
    b_strategy = list(satisfactory_offers[number_pirates])
    b_strategy[0] = number_coins - sum(b_strategy)
    return b_strategy


def verify(number_pirates, number_coins, strategy):
    try:
        strategy = [int(a) for a in strategy.split(',')]
        if not len(strategy) == number_pirates:
            return None
        if not sum(strategy) == number_coins:
            return None
        b_strategy = get_strategy(number_pirates - 1, number_coins)
        a_strategy = get_strategy(number_pirates, number_coins)
        votes = [b < a for (a, b) in zip(strategy[1:], b_strategy)]
        votes = [True] + votes
        votes_count = sum(votes)
        distance = sqrt(sum(
            (a - b)**2 for (a, b) in zip(strategy, a_strategy)))
        print(strategy)
        print(b_strategy)
    except:
        return None

    return votes, votes_count, distance
