Biorąc pod uwagę zestaw n
elementów, wyzwaniem jest napisanie funkcji, która wymienia wszystkie kombinacje k
elementów w tym zestawie.
Przykład
Set: [1, 7, 4]
Input: 2
Output: [1,7], [1,4], [7,4]
Przykład
Set: ["Charlie", "Alice", "Daniel", "Bob"]
Input: 2
Output ["Daniel", "Bob"], ["Charlie", "Alice"], ["Alice", "Daniel"], ["Charlie", "Daniel"], ["Alice", "Bob"], ["Charlie", "Bob"]
Reguły (edytowane)
- Kolejność danych wyjściowych jest do wyboru.
- Dane wejściowe mogą być dowolnego rodzaju danych. Ale dane wyjściowe powinny być tego samego typu co dane wejściowe. Jeśli wejściem jest lista liczb całkowitych, wyjściem powinna być również lista liczb całkowitych. Jeśli dane wejściowe to ciąg znaków (tablica znaków), dane wyjściowe również powinny być ciągiem znaków.
- Kod powinien działać z dowolną liczbą zmiennych wejściowych.
- Możesz użyć dowolnego języka programowania.
- Odpowiedź powinna umożliwiać użycie dowolnego elementu (string, int, double ...) jako wejścia i wyjścia.
- Wszelkie wbudowane funkcje związane z kombinacjami i permutacjami są zabronione.
- Najkrótszy kod wygrywa (pod względem bajtów).
- Tiebreaker: głosy.
- Czas trwania: 1 tydzień.
PS Uważaj na ekstremalne dane wejściowe, takie jak liczby ujemne, 0 itd.
combos('ab', 1) -> ['a', 'b']
ważny?Odpowiedzi:
Haskell -
5746 bajtówDajcie spokój, golfiści.
Przypadek użycia (ta sama funkcja działa polimorficznie):
źródło
Python (72)
Funkcja
f
pobiera listęS
i liczbęk
i zwraca listę wszystkich podlist długościk
dniaS
. Zamiast wyświetlać wszystkie podzestawy, a następnie filtrować według rozmiaru, na każdym etapie otrzymuję tylko podzbiory wymaganego rozmiaru.Chciałbym zabrać się
S.pop()
do pracy, aby później połączyć sięS[:1]
z zaliczeniemS[1:]
, ale wydaje się, że ta lista pochłania zbyt wiele.Aby zapobiec sprzeciwowi, każde takie rozwiązanie Pythona łamie zasadę, że „Kod powinien działać w dowolnej liczbie zmiennych wejściowych” z powodu ograniczeń rekurencji, zauważę, że implementacja Pythona bez stosu nie ma limitów rekurencji (chociaż tak naprawdę nie testowałem ten kod).
Demonstracja:
źródło
Mathematica 10, 70 znaków
Tylko tłumaczenie odpowiedzi Haskella.
Stosowanie:
źródło
Węgiel , 23 bajty
Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:
źródło
Python - 129
s jest listą, k jest rozmiarem kombinacji do wytworzenia.
źródło
Python, 102
Zadzwoń do c, aby uruchomić:
Pobiera wszystkie permutacje z listy i filtruje te o długości k.
źródło
Pyth , 28
Jest to (w dużej mierze) oparte na odpowiedzi Haskella.
Wyjaśnienie:
Uwaga: Chociaż najnowsza wersja Pyth 1.0.9 została wydana dziś wieczorem i dlatego nie kwalifikuje się do tego wyzwania, ten sam kod działa poprawnie w wersji 1.0.8.
źródło
Haskell + Data.List , 44 bajty
Wypróbuj online!
W 46 bajt Odpowiedź jest dość trudny do pobicia, ale jeśli masz
tails
zeData.List
można zrobić 44 bajtów.źródło
05AB1E ,
1413 bajtówZainspirowany odpowiedzią na węgiel drzewny @Neil , więc upewnij się, że go głosujesz!
Wypróbuj online lub sprawdź kilka innych przypadków testowych .
Gdyby wbudowane były dozwolone, mogłyby to być 2 bajty :
Wypróbuj online lub sprawdź kilka innych przypadków testowych .
Wyjaśnienie:
źródło
APL (NARS), 80 znaków, 160 bajtów
test i jak go używać:
wynik wydaje się ok ... ale błąd jest możliwy ...
W praktyce zwraca wartość void ustawioną jako Zilde, jeśli wprowadzona alfa jest poza zakresem; jeśli alfa ma wartość 1, zwraca wszystkie elementy ze swojego zbioru (czy ma rację?);
To poniżej wydaje się kilka char mniej, ale 2x wolniej powyżej:
źródło
JS - 117
188Szaleństwo metody tablicowej
źródło
C # (interaktywny kompilator Visual C #) , 141 bajtów
Niestety, Tio / Mono nie wydaje się obsługiwać ogólnej deklaracji typu T , więc zamiast tego jestem zmuszony stracić kilka bajtów z typem obiektu .
Wypróbuj online!
źródło