Мета цього завдання - зібрати вибрані елементи у списку та перемістити їх у певне місце у списку.
В якості наочного прикладу візьміть вхідні значення (представлені чорними коробчастими цілими числами) та відповідний список правдивих значень, де істина позначає вибраний елемент (представлений блакитними полями, де T
правда і хибність F
):
Перший логічний крок - відокремити елементи, позначені truthy, а не truthy у відповідних списках. Зауважте, що у кожному списку повинен підтримуватися відносний порядок (тобто порядок вибраних елементів повинен бути 1,4,5
, а порядок невибраних елементів повинен бути 2,3,6,7
)!
Другий логічний крок задається індексом у списку, що залишився невибраним, вставте всі вибрані елементи перед елементом у заданому індексі. Припустимо, що індексація починається з 0, припустимо, ви хочете вставити виділення з індексу 3. Це відповідає місці перед 7
полем, тому вибрані елементи слід вставити перед 7
.
Остаточне рішення - тоді 2,3,6,1,4,5,7
.
Зауважте, що ця логічна діаграма зображує один із способів цього зробити; вашій програмі не потрібно робити ті ж логічні кроки, поки результат завжди дає однакові результати, що спостерігаються.
Вхідні дані
Вашій програмі надано 3 входи:
- Список цілих чисел, що представляють елементи. Це може бути порожній список. Цей список завжди буде складатися з унікальних натуральних чисел, не обов'язково в упорядкованому порядку (тобто 5 не буде в списку двічі).
- Список значень truthy / falesy з тією ж довжиною, що і список елементів, де значення truthy означає, що вибрано предмет у тому ж індексі.
- Ціле число, яке представляє місце, куди потрібно вставити виділення. Ви можете вибрати, який індекс першого елемента списку буде таким, який він є постійним у кожному запуску вашої програми (наприклад, перший елемент може бути індексом 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]
Оцінка балів
Це код гольфу; найкоротша відповідь у байтах виграє. Стандартні лазівки заборонені. Вам дозволяється використовувати будь-які потрібні вбудовані модулі.