Zadanie:
Zwraca tablicę ze wszystkimi możliwymi parami między elementami tablicy.
Przykład
Od a=["a", "b", "c", "d"];
powrotu b=[["a","b"],["a","c"],["a","d"],["b","c"],["b","d"],["c","d"]]
.
Pary mogą być w dowolnej kolejności, o ile wszystkie możliwe kombinacje są uwzględnione i oczywiście ["b","d"]
są takie same ["d","b"]
.
Wejście
Tablica unikatowych elementów łańcuchowych złożonych z znaków z klasy [a-z]
.
Wynik
Tablica 2d zawierająca wszystkie możliwe pary elementów tablicy wejściowej.
Przypadki testowe
input=["a","b","c"];
//output=[["a","b"],["a","c"],["b","c"]]
input=["a","b","c","d","e"];
//output=[["a","b"],["a","c"],["a","d"],["a","e"],["b","c"],["b","d"],["b","e"],["c","d"],["c","e"],["d","e"]]
Uwaga: nie mogłem znaleźć duplikatu tego wyzwania. Jeśli istnieje, powiadom mnie komentarzem, aby zostawić pytanie.
code-golf
array-manipulation
combinatorics
alexandros84
źródło
źródło
["c","b","a"]
zwrócić?Odpowiedzi:
Galaretka , 2 bajty
Wypróbuj online!
źródło
ÇK€Y
w stopce.Haskell , 29 bajtów
Wypróbuj online! Przykładowe użycie:
f ["a","b","c"]
daje[("a","b"),("a","c"),("b","c")]
.Za pomocą flagi
-XTupleSections
można to skrócić do 27 bajtów, jednak flaga musi zostać policzona:Wypróbuj online!
źródło
f l=l
.Mathematica, 14 bajtów
Wejście
źródło
Haskell, 25 bajtów
Wypróbuj online!
Pętla zewnętrzna (
x
) i wewnętrzna (y
) przechodzą przez listę wejść i zachowują parę(x,y)
tylko wtedy, gdyx < y
.źródło
05AB1E , 3 bajty
Kod:
Wykorzystuje kodowanie 05AB1E . Wypróbuj online!
Wyjaśnienie:
źródło
vim,
5048Pobiera dane wejściowe w formularzu
i wyniki jako
Wyjaśnienie
Najpierw
AX<esc>
dołączaX
do danych wejściowych, aby obsłużyć dane wejściowe o 2 długościach, co jest konieczne z powodów, które wkrótce staną się jasne.Potem pojawia się pierwsze makro rekurencyjne formy
qq...@qq@q
. (Nagraj makroq
, uruchom ponownie na końcu, zakończ nagrywanie, a następnie uruchom się raz.) W treści makraYp
duplikuje bieżącą linię,l
wyłamuje się z makra, jeśli linia ma teraz jeden znak, iX
usuwa pierwszy znak w linii. To ma końcowy wynik produkcjiIgnorując na razie
X
s, wszystko, co musimy zrobić, to zmienićabcdX
na przykład wab / ac / ad / aX
. Osiąga się to dzięki drugiemu makro rekurencyjnemu,qr...@rq
.W tym makrze najpierw kopiujemy wiersz (
Yp
), a następnie usuwamy wszystko oprócz pierwszych dwóch znaków, przesuwając w prawo dwa (ll
) i usuwając do końca wiersza (D
). Ponieważ kursor znajduje się teraz nakx
drugim znaku linii, usunie drugi znak z poprzedniej linii, który jest akurat tym, który został właśnie sparowany z pierwszym znakiem w linii. Proces ten jest następnie powtarzany, zaczynając od początku wiersza (h
) tyle razy, ile jest to konieczne ze względu na rekurencyjny charakter makra.Teraz wystarczy uruchomić makro w każdej linii, co można osiągnąć za pomocą
:g/./norm@r
(nie jestem pewien, dlaczego zachowuje się inaczej niż:%norm@r
, ale wystarczy powiedzieć, że ten ostatni nie działa zgodnie z przeznaczeniem). Linie za pomocąX
są usuwane za pomocą:g/X/d
, a puste linie na końcu po lewej w wyniku budowyr
makra są czyszczone za pomocądG
.źródło
Oktawa, 23 bajty
Wypróbuj online!
źródło
Python 3 , 44 bajty
Wypróbuj online!
Pobiera dane wejściowe jako indywidualne parametry funkcji.
źródło
Brachylog , 5 bajtów
Wypróbuj online!
Jak to działa
źródło
R , 18 bajtów
czyta listę ze standardowego wejścia, zwraca macierz, w której kolumny są parami.
Wypróbuj online!
źródło
Python, 53 bajty
2 bajty zapisane dzięki @CalculatorFeline
Wypróbuj online!
źródło
a[i+1:]
może byća[:i]
Oktawa ,
4948 bajtówAnonimowa funkcja pozwalająca uniknąć wbudowanej funkcji (
nchoosek
).Wypróbuj online!
Wyjaśnienie
x+j*x'
wykorzystuje rozgłaszanie do zbudowania macierzy liczb zespolonych, w których rzeczywiste i urojone części są parami punktów kodowych z danych wejściowychx
.y=triu(...,1)
utrzymuje górną trójkątną część z wyłączeniem przekątnej, dzięki czemu pozostałe elementy są zerowe. Wynik jest przypisany do zmiennejy
.y=(...)(~~y)
zachowuje niezerowe elementy w postaci wektora kolumny, który jest przypisany do zmiennejy
.imag(...)
ireal(...)
wydobyć prawdziwe i urojone części.[... ... '']
konwertuje z powrotem na char, aby zbudować wynik.źródło
Pari / GP , 34 bajty
Wypróbuj online!
źródło
Python ≥ 2,7, 55 bajtów
repl.it!
źródło
Perl 6 , 17 bajtów
Uff, to długa nazwa metody.
źródło
Scala, 17 bajtów
źródło
Pyth ,
74 bajty-3 bajty dzięki Dziurawej Zakonnicy !
Wypróbuj online!
źródło
.cQ2
?.C
przeglądając listę. Dobry chwyt!Rubin ,
38 3424 bajtówDzięki Wygląda na pomysł, który oszczędził 10 bajtów.
Wypróbuj online!
źródło
->x{x.combination(2).to_a}
zapisuje niektóre bajty :)JavaScript ES6, 52 bajty
Gdyby tak było
flatMap
, zaoszczędziłoby to wiele bajtów.źródło
a=>[for(x of[...a])for(y of(a.shift(),a))[x,y]]
.[x,y]
końcu jest łatwy kawałek, to po prostu literał tablicowy.Python , 55 bajtów
Wypróbuj online!
Dłuższy niż inne odpowiedzi w Pythonie, ale używa innej techniki, więc myślę, że warto opublikować.
źródło
Japt , 2 bajty
Przetestuj (
-Q
flaga tylko do celów wizualizacji)źródło
Python, 64 bajty
źródło
Oktawa, 38 bajtów
Kolejna odpowiedź, aby uniknąć
nchoosek
wbudowanego.Wypróbuj online!
źródło
Clojure, 42 bajty
Zwraca zestaw zestawów :)
źródło
Python, 74 bajty
źródło
JavaScript (ES 5), od 108 do 78 bajtów
Dzisiaj zamieszczam swoją odpowiedź, ale oczywiście obiecuję, że nie zaakceptuję własnej odpowiedzi:
źródło
a
, musisz to zdefiniować, ale możesz wykonać funkcjęx
.for(i=n+1;i<(x.length);i++)
nafor(i=n;++i<x.length;)
. Podobnie możesz zmienićn<(x.length-1);n++
nan++<x.length-1
J , 17 bajtów
Wypróbuj online!
Wyjaśnienie
źródło