Aufgabe:
Gibt ein Array mit allen möglichen Paaren zwischen den Elementen eines Arrays zurück.
Beispiel
Von der a=["a", "b", "c", "d"];
Rückkehr b=[["a","b"],["a","c"],["a","d"],["b","c"],["b","d"],["c","d"]]
.
Paare können in beliebiger Reihenfolge sein, solange alle möglichen Kombinationen enthalten sind und natürlich ["b","d"]
gleich sind ["d","b"]
.
Eingang
Array eindeutiger Zeichenfolgenelemente, die aus Zeichen der Klasse bestehen [a-z]
.
Ausgabe
2d-Array, das alle möglichen Paare von Elementen des Eingabearrays enthält.
Testfälle
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"]]
Hinweis: Ich konnte kein Duplikat für diese Herausforderung finden. Wenn es einen gibt, benachrichtige mich mit einem Kommentar, um die Frage fallen zu lassen.
code-golf
array-manipulation
combinatorics
alexandros84
quelle
quelle
["c","b","a"]
zurückkehren?Antworten:
Gelee , 2 Bytes
Probieren Sie es online aus!
quelle
ÇK€Y
in der Fußzeile.Haskell , 29 Bytes
Probieren Sie es online aus! Anwendungsbeispiel:
f ["a","b","c"]
Ausbeuten[("a","b"),("a","c"),("b","c")]
.Mit dem Flag
-XTupleSections
kann dies auf 27 Bytes verkürzt werden, das Flag müsste jedoch gezählt werden:Probieren Sie es online aus!
quelle
f l=l
.Mathematica, 14 Bytes
Eingang
quelle
Haskell, 25 Bytes
Probieren Sie es online aus!
Outer (
x
) und Inner (y
) durchlaufen die Eingabeliste und behalten das Paar(x,y)
nur beix < y
.quelle
05AB1E , 3 Bytes
Code:
Verwendet die 05AB1E- Codierung. Probieren Sie es online aus!
Erläuterung:
quelle
vim,
5048Nimmt Eingaben in das Formular vor
und Ausgänge als
Erläuterung
Erstens
AX<esc>
hängt eineX
mit dem Eingang , um 2längig Eingang zu handhaben , die aus Gründen notwendig ist , die klar in Kürze werden werden.Dann kommt das erste rekursive Makro der Form
qq...@qq@q
. (Makroq
aufzeichnen, am Ende erneut ausführen, die Aufzeichnung beenden und dann einmal selbst ausführen.)Yp
Dupliziert im Hauptteil des Makros die aktuelle Zeile,l
bricht aus dem Makro aus, wenn die Zeile jetzt ein Zeichen lang ist, undX
löscht die erstes Zeichen in der Zeile. Dies hat das Endergebnis der ProduktionWenn
X
wir das s vorerst ignorieren , müssen wir uns zumabcdX
Beispiel nur in verwandelnab / ac / ad / aX
. Dies wird mit dem zweiten rekursiven Makro erreichtqr...@rq
.In diesem Makro duplizieren wir zuerst die Zeile (
Yp
) und löschen dann alles außer den ersten beiden Zeichen, indem wir zwei (ll
) nach rechts bewegen und bis zum Ende der Zeile (D
) löschen . Da sich der Cursor jetzt auf dem zweiten Zeichen der Zeile befindet,kx
wird das zweite Zeichen aus der vorherigen Zeile gelöscht, das zufällig mit dem ersten Zeichen in der Zeile gepaart wurde. Dieser Vorgang wird dannh
aufgrund der rekursiven Natur des Makros so oft wie nötig ab dem Anfang der Zeile ( ) wiederholt .Es geht jetzt nur noch darum, das Makro in jeder Zeile auszuführen, was mit erreicht werden kann
:g/./norm@r
(Ich bin nicht sicher, warum sich dies anders verhält als:%norm@r
, aber es reicht zu sagen, dass letzteres nicht wie beabsichtigt funktioniert.) Zeilen mitX
werden gelöscht mit:g/X/d
, und die Leerzeilen am Ende links als Ergebnis der Konstruktion desr
Makros werden mit bereinigtdG
.quelle
Oktave, 23 Bytes
Probieren Sie es online aus!
quelle
Python 3 , 44 Bytes
Probieren Sie es online aus!
Nimmt die Eingabe als einzelne Funktionsparameter auf.
quelle
Brachylog , 5 Bytes
Probieren Sie es online aus!
Wie es funktioniert
quelle
R , 18 Bytes
liest die Liste von stdin und gibt eine Matrix zurück, in der die Spalten Paare sind.
Probieren Sie es online aus!
quelle
Python, 53 Bytes
2 Bytes dank @CalculatorFeline gespeichert
Probieren Sie es online aus!
quelle
a[i+1:]
kann seina[:i]
Oktave ,
4948 BytesAnonyme Funktion, die das eingebaute (
nchoosek
) vermeidet .Probieren Sie es online aus!
Erläuterung
x+j*x'
verwendet Broadcasting, um eine Matrix komplexer Zahlen zu erstellen, bei der der Real- und der Imaginärteil alle Paare von Codepunkten aus der Eingabe sindx
.y=triu(...,1)
Hält den oberen dreieckigen Teil ohne die Diagonale, sodass der Rest der Elemente Null ist. Das Ergebnis wird der Variablen zugeordnety
.y=(...)(~~y)
behält die Nicht-Null-Elemente in Form eines Spaltenvektors bei, der der Variablen zugewiesen isty
.imag(...)
undreal(...)
extrahieren Sie die Real- und Imaginärteile.[... ... '']
konvertiert zurück in char, um die Ausgabe zu erstellen.quelle
Pari / GP , 34 Bytes
Probieren Sie es online aus!
quelle
Python ≥ 2,7, 55 Bytes
repl.it!
quelle
Perl 6 , 17 Bytes
Puh, das ist ein langer Methodenname.
quelle
Scala, 17 Bytes
quelle
Pyth ,
74 Bytes-3 Bytes dank Leaky Nun !
Probieren Sie es online aus!
quelle
.cQ2
?.C
beim Durchsehen der Liste gesehen. Schöner Fang!Ruby ,
38 3424 BytesDanke Seims für die Idee, die 10 Bytes gespart hat.
Probieren Sie es online aus!
quelle
->x{x.combination(2).to_a}
spart einige Bytes :)JavaScript ES6, 52 Bytes
Wenn es so etwas
flatMap
gäbe, würde das viele Bytes sparen.quelle
a=>[for(x of[...a])for(y of(a.shift(),a))[x,y]]
.[x,y]
am Ende ist das einfache Bit, es ist nur ein Array-Literal.Python , 55 Bytes
Probieren Sie es online aus!
Länger als andere Python-Antworten, aber es verwendet eine andere Technik, daher denke ich, dass es sich lohnt, etwas zu posten.
quelle
Japt , 2 Bytes
Testen Sie es (
-Q
Flag nur zu Visualisierungszwecken)quelle
Python, 64 Bytes
quelle
Oktave, 38 Bytes
Eine weitere Antwort, um
nchoosek
Einbauten zu vermeiden .Probieren Sie es online aus!
quelle
Clojure, 42 Bytes
Gibt eine Reihe von Mengen zurück :)
quelle
Python, 74 Bytes
quelle
Javascript (ES 5), von 108 bis 78 Bytes
Ich poste meine Antwort heute, aber ich verspreche offensichtlich, meine eigene Antwort nicht zu akzeptieren:
quelle
a
, müssen Sie es definieren, aber Sie können eine Funktion von machenx
.for(i=n+1;i<(x.length);i++)
zufor(i=n;++i<x.length;)
. Ebenso können Sien<(x.length-1);n++
zun++<x.length-1
J , 17 Bytes
Probieren Sie es online aus!
Erläuterung
quelle