Aufgabe
Geben Sie bei einer Liste von durch Leerzeichen getrennten Ganzzahlen als Eingabe alle eindeutigen nicht leeren Teilmengen dieser Zahlen aus, die jede Teilmenge mit 0 summiert.
Testfall
Eingabe: 8 −7 5 −3 −2
Ausgabe:-3 -2 5
Gewinnkriterium
Das ist Code-Golf , also gewinnt der kürzeste Code in Bytes!
3 3 -3 -3
?Antworten:
GolfScript, 41 Zeichen
Wenn Sie sich nicht für das jeweilige Ausgabeformat interessieren, können Sie den Code auf 33 Zeichen kürzen.
Beispiel (siehe online ):
quelle
Brachylog (2), 9 Zeichen
Probieren Sie es online!
quelle
Python, 119 Zeichen
Listet alle 2 ^ n Teilmengen rekursiv auf und überprüft jede.
quelle
Python, 120
Ich bin ein schlechterer Charakter als Keith. Aber ... das ist zu nah, um es nicht zu posten. Eines meiner Lieblingsmerkmale von Code-Golf ist, wie unterschiedlich Lösungen mit ähnlicher Länge sein können.
quelle
Python (
128 137136)Verdammt, dass du
itertools.permutations
so einen langen Namen hast !Brute-Force-Lösung. Ich bin überrascht, dass es nicht die kürzeste ist, aber ich vermute, dass sie
itertools
die Lösung ruiniert.Ungolfed:
Golf (hässliche Leistung):
Golf (ziemlich gute Leistung) (183):
import itertools as i
: Importieren des itertools-Moduls und Aufrufeni
x=map(int,input().split())
: trennt die Eingabe durch Leerzeichen und wandelt dann die Elemente der resultierenden Listen in Ganzzahlen um (2 3 -5
->[2, 3, -5]
)set (
sorted(j)
für a in range (1, len (x) +1) für j in i.permutations (x, a), wenn summe (j) == 0):Gibt eine Liste aller Teilmengen in
x
sortiert zurück, wobei die Summe ist 0 und erhält dann nur die eindeutigen Elemente(
set(...)
)Bei den Gräbern (`) handelt es sich um die
sorted(j)
Abkürzung für Pythonrepr(sorted(j))
. Der Grund dafür ist, dass Sets in Python keine Listen verarbeiten können. Daher ist es am besten, Zeichenfolgen mit einer Liste als Text zu verwenden.quelle
split()
erstellt eine Liste von Zeichenfolgen, aber später rufen Siesum
die Teilmengen dieser Teilung auf.from itertools import*
repr()
C # - 384 Zeichen
OK, funktionales Programmieren in C # ist nicht so kurz , aber ich liebe es! (Mit nur einer Brute-Force-Aufzählung, nichts Besseres.)
Zur besseren Lesbarkeit formatiert und kommentiert:
quelle
SWI-Prolog 84
Diese Version gibt die Liste aus, anstatt zu versuchen, eine geeignete Bindung für einen Begriff in einem Prädikat zu finden.
Eingabe Methode
Für den Datensatz ist dies die Version, die eine Bindung findet, um das Prädikat zu erfüllen:
Eingabe Methode
Die vorherige Version enthält eine unvollständige Lösung, bei der es nicht gelungen ist, leere Sätze zu entfernen.
quelle
Mathematica
62 5738Code
Eingabe eingegeben als ganze Zahlen in einem Array
x
.Ausgabe
Erläuterung
x[[1, 1]]
konvertiert die Eingabe in eine Liste von Ganzzahlen.Subsets
generiert alle Teilmengen aus den ganzen Zahlen.Select....Tr@# == 0
gibt alle Untermengen mit einer Summe von 0 an.Grid
formatiert die ausgewählten Teilmengen als durch Leerzeichen getrennte Ganzzahlen.quelle
Gelee , 6 Bytes
Probieren Sie es online!
Nur der Vollständigkeit halber. Ähnlich wie Brachylog gibt auch Jelly die Herausforderung bekannt, aber inzwischen konkurrieren neuere Sprachen normal.
quelle
05AB1E , 5 Bytes
Probieren Sie es online!
Wenn die Eingabe durch Leerzeichen getrennt werden muss, muss nur vor
#
dieser Antwort eine Änderung vorgenommen werden.quelle
J,
57535149 ZeichenVerwendung:
quelle
(<@":@(#~0=+/)@#"1 _~2#:@i.@^#)
speichert 4 Zeichen.Stax , 8 Bytes CP437
Online ausführen und debuggen!
Erläuterung
Verwendet die entpackte Version (9 Bytes), um zu erklären.
quelle
Given a list of space-delimited integers as input
; Sie nehmen jedoch eine Liste als Eingabe.J , 34 Bytes
Probieren Sie es online!
Wie
".
wandelt die Eingabe in eine Liste um. dann:quelle
Perl 6 , 51 Bytes
Probieren Sie es online!
Gibt eine Liste einzigartiger Taschen zurück, die sich zu 0 summieren. Eine Tasche ist ein gewichtetes Set.
Erläuterung:
quelle
Ruby, 110 Bytes
Fügt später einen TIO-Link hinzu.
Übernimmt die Eingabe von stdin als Liste von Zahlen, z
8 −7 5 −3 −2
Wie es funktioniert: Es konvertiert die Eingabe in ein Array von Zahlen. Ruft alle Permutationen der Längen von 1 bis zur Länge des Arrays ab. Sie werden dem Ausgabearray hinzugefügt, wenn sie eine Summe von 0 ergeben. Das Array wird ohne Duplikate ausgegeben.
Ausgabe für die Beispieleingabe:
[[-3, -2, 5]]
quelle