Tarefa
Dada uma lista de números inteiros delimitados por espaço como entrada, produza todos os subconjuntos não vazios exclusivos desses números que cada subconjunto soma a 0.
Caso de teste
Entrada: 8 −7 5 −3 −2
Saída:-3 -2 5
Critério vencedor
Isso é código-golfe , então o código mais curto em bytes vence!
3 3 -3 -3
?Respostas:
GolfScript, 41 caracteres
Se você não se importa com o formato de saída específico, pode encurtar o código para 33 caracteres.
Exemplo (consulte online ):
fonte
Brachylog (2), 9 caracteres
Experimente online!
fonte
Python, 119 caracteres
Enumera todos os subconjuntos 2 ^ n recursivamente e verifica cada um.
fonte
Python, 120
Sou um personagem pior que a solução de Keith. Mas ... isso está muito perto para não postar. Um dos meus recursos favoritos do code-golf é o quão diferentes soluções de comprimento semelhante podem ser.
fonte
Python (
128137136)Maldito,
itertools.permutations
por ter um nome tão longo!Solução de força bruta. Estou surpreso que não seja o mais curto: mas acho
itertools
estraga a solução.Ungolfed:
Golfe (saída feia):
Golfe (saída bonita) (183):
import itertools as i
: importando o módulo itertools e chamando-oi
x=map(int,input().split())
: separa a entrada por espaços e transforma os itens das listas resultantes em números inteiros (2 3 -5
->[2, 3, -5]
)set (
sorted(j)
para um no intervalo (1, len (x) +1) para j em i.permutations (x, a) if sum (j) == 0):Retorna uma lista de todos os subconjuntos em
x
, classificados, onde a soma é 0 e, em seguida, obtém apenas os itens exclusivos(
set(...)
)Os túmulos (`) ao redor
sorted(j)
são uma abreviação para Pythonrepr(sorted(j))
. A razão pela qual isso está aqui é porque os conjuntos no Python não podem manipular listas, então a próxima melhor coisa é usar cadeias com uma lista como texto.fonte
split()
faz uma lista de seqüências de caracteres, mas depois você está chamandosum
os subconjuntos dessa divisão.from itertools import*
repr()
C # - 384 caracteres
OK, a programação de estilo funcional em C # não é tão curta , mas eu adoro ! (Usando apenas uma enumeração de força bruta, nada melhor.)
Formatado e comentado para mais legibilidade:
fonte
SWI-Prolog 84
Esta versão imprime a lista, em vez de tentar encontrar uma ligação apropriada para um termo em um predicado.
Método de entrada
Para o registro, esta é a versão que encontra uma ligação para satisfazer o predicado:
Método de entrada
A revisão anterior contém uma solução incompleta que não conseguiu remover o conjunto vazio.
fonte
Mathematica
62 5738Código
Entrada inserida como números inteiros em uma matriz
x
,.Resultado
Explicação
x[[1, 1]]
converte a entrada em uma lista de números inteiros.Subsets
gera todos os subconjuntos dos números inteiros.Select....Tr@# == 0
fornece todos os subconjuntos que possuem um total igual a 0.Grid
formata os subconjuntos selecionados como números inteiros separados por espaço.fonte
Gelatina , 6 bytes
Experimente online!
Apenas por completude. Semelhante ao Brachylog, o Jelly também pós o desafio, mas agora os idiomas mais novos competem normalmente.
fonte
05AB1E , 5 bytes
Experimente online!
Se a entrada precisar ser delimitada por espaço, o prefixo
#
a esta resposta é a única alteração necessária.fonte
J,
57535149 caracteresUso:
fonte
(<@":@(#~0=+/)@#"1 _~2#:@i.@^#)
salva 4 caracteres.Stax , 8 bytes CP437
Execute e depure online!
Explicação
Usa a versão descompactada (9 bytes) para explicar.
fonte
Given a list of space-delimited integers as input
; você está - no entanto - tomando uma lista como entrada.J , 34 bytes
Experimente online!
como
".
converte a entrada em uma lista. então:fonte
Perl 6 , 51 bytes
Experimente online!
Retorna uma lista de sacos exclusivos que somam 0. Um saco é um conjunto ponderado.
Explicação:
fonte
Ruby, 110 bytes
Adicionará o link do TIO posteriormente.
Recebe a entrada do stdin como uma lista de números, por exemplo
8 −7 5 −3 −2
Como funciona: converte a entrada em uma matriz de números. Obtém todas as permutações dos comprimentos de 1 ao comprimento da matriz. Ele os adiciona à matriz de saída se eles somam a 0. Ele gera a matriz sem duplicatas.
Saída para a entrada de amostra:
[[-3, -2, 5]]
fonte