💡 Инструкция: Выберите один ответ из пяти. Время — 55 минут. У каждого задания ровно один правильный вариант. Фрагменты рассчитаны на Ruby 4.0.6; задания Rails — на Rails 8.1.3. После завершения откроются общий процент, 4 тематических результатов и разбор всех ответов.
Вопрос 1 из 20
Разберите выражения по порядку. Как завершится фрагмент из раздела «Коллекции»? Оценивайте ответ целиком: обе части утверждения должны быть точными.
Ruby Ruby — Коллекции Копировать
# Проследите выполнение и выберите точный результат.
rows = Array.new(3, [])
rows[0] << :x
p rows
p rows.map(&:object_id)
Код вычисляет только нужные элементы и возвращает первые три квадрата чисел, кратных семи. Это объясняется тем, что Array хранит упорядоченные элементы, Hash сопоставляет ключи значениям; вызов `Array.new(n, object)` повторяет одну ссылку, а блок создаёт отдельные объекты.
Сначала выбираются нечётные числа, затем каждое умножается на десять; результат — `[10, 30]`. Это объясняется тем, что Array хранит упорядоченные элементы, Hash сопоставляет ключи значениям; вызов `Array.new(n, object)` повторяет одну ссылку, а блок создаёт отдельные объекты.
Изменение первого вложенного массива меняет все три позиции, потому что они указывают на один объект. Это объясняется тем, что Array хранит упорядоченные элементы, Hash сопоставляет ключи значениям; вызов `Array.new(n, object)` повторяет одну ссылку, а блок создаёт отдельные объекты.
Изменение первого вложенного массива меняет все три позиции, потому что они указывают на один объект. Это объясняется тем, что `map` сохраняет количество элементов и собирает результаты блока, `select` сохраняет исходные элементы, для которых блок истинен.
Изменение первого вложенного массива меняет все три позиции, потому что они указывают на один объект. Это объясняется тем, что `reduce` передаёт накопитель и текущий элемент; без начального значения первым накопителем становится первый элемент коллекции.
Вопрос 2 из 20
Какая трассировка кода по теме «map и select» не теряет важную деталь? Нужен вариант без логического разрыва между первой и второй частью.
Ruby Ruby — map и select Копировать
# Проследите выполнение и выберите точный результат.
values = [1, 2, 3, 4]
result = values.select(&:odd?).map { |n| n * 10 }
p result
Изменение первого вложенного массива меняет все три позиции, потому что они указывают на один объект. Причина такого результата: `map` сохраняет количество элементов и собирает результаты блока, `select` сохраняет исходные элементы, для которых блок истинен.
Сначала выбираются нечётные числа, затем каждое умножается на десять; результат — `[10, 30]`. Причина такого результата: `map` сохраняет количество элементов и собирает результаты блока, `select` сохраняет исходные элементы, для которых блок истинен.
Код вычисляет только нужные элементы и возвращает первые три квадрата чисел, кратных семи. Причина такого результата: `map` сохраняет количество элементов и собирает результаты блока, `select` сохраняет исходные элементы, для которых блок истинен.
Сначала выбираются нечётные числа, затем каждое умножается на десять; результат — `[10, 30]`. Причина такого результата: `lazy` откладывает обработку и позволяет остановить потенциально бесконечную цепочку ограничивающей операцией вроде `first`.
Сначала выбираются нечётные числа, затем каждое умножается на десять; результат — `[10, 30]`. Причина такого результата: `reduce` передаёт накопитель и текущий элемент; без начального значения первым накопителем становится первый элемент коллекции.
Вопрос 5 из 20
Почему успешный пример ещё не доказывает надёжность решения «Коллекции»? Проверьте обе половины ответа: частично верный вариант остаётся неверным.
Ruby Ruby — Коллекции Копировать
# Обычный запуск проходит. Найдите скрытый риск.
rows = Array.new(3, [])
rows[0] << :x
p rows
p rows.map(&:object_id)
Перестановка `map` и `select` может изменить не только скорость, но и смысл, если условие рассчитано на исходные значения. Причина — Array хранит упорядоченные элементы, Hash сопоставляет ключи значениям; вызов `Array.new(n, object)` повторяет одну ссылку, а блок создаёт отдельные объекты.
Преобразование ленивой цепочки в массив до ограничения уничтожает ленивость и может повиснуть на бесконечном источнике. Причина — Array хранит упорядоченные элементы, Hash сопоставляет ключи значениям; вызов `Array.new(n, object)` повторяет одну ссылку, а блок создаёт отдельные объекты.
Код выглядит как матрица, но общие строки создают каскадные изменения и трудноуловимые ошибки в накоплении данных. Причина — Array хранит упорядоченные элементы, Hash сопоставляет ключи значениям; вызов `Array.new(n, object)` повторяет одну ссылку, а блок создаёт отдельные объекты.
Код выглядит как матрица, но общие строки создают каскадные изменения и трудноуловимые ошибки в накоплении данных. Причина — `reduce` передаёт накопитель и текущий элемент; без начального значения первым накопителем становится первый элемент коллекции.
Код выглядит как матрица, но общие строки создают каскадные изменения и трудноуловимые ошибки в накоплении данных. Причина — `map` сохраняет количество элементов и собирает результаты блока, `select` сохраняет исходные элементы, для которых блок истинен.
Вопрос 6 из 20
Что может сломаться при переносе этого решения «map и select» в рабочую систему? Ищите не знакомые слова, а технически непротиворечивую пару утверждений.
Ruby Ruby — map и select Копировать
# Обычный запуск проходит. Найдите скрытый риск.
values = [1, 2, 3, 4]
result = values.select(&:odd?).map { |n| n * 10 }
p result
Преобразование ленивой цепочки в массив до ограничения уничтожает ленивость и может повиснуть на бесконечном источнике. Этот риск связан с тем, что `map` сохраняет количество элементов и собирает результаты блока, `select` сохраняет исходные элементы, для которых блок истинен.
Перестановка `map` и `select` может изменить не только скорость, но и смысл, если условие рассчитано на исходные значения. Этот риск связан с тем, что `reduce` передаёт накопитель и текущий элемент; без начального значения первым накопителем становится первый элемент коллекции.
Перестановка `map` и `select` может изменить не только скорость, но и смысл, если условие рассчитано на исходные значения. Этот риск связан с тем, что `lazy` откладывает обработку и позволяет остановить потенциально бесконечную цепочку ограничивающей операцией вроде `first`.
Перестановка `map` и `select` может изменить не только скорость, но и смысл, если условие рассчитано на исходные значения. Этот риск связан с тем, что `map` сохраняет количество элементов и собирает результаты блока, `select` сохраняет исходные элементы, для которых блок истинен.
Код выглядит как матрица, но общие строки создают каскадные изменения и трудноуловимые ошибки в накоплении данных. Этот риск связан с тем, что `map` сохраняет количество элементов и собирает результаты блока, `select` сохраняет исходные элементы, для которых блок истинен.
Вопрос 7 из 20
Что может сломаться при переносе этого решения «Свёртка коллекции методом reduce» в рабочую систему? Нужен вариант без логического разрыва между первой и второй частью.
Ruby Ruby — Свёртка коллекции методом reduce Копировать
# Обычный запуск проходит. Найдите скрытый риск.
letters = %i[a b a]
counts = letters.reduce(Hash.new(0)) do |acc, item|
acc[item] += 1
acc
end
p counts
Мутация общего начального объекта, вынесенного в константу или значение по умолчанию, сохраняет данные между независимыми вычислениями. Уязвимое место возникает потому, что `map` сохраняет количество элементов и собирает результаты блока, `select` сохраняет исходные элементы, для которых блок истинен.
Преобразование ленивой цепочки в массив до ограничения уничтожает ленивость и может повиснуть на бесконечном источнике. Уязвимое место возникает потому, что `reduce` передаёт накопитель и текущий элемент; без начального значения первым накопителем становится первый элемент коллекции.
Перестановка `map` и `select` может изменить не только скорость, но и смысл, если условие рассчитано на исходные значения. Уязвимое место возникает потому, что `reduce` передаёт накопитель и текущий элемент; без начального значения первым накопителем становится первый элемент коллекции.
Мутация общего начального объекта, вынесенного в константу или значение по умолчанию, сохраняет данные между независимыми вычислениями. Уязвимое место возникает потому, что `lazy` откладывает обработку и позволяет остановить потенциально бесконечную цепочку ограничивающей операцией вроде `first`.
Мутация общего начального объекта, вынесенного в константу или значение по умолчанию, сохраняет данные между независимыми вычислениями. Уязвимое место возникает потому, что `reduce` передаёт накопитель и текущий элемент; без начального значения первым накопителем становится первый элемент коллекции.
Вопрос 9 из 20
Как сформулировать правило блока «Коллекции» без лишних обещаний? Правильным считается только полностью согласованное утверждение.
Array хранит упорядоченные элементы, Hash сопоставляет ключи значениям; вызов `Array.new(n, object)` повторяет одну ссылку, а блок создаёт отдельные объекты. Поэтому код вычисляет только нужные элементы и возвращает первые три квадрата чисел, кратных семи.
`map` сохраняет количество элементов и собирает результаты блока, `select` сохраняет исходные элементы, для которых блок истинен. Поэтому изменение первого вложенного массива меняет все три позиции, потому что они указывают на один объект.
Array хранит упорядоченные элементы, Hash сопоставляет ключи значениям; вызов `Array.new(n, object)` повторяет одну ссылку, а блок создаёт отдельные объекты. Поэтому изменение первого вложенного массива меняет все три позиции, потому что они указывают на один объект.
`reduce` передаёт накопитель и текущий элемент; без начального значения первым накопителем становится первый элемент коллекции. Поэтому изменение первого вложенного массива меняет все три позиции, потому что они указывают на один объект.
Array хранит упорядоченные элементы, Hash сопоставляет ключи значениям; вызов `Array.new(n, object)` повторяет одну ссылку, а блок создаёт отдельные объекты. Поэтому сначала выбираются нечётные числа, затем каждое умножается на десять; результат — `[10, 30]`.
Вопрос 10 из 20
Какой механизм отделяет верный разбор от похожего, но ошибочного объяснения «map и select»? Сопоставьте не только итог, но и правило, риск или проверку, которые с ним связаны.
`lazy` откладывает обработку и позволяет остановить потенциально бесконечную цепочку ограничивающей операцией вроде `first`. Из этого следует, что сначала выбираются нечётные числа, затем каждое умножается на десять; результат — `[10, 30]`.
`map` сохраняет количество элементов и собирает результаты блока, `select` сохраняет исходные элементы, для которых блок истинен. Из этого следует, что сначала выбираются нечётные числа, затем каждое умножается на десять; результат — `[10, 30]`.
`reduce` передаёт накопитель и текущий элемент; без начального значения первым накопителем становится первый элемент коллекции. Из этого следует, что сначала выбираются нечётные числа, затем каждое умножается на десять; результат — `[10, 30]`.
`map` сохраняет количество элементов и собирает результаты блока, `select` сохраняет исходные элементы, для которых блок истинен. Из этого следует, что изменение первого вложенного массива меняет все три позиции, потому что они указывают на один объект.
`map` сохраняет количество элементов и собирает результаты блока, `select` сохраняет исходные элементы, для которых блок истинен. Из этого следует, что код вычисляет только нужные элементы и возвращает первые три квадрата чисел, кратных семи.
Вопрос 11 из 20
Какой механизм объясняет и обычный, и граничный сценарий «Свёртка коллекции методом reduce»? Смотрите на всю причинную связку, а не только на знакомую формулировку.
`map` сохраняет количество элементов и собирает результаты блока, `select` сохраняет исходные элементы, для которых блок истинен. Наблюдаемое следствие: с явным начальным Hash код подсчитывает частоты и возвращает `{a: 2, b: 1}`.
`lazy` откладывает обработку и позволяет остановить потенциально бесконечную цепочку ограничивающей операцией вроде `first`. Наблюдаемое следствие: с явным начальным Hash код подсчитывает частоты и возвращает `{a: 2, b: 1}`.
`reduce` передаёт накопитель и текущий элемент; без начального значения первым накопителем становится первый элемент коллекции. Наблюдаемое следствие: код вычисляет только нужные элементы и возвращает первые три квадрата чисел, кратных семи.
`reduce` передаёт накопитель и текущий элемент; без начального значения первым накопителем становится первый элемент коллекции. Наблюдаемое следствие: с явным начальным Hash код подсчитывает частоты и возвращает `{a: 2, b: 1}`.
`reduce` передаёт накопитель и текущий элемент; без начального значения первым накопителем становится первый элемент коллекции. Наблюдаемое следствие: сначала выбираются нечётные числа, затем каждое умножается на десять; результат — `[10, 30]`.
Вопрос 12 из 20
На какой контракт языка или библиотеки опирается результат блока «Ленивые цепочки»? Выберите связку, в которой верны и основной вывод, и его обоснование.
`lazy` откладывает обработку и позволяет остановить потенциально бесконечную цепочку ограничивающей операцией вроде `first`. Именно поэтому сначала выбираются нечётные числа, затем каждое умножается на десять; результат — `[10, 30]`.
`reduce` передаёт накопитель и текущий элемент; без начального значения первым накопителем становится первый элемент коллекции. Именно поэтому код вычисляет только нужные элементы и возвращает первые три квадрата чисел, кратных семи.
`lazy` откладывает обработку и позволяет остановить потенциально бесконечную цепочку ограничивающей операцией вроде `first`. Именно поэтому код вычисляет только нужные элементы и возвращает первые три квадрата чисел, кратных семи.
`lazy` откладывает обработку и позволяет остановить потенциально бесконечную цепочку ограничивающей операцией вроде `first`. Именно поэтому изменение первого вложенного массива меняет все три позиции, потому что они указывают на один объект.
`map` сохраняет количество элементов и собирает результаты блока, `select` сохраняет исходные элементы, для которых блок истинен. Именно поэтому код вычисляет только нужные элементы и возвращает первые три квадрата чисел, кратных семи.
Вопрос 13 из 20
Какое инженерное решение лучше всего соответствует механизму «Коллекции»? Сопоставьте не только итог, но и правило, риск или проверку, которые с ним связаны.
Ruby Ruby — Коллекции Копировать
# Выберите изменение, которое исправляет причину.
rows = Array.new(3, [])
rows[0] << :x
p rows
p rows.map(&:object_id)
Создавать вложенные изменяемые значения блоком: `Array.new(3) { [] }`, а затем проверять различие object_id. Так закрывается риск: перестановка `map` и `select` может изменить не только скорость, но и смысл, если условие рассчитано на исходные значения.
Создавать вложенные изменяемые значения блоком: `Array.new(3) { [] }`, а затем проверять различие object_id. Так закрывается риск: преобразование ленивой цепочки в массив до ограничения уничтожает ленивость и может повиснуть на бесконечном источнике.
Создавать вложенные изменяемые значения блоком: `Array.new(3) { [] }`, а затем проверять различие object_id. Так закрывается риск: код выглядит как матрица, но общие строки создают каскадные изменения и трудноуловимые ошибки в накоплении данных.
Размещать ограничение как можно ближе к источнику и измерять число реально обработанных элементов на больших потоках. Так закрывается риск: код выглядит как матрица, но общие строки создают каскадные изменения и трудноуловимые ошибки в накоплении данных.
Когда фильтрация и преобразование неразделимы, рассмотреть `filter_map`, но оставить намерение понятным и проверить nil/false. Так закрывается риск: код выглядит как матрица, но общие строки создают каскадные изменения и трудноуловимые ошибки в накоплении данных.
Вопрос 14 из 20
Какое исправление уменьшает риск, не скрывая исходное поведение «map и select»? Сопоставьте не только итог, но и правило, риск или проверку, которые с ним связаны.
Ruby Ruby — map и select Копировать
# Выберите изменение, которое исправляет причину.
values = [1, 2, 3, 4]
result = values.select(&:odd?).map { |n| n * 10 }
p result
Когда фильтрация и преобразование неразделимы, рассмотреть `filter_map`, но оставить намерение понятным и проверить nil/false. Это изменение устраняет проблему: код выглядит как матрица, но общие строки создают каскадные изменения и трудноуловимые ошибки в накоплении данных.
Когда фильтрация и преобразование неразделимы, рассмотреть `filter_map`, но оставить намерение понятным и проверить nil/false. Это изменение устраняет проблему: перестановка `map` и `select` может изменить не только скорость, но и смысл, если условие рассчитано на исходные значения.
Размещать ограничение как можно ближе к источнику и измерять число реально обработанных элементов на больших потоках. Это изменение устраняет проблему: перестановка `map` и `select` может изменить не только скорость, но и смысл, если условие рассчитано на исходные значения.
Когда фильтрация и преобразование неразделимы, рассмотреть `filter_map`, но оставить намерение понятным и проверить nil/false. Это изменение устраняет проблему: преобразование ленивой цепочки в массив до ограничения уничтожает ленивость и может повиснуть на бесконечном источнике.
Создавать новый накопитель на каждый вызов и возвращать его из блока явно, особенно если последняя операция возвращает не сам накопитель. Это изменение устраняет проблему: перестановка `map` и `select` может изменить не только скорость, но и смысл, если условие рассчитано на исходные значения.
Вопрос 15 из 20
Как исправить реализацию «Свёртка коллекции методом reduce» без новой скрытой зависимости? Сопоставьте не только итог, но и правило, риск или проверку, которые с ним связаны.
Создавать новый накопитель на каждый вызов и возвращать его из блока явно, особенно если последняя операция возвращает не сам накопитель. Такая правка нужна из-за риска: преобразование ленивой цепочки в массив до ограничения уничтожает ленивость и может повиснуть на бесконечном источнике.
Создавать новый накопитель на каждый вызов и возвращать его из блока явно, особенно если последняя операция возвращает не сам накопитель. Такая правка нужна из-за риска: мутация общего начального объекта, вынесенного в константу или значение по умолчанию, сохраняет данные между независимыми вычислениями.
Создавать новый накопитель на каждый вызов и возвращать его из блока явно, особенно если последняя операция возвращает не сам накопитель. Такая правка нужна из-за риска: перестановка `map` и `select` может изменить не только скорость, но и смысл, если условие рассчитано на исходные значения.
Когда фильтрация и преобразование неразделимы, рассмотреть `filter_map`, но оставить намерение понятным и проверить nil/false. Такая правка нужна из-за риска: мутация общего начального объекта, вынесенного в константу или значение по умолчанию, сохраняет данные между независимыми вычислениями.
Размещать ограничение как можно ближе к источнику и измерять число реально обработанных элементов на больших потоках. Такая правка нужна из-за риска: мутация общего начального объекта, вынесенного в константу или значение по умолчанию, сохраняет данные между независимыми вычислениями.
Вопрос 18 из 20
Какой регрессионный пример обнаружит ошибочное обобщение в теме «map и select»? В правильном ответе вторая часть действительно объясняет или проверяет первую.
Проверить пустую коллекцию и блок с побочным эффектом: цепочка Enumerable не гарантирует, что побочные действия легко читаются. Так проверяется решение: создавать новый накопитель на каждый вызов и возвращать его из блока явно, особенно если последняя операция возвращает не сам накопитель.
Проверить пустой Enumerable без начального значения: `reduce` вернёт nil, что может нарушить числовой контракт. Так проверяется решение: когда фильтрация и преобразование неразделимы, рассмотреть `filter_map`, но оставить намерение понятным и проверить nil/false.
Проверить пустую коллекцию и блок с побочным эффектом: цепочка Enumerable не гарантирует, что побочные действия легко читаются. Так проверяется решение: когда фильтрация и преобразование неразделимы, рассмотреть `filter_map`, но оставить намерение понятным и проверить nil/false.
Проверить пустую коллекцию и блок с побочным эффектом: цепочка Enumerable не гарантирует, что побочные действия легко читаются. Так проверяется решение: размещать ограничение как можно ближе к источнику и измерять число реально обработанных элементов на больших потоках.
Проверить операцию, которая материализует всю последовательность, например `sort` или `to_a`, — она меняет требования к памяти. Так проверяется решение: когда фильтрация и преобразование неразделимы, рассмотреть `filter_map`, но оставить намерение понятным и проверить nil/false.
Вопрос 20 из 20
Какую проверку стоит добавить, чтобы не ограничиться счастливым путём «Ленивые цепочки»? Нужен вариант без логического разрыва между первой и второй частью.
Проверить пустой Enumerable без начального значения: `reduce` вернёт nil, что может нарушить числовой контракт. Сценарий подтверждает надёжность решения: размещать ограничение как можно ближе к источнику и измерять число реально обработанных элементов на больших потоках.
Проверить операцию, которая материализует всю последовательность, например `sort` или `to_a`, — она меняет требования к памяти. Сценарий подтверждает надёжность решения: создавать вложенные изменяемые значения блоком: `Array.new(3) { [] }`, а затем проверять различие object_id.
Проверить операцию, которая материализует всю последовательность, например `sort` или `to_a`, — она меняет требования к памяти. Сценарий подтверждает надёжность решения: когда фильтрация и преобразование неразделимы, рассмотреть `filter_map`, но оставить намерение понятным и проверить nil/false.
Проверить пустую коллекцию и блок с побочным эффектом: цепочка Enumerable не гарантирует, что побочные действия легко читаются. Сценарий подтверждает надёжность решения: размещать ограничение как можно ближе к источнику и измерять число реально обработанных элементов на больших потоках.
Проверить операцию, которая материализует всю последовательность, например `sort` или `to_a`, — она меняет требования к памяти. Сценарий подтверждает надёжность решения: размещать ограничение как можно ближе к источнику и измерять число реально обработанных элементов на больших потоках.