Алгоритм решения задания 14. Часть 1
Учимся решать 15 задания первого типа
Читать
Исполнитель Водолей переливает воду между тремя колбами А, В и С.
Водолей имеет три команды: Наполни А/В/С — наполняет одну из колб, указанную в команде (например, команда Наполни А полностью наполняет колбу А); Вылей А/В/С — опустошает одну из колб, указанную в команде (например, команда Вылей A опустошит колбу A).; Перелей из А/В/С в А/В/С — переливает воду из колбы_1, название которой указано после слова «из», в колбу_2, имя которой указано после слова «в». Если колба_2 может поместить весь объем воды из колбы_1, то переливается вся вода, если нет, переливается только то количество, которое колба_2 может вместить, не поместившийся в колбу_2 объем, остается в колбе_1.
Запись Повтори k [Команда1 Команда2 … КомандаS] означает, что последовательность из S команд повторится k раз.
Колба А имеет объем 5 литров, В – 3 литра, С – 12 литров. Изначально все колбы пустые.
Определите, сколько литров воды окажется в колбе C после выполнения следующего алгоритма:
Повтори 15 [
Наполни А
Перелей из A в B
Перелей из A в C
Вылей B
Перелей из С в B]
flasks = {'A': 0, 'B': 0, 'C': 0}
max_volume = {'A': 5, 'B': 3, 'C': 12}
a, b, c = "ABC"
# Наполнить
def fill(n):
flasks[n] = max_volume[n]
# Вылить
def pour_out(n):
flasks[n] = 0
# Перелить из a в b
def pour_over(a, b):
if flasks[b] + flasks[a] <= max_volume[b]:
flasks[b] += flasks[a]
flasks[a] = 0
else:
volume = max_volume[b] - flasks[b]
flasks[b] = max_volume[b]
flasks[a] -= volume
for _ in range(15):
fill(a)
pour_over(a, b)
pour_over(a, c)
pour_out(b)
pour_over(c, b)
print(flasks[c])
