- 21, Oct 2024
- #1
Введение и кредит
Сегодня без причудливой прелюдии: Пожалуйста, реализуйте
.Example Input: [42, 14, 42, 43, 41, 4080622, 171480372] Consider first element: 42 42 is even (21*2) Put 42 into output list, output list is now [42] Consider second element: 14 14 is even (7*2) Put 14 into output list, output list is now [42,14] Consider third element: 42 42 is even (21*2) Put 42 into output list, output list is now [42,14,42] Consider fourth element: 43 43 is not even (2*21+1) Drop 43 and return the current output list return [42,14,42]
Вариантом этого (с нетривиальной структурой данных) было задание на моем университетском курсе функционального программирования. Это задание закрыто и обсуждалось в классе, и у меня есть разрешение профессора опубликовать его здесь (я попросил явно).
Спецификация
Вход
Входными данными будет список (или эквивалентная концепция вашего языка) положительных целых чисел.
Выход
Результатом должен быть список (или эквивалентная концепция вашего языка) положительных целых чисел.
Что делать?
Ваша задача реализовать [14, 42, 2324, 97090, 4080622, 171480372] -> [14, 42, 2324, 97090, 4080622, 171480372]
[42, 14, 42, 2324] -> [42, 14, 42, 2324]
[7,14,42] -> []
[] -> []
[171480372, 13, 14, 42] -> [171480372]
[42, 14, 42, 43, 41, 4080622, 171480372] -> [42, 14, 42]
(language built-ins are allowed) with the predicate that the number under consideration is even (to focus on takewhile).
Таким образом, вы перебираете список от начала до конца, и пока условие (четное) выполняется, вы копируете его в список вывода, и как только вы нажимаете на элемент, который не делает условие истинным, вы прерываете операцию и выводите результат. (пошаговый пример ниже). Эта функциональность более высокого порядка также называется takeWhile ( [42,14]
).
Возможные угловые случаи
Порядок выходного списка по сравнению с входным списком не может быть изменен, например. [14,42,2]
may not become takewhile
.
Пустой список является допустимым входом и выходом.
Кто победит?
Это код-гольф, поэтому побеждает самый короткий ответ в байтах!
Разумеется, применяются стандартные правила.
Тестовые векторы
takewhile
Пошаговый пример
takewhile
#код-гольф #массив