NumPy: вычисления и устройство массивов

View и copy: предсказание влияния изменений среза на исходный массив

Содержание курса

Найди и исправь: три ошибки в view, copy и проверке shares_memory

Что уже дано

Проверяющая система запускает вашу программу и подаёт данные через stdin. Никаких заранее созданных переменных нет.

В редакторе уже есть сломанный код. В нём ровно три ошибки в трёх независимых строках:

  1. fragment создаётся как срез original[a:b] без .copy(), хотя по условию fragment должен быть независимой копией, не разделяющей память с original.
  2. view_seg создаётся как original[a:b].copy(), хотя по условию view_seg должен быть view — срезом без копирования.
  3. Мутация view_seg[0] = val проверяется сравнением с original[0], хотя правильно сравнивать с original[a] — именно этот элемент меняется через view.

Каждая ошибка находится в отдельной строке и не зависит от других.

Что нужно сделать

Найдите и исправьте все три ошибки так, чтобы программа:

  1. Читала из stdin одну строку с целыми числами через пробел — элементы массива original.
  2. Читала вторую строку с тремя целыми числами: a, b, val — начало среза, конец среза (не включительно) и значение для мутации.
  3. Создавала fragment = original[a:b].copy()независимую копию среза.
  4. Создавала view_seg = original[a:b]view (срез без копирования).
  5. Выводила shares_fragment=<True|False> — результат np.shares_memory(original, fragment) (ожидается False).
  6. Выводила shares_view=<True|False> — результат np.shares_memory(original, view_seg) (ожидается True).
  7. Выполняла view_seg[0] = val. Выводила mutated=<True|False> — результат сравнения original[a] == val (ожидается True, так как view изменил исходный массив).
  8. Выводила 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)
  • Тест 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 секунд.

Отправьте решение, чтобы увидеть результаты тестов.