Монетная кооперация

В стену вмонтирован специальный аппарат, выдающий монетки. За стеной с каждой стороны стоит человек. Оба они могут взаимодействовать с аппаратом.

Если бросить монетку в аппарат, человек, стоящий за стеной, получит 3 монетки. И наоборот.

Иллюстрация пользования аппаратом. Зеленый человечек тратит монетку, а красный - нет. Красный получает 3 дополнительные монетки.

Если оба человека будут честно тратить свои монетки, чтобы второй получил прибыль (т.е. делиться, share), оба они будут получать по 2 монетки прибыли по очереди.

Но всегда есть вероятность, что кто-то поступит эгоистично (steal): не захочет тратить свои монетки, но с радостью заберет 3 монетки прибыли, если второй поделится.

Задание

Допустим, у каждого человека есть по 3 монетки. Создайте функцию, которая будет высчитывать прибыль обоих людей. На вход функция будет принимать два списка строк. Списки будут представлять поведение этих людей (слова share и/или steal)

Примеры

 balances(["share"], ["share"]) ➞ [5, 5]
 # Оба человека тратят по монетке и получают по 3.
 
 get_coin_balances(["steal"], ["share"]) ➞ [6, 2]
 # Первый человек получает 3 монетки, второй тратит одну.
 
 get_coin_balances(["steal"], ["steal"]) ➞ [3, 3]
 # Никто ничего не тратит и не получает, остаются при своих.
 
 get_coin_balances(["share", "share", "share"], ["steal", "share", "steal"]) ➞ [3, 11]

Примечания

  • В «минус» никто не уйдет, так что числа всегда будут положительными.
  • Слова будут передаваться в нижнем регистре.

Варианты решений

def get_coin_balances(lst1, lst2):
    a, b = 3, 3
    for i, j in zip(lst1, lst2):
        if i == 'share':  a, b = a-1, b+3
        if j == 'share':  a, b = a+3, b-1
    return [a, b]
def get_coin_balances(r, b):
    x, y = 3, 3
    for i, _ in enumerate(r):
        x, y = [x+2, y] if r[i][:2] == 'sh' else [x+3, y-3];
        x, y = [x, y+2] if b[i][:2] == 'sh' else [x-3, y+3]
    return [x, y]

python books logo

Хотите решать больше задач по Python

Подписывайтесь на нас в Телеграм

×