В стену вмонтирован специальный аппарат, выдающий монетки. За стеной с каждой стороны стоит человек. Оба они могут взаимодействовать с аппаратом.
Если бросить монетку в аппарат, человек, стоящий за стеной, получит 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]