Учитывая набор n
элементов, задача состоит в том, чтобы написать функцию, которая перечисляет все комбинации k
элементов в этом наборе.
пример
Set: [1, 7, 4]
Input: 2
Output: [1,7], [1,4], [7,4]
пример
Set: ["Charlie", "Alice", "Daniel", "Bob"]
Input: 2
Output ["Daniel", "Bob"], ["Charlie", "Alice"], ["Alice", "Daniel"], ["Charlie", "Daniel"], ["Alice", "Bob"], ["Charlie", "Bob"]
Правила (отредактировано)
- Порядок вывода на ваш выбор.
- На входе могут быть данные любого типа. Но вывод должен быть того же типа, что и ввод. Если входные данные представляют собой список целых чисел, выходные данные также должны быть списком целых чисел. Если вход является строкой (массив символов), вывод также должен быть строкой.
- Код должен работать с любым количеством входных переменных.
- Вы можете использовать любой язык программирования.
- Ответ должен иметь возможность использовать что угодно (string, int, double ...) в качестве входных и выходных данных.
- Любые встроенные функции, связанные с комбинациями и перестановками, запрещены.
- Самый короткий код выигрывает (в байтах).
- Tiebreaker: голоса
- Продолжительность: 1 неделя.
PS Будьте осторожны с экстремальными значениями, такими как отрицательные числа, 0 и т. Д.
combos('ab', 1) -> ['a', 'b']
действителен?Ответы:
Haskell -
5746 байтПринеси это, гольфисты.
Вариант использования (та же функция работает полиморфно):
источник
Python (72)
Функция
f
принимает списокS
и числоk
и возвращает список всех подсписков длиныk
вS
. Вместо того, чтобы перечислять все подмножества и затем фильтровать по размеру, я получаю только подмножества нужного размера на каждом шаге.Я хотел бы приступить
S.pop()
к работе, чтобы объединить получениеS[:1]
с передачейS[1:]
позже, но кажется, что он слишком много потребляет.Чтобы исключить возражение, любое такое решение Python нарушает правило «код должен работать с любым количеством входных переменных» из-за пределов рекурсии, я отмечу, что реализация Stackless Python не имеет пределов рекурсии (хотя я на самом деле не тестировал этот код с ним).
Демонстрация:
источник
Mathematica 10, 70 символов
Просто перевод ответа на Haskell.
Применение:
источник
Древесный уголь , 23 байта
Попробуйте онлайн! Ссылка на подробную версию кода. Объяснение:
источник
Питон - 129
s - это список, k - размер создаваемых комбинаций.
источник
Python, 102
Звоните с, чтобы запустить:
Он получает все перестановки в списке s и фильтрует те, которые имеют длину k.
источник
Пиф , 28
Это (в значительной степени) основано на ответе на Haskell.
Объяснение:
Примечание. Хотя самая последняя версия Pyth, 1.0.9, была выпущена сегодня вечером и поэтому не подходит для этой задачи, тот же код отлично работает в 1.0.8.
источник
Haskell + Data.List , 44 байта
Попробуйте онлайн!
46 байт Ответ довольно трудно превзойти , но если у вас есть
tails
отData.List
вы можете сделать 44 байта.источник
05AB1E ,
1413 байтВдохновленный ответом @Neil 's Charcoal , так что не забудьте его поддержать!
Попробуйте онлайн или проверьте еще несколько тестов .
Если встроенные функции были разрешены, это могло бы быть 2 байта :
Попробуйте онлайн или проверьте еще несколько тестов .
Объяснение:
источник
APL (NARS), 80 символов, 160 байтов
тест и как его использовать:
вывод вроде ок ... но ошибка возможна ...
На практике он возвращает void, установленный как Zilde, если входная альфа выходит за пределы диапазона; если альфа равен 1, он возвращает все элементы в своем наборе (верно?);
Это ниже, кажется, на пару символов меньше, но выше в 2 раза:
источник
JS - 117
188Метод массива безумия
источник
C # (интерактивный компилятор Visual C #) , 141 байт
К сожалению, Tio / Mono, похоже, не поддерживает объявление универсального типа T , поэтому я вынужден вместо этого потерять несколько байтов с типом объекта .
Попробуйте онлайн!
источник