Bei einer Reihe von n
Elementen besteht die Herausforderung darin, eine Funktion zu schreiben, die alle Kombinationen von k
Elementen in dieser Menge auflistet .
Beispiel
Set: [1, 7, 4]
Input: 2
Output: [1,7], [1,4], [7,4]
Beispiel
Set: ["Charlie", "Alice", "Daniel", "Bob"]
Input: 2
Output ["Daniel", "Bob"], ["Charlie", "Alice"], ["Alice", "Daniel"], ["Charlie", "Daniel"], ["Alice", "Bob"], ["Charlie", "Bob"]
Regeln (bearbeitet)
- Die Reihenfolge der Ausgabe ist Ihre Wahl.
- Die Eingabe kann eine beliebige Art von Daten sein. Die Ausgabe sollte jedoch vom selben Typ sein wie die Eingabe. Wenn die Eingabe eine Liste von Ganzzahlen ist, sollte die Ausgabe auch eine Liste von Ganzzahlen sein. Wenn die Eingabe eine Zeichenfolge (Array von Zeichen) ist, sollte die Ausgabe ebenfalls eine Zeichenfolge sein.
- Der Code sollte mit einer beliebigen Anzahl von Eingabevariablen funktionieren.
- Sie können jede Programmiersprache verwenden.
- Die Antwort sollte in der Lage sein, alles (string, int, double ...) als Eingabe und Ausgabe zu verwenden.
- Alle integrierten Funktionen, die sich auf Kombinationen und Permutationen beziehen, sind verboten.
- Der kürzeste Code gewinnt (in Bytes).
- Tiebreaker: Stimmen.
- Dauer: 1 Woche.
PS Achten Sie auf extreme Eingaben wie negative Zahlen, 0 usw.
combos('ab', 1) -> ['a', 'b']
gültig?Antworten:
Haskell -
5746 BytesBring es an, Golfscripters.
Anwendungsfall (gleiche Funktion funktioniert polymorph):
quelle
Python (72)
Die Funktion
f
nimmt eine ListeS
und eine Nummerk
und gibt eine Liste aller Unterlisten mit einer Längek
von zurückS
. Anstatt alle Teilmengen aufzulisten und dann nach Größe zu filtern, erhalte ich bei jedem Schritt nur die Teilmengen der erforderlichen Größe.Ich würde gerne zur
S.pop()
Arbeit gehen, um das ErhaltenS[:1]
mit demS[1:]
späteren Bestehen zu kombinieren , aber es scheint die Liste zu viel zu verbrauchen.Um dem Einwand einer solchen Python-Lösung vorzubeugen, verstößt eine solche Python-Lösung aufgrund von Rekursionsbeschränkungen gegen die Regel "Der Code sollte in einer beliebigen Anzahl von Eingabevariablen funktionieren". Ich stelle fest, dass die stapellose Python-Implementierung keine Rekursionsbeschränkungen aufweist (obwohl ich sie nicht getestet habe diesen Code damit).
Demonstration:
quelle
Mathematica 10, 70 Zeichen
Nur eine Übersetzung der Haskell-Antwort.
Verwendungszweck:
quelle
Holzkohle , 23 Bytes
Probieren Sie es online aus! Der Link führt zur ausführlichen Version des Codes. Erläuterung:
quelle
Python - 129
s ist eine Liste, k ist die Größe der zu erzeugenden Kombinationen.
quelle
Python, 102
Rufen Sie c auf, um Folgendes auszuführen:
Es erhält alle Permutationen der Liste s und filtert diejenigen mit der Länge k.
quelle
Pyth , 28
Dies basiert (stark) auf der Antwort von Haskell.
Erläuterung:
Hinweis: Während die neueste Version von Pyth, 1.0.9, heute Abend veröffentlicht wurde und daher für diese Herausforderung nicht geeignet ist, funktioniert derselbe Code in 1.0.8 einwandfrei.
quelle
Haskell + Data.List , 44 Bytes
Probieren Sie es online aus!
Die 46 - Byte - Antwort ist ziemlich schwer zu schlagen , aber wenn man
tails
vonData.List
Ihnen 44 Bytes tun.quelle
05AB1E ,
1413 BytesInspiriert von @Neils Charcoal-Antwort , stimmen Sie ihn also unbedingt ab!
Probieren Sie es online aus oder überprüfen Sie einige weitere Testfälle .
Wenn Buildins erlaubt wären, könnten dies 2 Bytes sein :
Probieren Sie es online aus oder überprüfen Sie einige weitere Testfälle .
Erläuterung:
quelle
APL (NARS), 80 Zeichen, 160 Byte
Test und wie man es benutzt:
Die Ausgabe scheint in Ordnung zu sein ... aber Fehler sind möglich ...
In der Praxis wird void als Zilde festgelegt zurückgegeben, wenn das eingegebene Alpha außerhalb des Bereichs liegt. Wenn Alpha 1 ist, werden alle Elemente in seiner Menge zurückgegeben (stimmt das?).
Dies unten scheint ein paar Zeichen weniger, aber 2x langsamer oben:
quelle
JS - 117
188Array-Methoden-Wahnsinn
quelle
C # (Visual C # Interactive Compiler) , 141 Byte
Leider scheint Tio / Mono keine generische Typ- T- Deklaration zu unterstützen, daher bin ich gezwungen, stattdessen ein paar Bytes mit dem Objekttyp zu verlieren .
Probieren Sie es online aus!
quelle