Цель этой задачи - собрать выбранные элементы в списке и переместить их в определенное место в списке.
В качестве наглядного примера возьмем входные значения (представленные целыми числами в черных ящиках) и соответствующий список истинных значений, где true означает, что выбран элемент (представлен голубыми полями, где Ttrue и Fis falses):
Первый логический шаг - разделить элементы, помеченные как правдивые и не правдивые, в соответствующие списки. Обратите внимание, что относительный порядок в каждом списке должен поддерживаться (то есть порядок выбранных элементов должен быть 1,4,5, а порядок невыбранных элементов должен быть 2,3,6,7)!
Второй логический шаг - указание индекса в оставшемся списке невыбранных элементов, вставка всех выбранных элементов перед элементом с указанным индексом. Предполагая, что индексирование начинается с 0, предположим, что вы хотите вставить выборку с индексом 3. Это соответствует месту перед 7полем, поэтому выбранные элементы должны быть вставлены перед 7.
Окончательное решение тогда 2,3,6,1,4,5,7.
Обратите внимание, что эта логическая диаграмма изображает один из способов, которым это можно сделать; вашей программе не нужно предпринимать одни и те же логические шаги, если выходные данные всегда дают один и тот же наблюдаемый результат.
вход
Ваша программа имеет 3 входа:
- Список целых чисел, представляющих элементы. Это может быть пустой список. Этот список всегда будет состоять из уникальных натуральных чисел, не обязательно в отсортированном порядке (т.е. 5 не будет в списке дважды).
- Список истинных / ложных значений такой же длины, что и список элементов, где истинное значение означает, что был выбран элемент с тем же индексом.
- Целое число, представляющее, куда вставить выбор. Вы можете выбрать индекс первого элемента списка, если он постоянен при каждом запуске вашей программы (например, первым элементом может быть индекс 0 или индекс 1). Пожалуйста, укажите, какой конвенции придерживается ваша программа. Этот индекс должен находиться в диапазоне
[starting_idx, ending_idx+1], т.е. он всегда будет действительным индексом. Для индекса случаяending_idx+1, выбор должен быть вставлен в конец списка. Вы можете предположить, что это целое число будет соответствовать типу целого числа вашего языка.
Вход может поступать из любого желаемого источника (stdio, параметр функции и т. Д.)
Выход
Вывод представляет собой список, представляющий окончательную последовательность элементов. Это может быть любой источник (stdio, возвращаемое значение, выходной параметр функции и т. Д.). Вам разрешено изменять любые входные данные на месте (например, если список параметров можно изменить как параметр функции, а ваша функция должна работать на месте в этом списке).
Контрольные примеры
Все следующие тестовые примеры предполагают индексирование на основе 0. Я использовал 0 и 1, чтобы указать ложные / истинные значения соответственно для маски выбора.
В тестовых примерах списки отформатированы как [a,b,c], но пока ваши входные списки представляют собой конечную упорядоченную последовательность, это нормально.
Входные данные:
[]
[]
0
Выход:
[]
Входные данные:
[1,2,3,4,5,6,7]
[1,0,0,1,1,0,0]
3
Выход:
[2,3,6,1,4,5,7]
Входные данные:
[1,2,3,4,5,6,7]
[1,0,0,1,1,0,0]
0
Выход:
[1,4,5,2,3,6,7]
Входные данные:
[1,2,3,4,5,6,7]
[1,0,0,1,1,0,0]
4
Выход:
[2,3,6,7,1,4,5]
Входные данные:
[1,2,3,4,5,6,7]
[1,1,1,1,1,1,1]
0
Выход:
[1,2,3,4,5,6,7]
Входные данные:
[1,2,3,4,5,6,7]
[0,0,0,0,0,0,0]
5
Выход:
[1,2,3,4,5,6,7]
Входные данные:
[1,3,2,5,4,6]
[1,0,0,1,1,0]
3
Выход:
[3,2,6,1,5,4]
счет
Это код гольф; кратчайший ответ в байтах побеждает. Стандартные лазейки запрещены. Вам разрешено использовать любые встроенные модули по вашему желанию.


