Tâche
Étant donné une liste d'entiers séparés par des espaces en entrée, sortez tous les sous-ensembles non vides uniques de ces nombres que chaque sous-ensemble additionne à 0.
Cas de test
Entrée: 8 −7 5 −3 −2
Sortie:-3 -2 5
Critère gagnant
C'est le code-golf , donc le code le plus court en octets gagne!
3 3 -3 -3
?Réponses:
GolfScript, 41 caractères
Si vous ne vous souciez pas du format de sortie spécifique, vous pouvez raccourcir le code à 33 caractères.
Exemple (voir en ligne ):
la source
Brachylog (2), 9 caractères
Essayez-le en ligne!
la source
Python, 119 caractères
Énumère récursivement tous les 2 ^ n sous-ensembles et vérifie chacun d'eux.
la source
Python, 120
Je suis un personnage pire que la solution de Keith. Mais ... c'est trop proche pour ne pas poster. L'une de mes caractéristiques préférées du code-golf est la diversité des solutions de longueur similaire.
la source
Python (
128 137136)Merde
itertools.permutations
, pour avoir un nom si long!Solution de force brute. Je suis surpris que ce ne soit pas le plus court: mais je suppose que cela
itertools
gâche la solution.Non golfé:
Golfé (sortie moche):
Golfé (jolie sortie) (183):
import itertools as i
: importer le module itertools et l'appeleri
x=map(int,input().split())
: sépare l'entrée par des espaces, puis transforme les éléments des listes résultantes en entiers (2 3 -5
->[2, 3, -5]
)set (
sorted(j)
for a in range (1, len (x) +1) for j in i.permutations (x, a) if sum (j) == 0):Renvoie une liste de tous les sous-ensembles
x
, triés, où la somme est 0, puis obtient uniquement les éléments uniques(
set(...)
)Les tombes (`) autour
sorted(j)
sont un raccourci en Python pourrepr(sorted(j))
. La raison pour laquelle ceci est ici est que les ensembles en Python ne peuvent pas gérer les listes, donc la meilleure chose à faire est d'utiliser des chaînes avec une liste comme texte.la source
split()
fait une liste de chaînes, mais plus tard, vous appelezsum
les sous-ensembles de cette division.from itertools import*
repr()
C # - 384 caractères
OK, la programmation de style fonctionnel en C # n'est pas si courte , mais j'adore ! (En utilisant juste une énumération par force brute, rien de mieux.)
Formaté et commenté pour plus de lisibilité:
la source
SWI-Prolog 84
Cette version imprime la liste, au lieu d'essayer de trouver une liaison appropriée pour un terme dans un prédicat.
Procédé d'entrée
Pour mémoire, il s'agit de la version qui trouve une liaison pour satisfaire le prédicat:
Procédé d'entrée
La révision précédente contient une solution incomplète qui n'a pas réussi à supprimer l'ensemble vide.
la source
Mathematica
62 5738Code
Entrée est entré en tant que nombres entiers dans un tableau,
x
.Production
Explication
x[[1, 1]]
convertit l'entrée en une liste d'entiers.Subsets
génère tous les sous-ensembles à partir des entiers.Select....Tr@# == 0
donne tous les sous-ensembles dont le total est égal à 0.Grid
formate les sous-ensembles sélectionnés sous forme d'entiers séparés par des espaces.la source
Gelée , 6 octets
Essayez-le en ligne!
Juste pour être complet. Semblable à Brachylog, Jelly remonte également le défi, mais à l'heure actuelle, les nouvelles langues rivalisent normalement.
la source
05AB1E , 5 octets
Essayez-le en ligne!
Si l'entrée doit être délimitée par des espaces, l'ajout
#
de cette réponse est le seul changement requis.la source
J,
57535149 caractèresUsage:
la source
(<@":@(#~0=+/)@#"1 _~2#:@i.@^#)
enregistre 4 caractères.Stax , 8 octets CP437
Exécutez et déboguez en ligne!
Explication
Utilise la version non compressée (9 octets) pour expliquer.
la source
Given a list of space-delimited integers as input
; vous prenez cependant une liste en entrée.J , 34 octets
Essayez-le en ligne!
Comment
".
convertit l'entrée en une liste. ensuite:la source
Perl 6 , 51 octets
Essayez-le en ligne!
Renvoie une liste de sacs uniques totalisant 0. Un sac est un ensemble pondéré.
Explication:
la source
Rubis, 110 octets
Ajoutera un lien TIO plus tard.
Prend l'entrée de stdin comme une liste de nombres, par exemple
8 −7 5 −3 −2
Comment ça marche: Il convertit l'entrée en un tableau de nombres. Obtient toutes les permutations des longueurs de 1 à la longueur du tableau. Il les ajoute au tableau de sortie s'ils totalisent 0. Il génère le tableau sans doublons.
Sortie pour l'entrée échantillon:
[[-3, -2, 5]]
la source