Уравновешивание
Качели (предположительно от французского «ci-ça», что означает «это-то») составляют треть священной троицы игрового оборудования, наряду с такими же вездесущими горками и качелями. Качели находятся в идеальном равновесии, если и только если сумма моментов на каждой стороне эквивалентна. Поэтому качели можно уравновесить, добавив определенное количество веса в сторону с меньшей суммой моментов; достижение этой цели является вашей целью.
Вызов
Ваша задача состоит в том, чтобы взять изображение качелей в качестве входных данных и вывести их снова, с весом, добавленным к одному концу качелей, чтобы сбалансировать его.
вход
Ваша программа должна иметь в любом приемлемом формате качели ASCII, такие как:
100 100
-------------------
^
Первая строка содержит два числа, каждое из которых представляет вес на качелях. Ровно один вес присутствует на каждой стороне, каждый действует на самом конце своей стороны доски. Веса гарантированно являются целыми числами и всегда совпадают с соответствующим концом доски. Эти числа никогда не будут перекрывать точку опоры ( ^
).
Вторая строка представляет «доску» качелей. Каждый тире ( -
) представляет одинаковую длину для каждого другого тире, за единственным исключением тире непосредственно над точкой опоры ( ^
), которая не имеет длины.
Третья строка представляет точку опоры качели. Эта точка опоры помечена единственным символом, который не является пробелом в этой строке, - окружностью ('^'). Точка опоры может быть расположена в любом месте по всей длине доски на допустимом входном сигнале, если остается достаточно места, чтобы числа, представляющие веса, не перекрывали точку опоры ни на входе, ни на выходе.
Входные данные гарантированно состоят из трех строк и не имеют пробелов до или после символов, составляющих качели (за исключением, конечно, третьей строки, которая этого требует).
Выход
Для вывода такое же изображение качелей должно быть напечатано на стандартный вывод, но с заменой одного (и только одного) веса на больший, чтобы сбалансировать качели. Входные данные гарантированно сделают это возможным, используя только целые числа. Следовательно, веса должны быть показаны без десятичных точек или любых других аналогичных обозначений. Если ваш язык не использует стандартный вывод, вы должны прийти к общему / мета-консенсусу по выводу. Конечные переводы строки хороши, но любые другие изменения в формате описания, вероятно, не в порядке.
заверенная копия
Тестовые входы и соответствующие выходы
Вход 1
12 22
--------------------
^
Выход 1
12 26
--------------------
^
Вход 2
42 42
-----------
^
Выход 2
42 42
-----------
^
Вход 3
3 16
----------------
^
Выход 3
14 16
----------------
^
Вход 4
1 56
-------------------
^
Выход 4
196 56
-------------------
^
Реализация ссылок - Python 3
# Takes a list of strings as input
def balance_seesaw(lines):
weights = [int(w.strip()) for w in lines[0].split()]
length = len(lines[1])
pivot = lines[2].find("^")
left_length = pivot
right_length = length - 1 - pivot
left_torque = weights[0] * left_length
right_torque = weights[1] * right_length
if left_torque > right_torque:
weights[1] = left_torque // right_length
elif right_torque > left_torque:
weights[0] = right_torque // left_length
weights = [str(w) for w in weights]
string_gap = " " * (length - sum(len(w) for w in weights))
lines[0] = weights[0] + string_gap + weights[1]
print("\n".join(lines))
balance_seesaw(["1 56",
"-------------------",
" ^ "])
правила
Это код-гольф , поэтому самый короткий код считается в байтах. Проверьте мета, если подсчет байтов неудобен на вашем языке.
Применяются стандартные правила / лазейки.
Входные данные должны быть приняты в разумном формате. Неисчерпывающий список подходящих форматов приводится ниже:
- Одна строка со строками, разделенными символами новой строки
- Список строк, каждая строка представляет собой строку
- 2D-массив или матрица символов
Связанные проблемы
- Балансировать набор весов на качелях - Предложено в августе 2015 года samgak