Попалась олимпиадная задачка по информатике 6-11 класс.
Нужно написать программу на Python:
В сервисе починки роботов очень важно соблюдать порядок. Главный механик любит, чтобы все роботы стояли друг за другом — сначала только сломанные (если они есть), а потом исправные (если они есть).
По ночам роботы всё время гуляют по ангару, и к утру порядок, установленный главным механиком, нарушается. Механик решил наказывать роботов, которые нарушают порядок, и удалять из очереди. Но роботы взбунтовались и требуют равноправия — если уж удалять из очереди, то равное количество исправных и сломанных роботов.
Сломанные роботы обозначаются буквой B (broken), исправные — буквой W (working).
Есть строка из букв B и W. Надо удалить наименьшее и равное количество сломанных и исправных роботов так, чтобы в очереди сначала стояли только сломанные, а потом только исправные. Может оказаться, что одних или других нет. Общее количество роботов в очереди не превышает 10 000.
Выведи количество удалённых роботов и очередь, которая получилась после удаления нарушивших правило роботов.
Если в очереди никого не осталось, выведи "Никого не осталось!".
Вот программа на Python, которая реализует эти требования:
def remove_robots(robot_queue):
broken_count = 0
working_count = 0
for robot in robot_queue:
if robot == 'B':
broken_count += 1
else:
working_count += 1
remove_count = min(broken_count, working_count) * 2
broken_count -= remove_count // 2
working_count -= remove_count // 2
new_queue = 'B' * broken_count + 'W' * working_count
if len(new_queue) == 0:
return (remove_count, "Никого не осталось!")
return (remove_count, new_queue)
robot_queue = input("Введите очередь роботов: ")
result = remove_robots(robot_queue)
print("Удаленные роботы: ", result[0])
print("Оставшаяся очередь: ", result[1])
Программа принимает от пользователя очередь роботов, подсчитывает количество сломанных и работающих роботов, удаляет минимального из них и возвращает количество удаленных роботов и оставшуюся очередь. Если после удаления роботов очередь пуста, возвращается сообщение "Никого не осталось!".
Нашли ошибку? Давайте исправим! Пишите в комментариях!