Biorąc pod uwagę niepustą listę liczb całkowitych, wypisz wszystkie możliwe partycjonowanie listy, gdzie każda partycja jest niepustą listą podrzędną.
Tak więc dla listy [1, 2, 3, 4]
wynik jest następujący:
[[1, 2, 3, 4]]
[[1, 2, 3], [4]]
[[1, 2], [3, 4]]
[[1, 2], [3], [4]]
[[1], [2, 3, 4]]
[[1], [2, 3], [4]]
[[1], [2], [3, 4]]
[[1], [2], [3], [4]]
Kolejność list w danych wyjściowych nie ma znaczenia, więc [[1, 2, 3, 4]]
może być pierwsza, ostatnia lub gdziekolwiek. Kolejność elementów musi zostać zachowana.
To jest golf golfowy, więc wygrywa najkrótsza odpowiedź.
Powiązane: Podziel listę na części!
[...]
w formacie wyjściowym? (Tak długo, jak partycje są wyraźnie oddzielone, np. Przez linie).:
jako separatora listy, ale w danych wyjściowych same partycje nie są zawinięte w dodatkową parę[...]
.[
i ostatni]
z każdej linii?Odpowiedzi:
Galaretka , 2 bajty
Wypróbuj online!
źródło
Retina ,
2719 bajtówLiczba bajtów zakłada kodowanie ISO 8859-1.
Wypróbuj online!
Wyjaśnienie
Oczywiście oblicza to wszystkie partycje przy użyciu przetwarzania ciągów. Podstawową ideą jest to, że możemy wygenerować wszystkie partycje, decydując o każdej z nich
,
indywidualnie czy chcemy tam podzielić listę. Tego rodzaju rzeczy można wykonać w siatkówce, dopasowując,
kolejno i używając zamiennika, który daje oba możliwe wyniki.Dane wejściowe działają jak przypadek podstawowy: partycja, w której wszystkie elementy wciąż znajdują się na jednej liście.
Teraz wielokrotnie (
+
) dopasowujemy pierwszy (1
) przecinek (,
) w każdym wierszu (%
) (traktując ten wiersz jako osobny ciąg, który jest istotny$'
i `` 1 $ '' w podstawieniu).Ten przecinek zostanie zastąpiony przez:
Pamiętaj, że wszystko przed meczem i po meczu i tak pozostaje w ciągu, więc pełny wynik jest w rzeczywistości
$`;$'¶$`];[$'
wyjaśnia, dlaczego wstawiamy sufiks i prefiks w tej kolejności.Ta pętla zatrzymuje się, gdy znikną wszystkie przecinki.
Na koniec zamień średniki ponownie przecinkami, aby dopasować format wejściowy.
źródło
Pure Bash, 28
Tutaj listy są oddzielone dwukropkiem i zawarte w nawiasach kwadratowych. Na przykład w pytaniu będzie lista wejściowa,
1:2:3:4
a wynikiem będzie:Wypróbuj online .
${1//:/REPLACEMENT}
zastępuje dwukropek w$1
z{:,]:[\}
[1{:,]:[}2{:,]:[}3{:,]:[}4]
\
ucieczki) powoduje, że rozszerzenie nawiasu następuje na końcu i daje pożądany rezultat.Jeśli konieczne jest dokładne dopasowanie do podanego
[[ , , ...]]
formatu, możemy to zrobić w zamian:Pure Bash, 47
Wypróbuj online .
źródło
Pyth , 2 bajty
Z wejściem
[1, 2, 3, 4]
(na przykład).Objaśnienie :
./
jest operatorem partycji. Zwraca wszystkie podziały listy wejściowej na rozłączne podlisty. Dane wejściowe są domyślnie podawane do programu.Przetestuj online!
źródło
05AB1E , 5 bajtów
Wypróbuj online!
źródło
.œ
:: Wypróbuj online.Python 3 ,
827266 bajtówWypróbuj online!
-5 bajtów dzięki @JonathanAllan
źródło
l
w końcuHaskell ,
595549 bajtówWypróbuj online!
Rozwiązanie rekurencyjne. Przykład użycia:
p [1,2,3]
zwraca[[[1,2,3]],[[1,2],[3]],[[1],[2,3]],[[1],[2],[3]]]
.-6 bajtów dzięki xnor !
źródło
do a:b<-p r;[(x:a):b,[x]:a:b]
(zmienia to kolejność list).<*>
robi dokładnie to, co chcesz[\(a:b)->(x:a):b,([x]:)]<*>p r
, ale to już niedo
, ponieważ pierwszy lambda wydaje się potrzeba dopasowania wzoru.J , 42 bajty
Generuje wszystkie partycje podlisty, tworząc klucze do podlist listy partycji o długości 1 i iterując do długości listy danych wejściowych. Każda podlista partycji jest następnie tworzona przez wybranie z kluczy.
Na przykład tutaj jest proces tworzenia kluczy dla listy o długości 4.
Wypróbuj online!
źródło
J ,
2624 bajtówWypróbuj online!
źródło
Brachylog , 2 bajty
Wypróbuj online!
Podanie funkcji, które wytwarza dane wyjściowe poprzez działanie jako generator. (Łącze TIO zawiera dodatkowy kod, aby przekształcić go w pełny program do celów testowych.)
Nawiasem mówiąc, chociaż nie jest to technicznie wbudowane, jest to tak powszechnie używane w Brachylog, że a) prawdopodobnie zasługuje na reprezentację jednobajtową, i b)
c
wbudowane może przyjąć parametr, aby wprowadzić twierdzenia na temat swoich danych wejściowych (podczas gdy w przypadku większości wbudowanych parametr mówi o tym, jak wytworzyć wynik ).Wyjaśnienie
źródło
APL, 26 bajtów
Test:
Wyjaśnienie:
X←⍴1↓⍵
:X
jest długością⍵
(listy wejściowej) z pominiętym pierwszym elementem⍳2*X
: liczby [1..2 ^ X](X⍴2)⊤
: reprezentacja tych liczb przez base-2 zX
pozycjami (tzn.X
sama się zawinie0
).↓⍉
: obróć matrycę i podziel ją wzdłuż linii (⊤
daje w wyniku macierz z liczbami wzdłuż kolumn), dając tablicę wektorów bitowych1,¨
: wstaw 1 do każdego wektora bitowego.⊂∘⍵¨
: dla każdego wektora bitowego, podzielone⍵
dla każdego 1.źródło
Haskell , 45 bajtów
Wypróbuj online!
Znalazłem to rozwiązanie jakiś czas temu, myśląc o końcówce Haskell .
źródło
Pyton , 90 bajtów
outgolfed by ovs (robiąc coś, o czym myślałem, że próbowałem pracować: p)
Funkcja rekurencyjna, która tworzy listę partycji z wycinków wejścia z ogonem osiągniętym, gdy wycinki mają długość 1.
Wypróbuj online!
exec
Zapisuje 4 bajty ponadwhile
lub 3 nafor
pętli (poniżej), ponieważ oznacza to, że tylko dwa\n
s, zamiast dwóch poziomów wcięć, dzięki czemu cała funkcja się na jednej linii (przy celu krojenia nie ma znaczenia).źródło
Python 3 , 67 bajtów
Wypróbuj online!
źródło
Haskell, 59 bajtów
źródło
Rubin ,
6257 bajtówWypróbuj online!
Jak to działa:
źródło
JavaScript (ES6), 87 bajtów
Objaśnienie:
b
jest listą poprzednich podlist,c
jest bieżącą podlistą (która zaczyna się jako pierwszy element tablicy, ponieważ musi znajdować się w pierwszej podlistie), podczas gdyd
jest listą wszystkich podlist. Reszta elementów tablicy jest następnie rekurencyjnie przetwarzana. W każdym przypadku istnieją dwie opcje: albo następny element zostanie dołączony do bieżącej listy podrzędnej, albo bieżąca lista podrzędna zostanie ukończona, a następny element rozpocznie nową podlistę. Wyniki rekurencyjne są następnie łączone razem. Gdy tablica jest wyczerpana, wynikiem jest lista wszystkich podlist.źródło
APL (NARS) 38 znaków, 76 bajtów
to używa funkcji Nars 11 1‼ kk, ale jest bardzo wolne, nie nadaje się do tablicy 9 elementów już ...
poniżej znajduje się funkcja, która nie korzysta z wbudowanego:
widzimy typ każdego wyniku:
Nie wiem jak to działa, to tylko heurystyczna próba ...
Możliwe Popełniam błąd; obie funkcje budują partycje listy bez względu na dane wejściowe i nie tylko 1 2 ... n.
źródło
Aksjomat, 251 bajtów
Jeśli ktoś znajdzie coś lepszego ... Ungof i przetestuj:
Jeśli to za dużo miejsca, powiedz to i usuwam przykłady ...
źródło