View и copy: предсказание влияния изменений среза на исходный массив
Содержание курса
Найди и исправь: три ошибки в view, copy и проверке shares_memory
Что уже дано
Проверяющая система запускает вашу программу и подаёт данные через stdin. Никаких заранее созданных переменных нет.
В редакторе уже есть сломанный код. В нём ровно три ошибки в трёх независимых строках:
fragmentсоздаётся как срезoriginal[a:b]без.copy(), хотя по условиюfragmentдолжен быть независимой копией, не разделяющей память сoriginal.view_segсоздаётся какoriginal[a:b].copy(), хотя по условиюview_segдолжен быть view — срезом без копирования.- Мутация
view_seg[0] = valпроверяется сравнением сoriginal[0], хотя правильно сравнивать сoriginal[a]— именно этот элемент меняется через view.
Каждая ошибка находится в отдельной строке и не зависит от других.
Что нужно сделать
Найдите и исправьте все три ошибки так, чтобы программа:
- Читала из
stdinодну строку с целыми числами через пробел — элементы массиваoriginal. - Читала вторую строку с тремя целыми числами:
a,b,val— начало среза, конец среза (не включительно) и значение для мутации. - Создавала
fragment = original[a:b].copy()— независимую копию среза. - Создавала
view_seg = original[a:b]— view (срез без копирования). - Выводила
shares_fragment=<True|False>— результатnp.shares_memory(original, fragment)(ожидаетсяFalse). - Выводила
shares_view=<True|False>— результатnp.shares_memory(original, view_seg)(ожидаетсяTrue). - Выполняла
view_seg[0] = val. Выводилаmutated=<True|False>— результат сравненияoriginal[a] == val(ожидаетсяTrue, так как view изменил исходный массив). - Выводила
original=<значения через пробел>— текущие значенияoriginalпосле мутации.
Ввод и вывод
Программа читает stdin и пишет в stdout.
Формат ввода
<целые числа через пробел> # элементы original
<a> <b> <val> # начало среза, конец среза, значение мутации
Гарантируется: 0 <= a < b <= len(original), b - a >= 1.
Формат вывода
shares_fragment=<True|False>
shares_view=<True|False>
mutated=<True|False>
original=<значения через пробел>
О данных в ответах
Используйте учебные данные. Не вставляйте пароли, токены, ключи доступа, паспортные и банковские данные, а также персональные данные других людей. Политика обработки данных.
- Тест 1Ввод
10 20 30 40 50 60 2 5 99
Ожидаемый выводshares_fragment=False shares_view=True mutated=True original=10 20 99 40 50 60
Как проверяется решение
Сравнение вывода: Правила исходной проверяющей системы. Интерактивный запуск не влияет на оценку. Лимит сессии — 5 минут, процессорного времени — 10 секунд.
Отправьте решение, чтобы увидеть результаты тестов.
