Dada uma matriz de números inteiros a
que contém n números inteiros e um único inteiro x
; remova a menor quantidade de elementos de a
para fazer a soma a
igual a x
. Se nenhuma combinação de for a
possível x
, retorne um valor falso.
Como apontado em um comentário, este é o conjunto máximo com uma soma de x , desculpe meu cérebro matemático menor. Eu esqueci muitos termos desde a faculdade.
Exemplos (Truthy):
f([1,2,3,4,5,6,7,8,9,10], 10) = [1,2,3,4]
f([2,2,2,2,2,2,2,2,2], 10) = [2,2,2,2,2]
f([2,2,2,2,-2,-2,-2,-4,-2], -8) = [2,2,-2,-2,-2,-4,-2]
f([-2,-4,-2], -6) = [-4,-2] OR [-2,-4]
f([2,2,2,4,2,-2,-2,-2,-4,-2], 0) = [2,2,2,4,2,-2,-2,-2,-4,-2]
(Inalterado)
f([], 0) = []
(Caso inalterado de soma zero)
Exemplos (Falsy, qualquer valor consistente sem matriz):
Impossível argumentar: f([-2,4,6,-8], 3) = falsy (E.G. -1)
Caso de soma zero: f([], non-zero number) = falsy (E.G. -1)
- Nota: qualquer valor como
[-1]
não pode ser válido para falsidade, pois é uma saída de verdade em potencial.
Regras:
- A entrada pode ser obtida em forma de matriz ou como uma lista de argumentos, sendo o último ou o primeiro
x
. - Saída pode ser qualquer lista delimitada de números inteiros. EG
1\n2\n3\n
ou[1,2,3]
. - Qualquer valor pode ser usado como um indicador falso, além de uma matriz de números inteiros.
- Seu código deve maximizar o tamanho da matriz final, a ordem não importa.
- EG Para
f([3,2,3],5)
ambos[2,3]
e[3,2]
são igualmente válidos. - Por exemplo,
f([1,1,2],2)
você só pode retornar[1,1]
como[2]
é mais curto.
- EG Para
- A soma
a
e o valor dex
serão menores que2^32-1
e maiores que-2^32-1
. - Isso é código-golfe , vitórias mais baixas na contagem de bytes.
- Se houver vários subarrays do mesmo tamanho que são válidos, é não aceitável para a saída de todos eles. Você deve escolher um único e produzir esse.
Deixe-me saber se isso foi publicado, não foi possível encontrá-lo.
Posts que encontrei assim : relacionados, mas fechados , ...
fonte
Respostas:
Braquilog , 8 bytes
Experimente online!
Resposta mensal do Brachylog. Retorna
false.
se não for possível.Explicação
fonte
Python 2 ,
108104 bytesExperimente online!
-4 bytes, graças a Jonathan Allan
Python 2 ,
108106 bytesExperimente online!
-2 bytes, graças a Janathan Frech
fonte
range(-len(a),1)
e-l
salvar 2, maslambda a,n:[x for l in range(len(a)+1)for x in combinations(a,l)if sum(x)==n][-1]
salva 4.05AB1E , 9 bytes
Experimente online!
fonte
Japonês
-h
, 11 bytesExperimente online!
fonte
Pitão , 8 bytes
8-byter ( Experimente! ) - gera apenas uma solução possível. Para entradas insolúveis, ele não imprime nada em STDOUT, que é uma string vazia, que é tecnicamente falsa em Pyth, mas grava em STDERR. Agradecemos a FryAmTheEggman por sugerir isso (ignorando STDERR e concentrando-se apenas na saída STDOUT), economizando 1 byte.
9-byter ( Experimente! ) - gera apenas uma solução possível, agrupada em uma lista de singleton conforme permitido por padrão (por exemplo
([1...10], 10) -> [[1,2,3,4]]; ([], 0) -> [[]]
). Para insumos insolúveis, ele retorna[]
, o que é falsey em Pyth.10 bytes ( Experimente! ) - Para obter uma saída mais clara, sem usar a regra da lista de singleton e usar em
0
vez de[]
um valor falso.Explicação
Primeiro, o código calcula o conjunto de potência da lista de entrada (todas as possíveis subconjuntos ordenados). Em seguida, ele mantém apenas as coleções cuja soma é igual ao número de entrada. Deve-se notar que as coleções são geradas do menor para o maior, portanto, focamos na última. Para obtê-lo:
lst[-1:]
no lugar delst[-1]
para evitar que erros sejam lançados para entradas insolúveis.fonte
[]
é falso? Arrumado. Por que Pyth faz isso[]
?f([], 0) = []
?Geléia , 7 bytes
Experimente online!
Saída esclarecida sobre o TIO.
fonte
Perl 6 ,
3837 bytesExperimente online!
Função ao curry.
fonte
;
mesmo necessário?$^x
com$_
.)Braquilog , 4 bytes
Experimente online!
Quase equivalente ao Fatalize
h⊇.+~t?∧
, exceto muito mais curto, graças ao recurso de composição de predicados que, de acordo com o histórico de edição da referência, era um trabalho em andamento até 8 de janeiro, com a resposta em mais de dois meses.⟨⊇+⟩
é um sanduíche , expandindo para{[I,J]∧I⊇.+J∧}
, onde os aparelhos são irrelevantes nesse caso, pois o sanduíche está em sua própria linha.Uma transformação muito menos dramática da resposta de Fatalize, que usa os mesmos predicados com as mesmas variáveis, mas sai um byte menor do que ser organizado de maneira diferente:
Braquilog , 7 bytes
Experimente online!
(Além disso, se alguém quiser ver algo estranho, altere qualquer um dos sublinhados nos casos de teste para hífens.)
fonte
Pitão , 14 bytes
Experimente online!
fonte
Limpo , 89 bytes
Experimente online!
Define a função
$ :: Int -> [Int] -> (Maybe [Int])
retornandoNothing
se não houver uma combinação apropriada de elementos e(Just [elements...])
caso contrário.fonte
JavaScript (ES6), 108 bytes
Toma entrada como
(array)(n)
. Retorna uma matriz oufalse
.Experimente online!
fonte
Isso começou legal e pequeno, mas os casos extremos me pegaram. Aconteça o que acontecer, tenho orgulho do trabalho que coloquei nisso.
Python 3 ,
169 161154 bytesExperimente online!
fonte
range(x)
gera(0...x-1)
? Então vocêrange(len(a))
não está dando a possibilidade de deixar a matriz inalterada?if a==[] and x==0
usarif sum(a)==x
. Então você também pode remover+1
derange
.R ,
10080 bytesExperimente online!
20 bytes salvos graças ao digEmAll
Retorna
FALSE
para critérios impossíveis.fonte
Anexo , 28 bytes
Experimente online!
Alternativas
34 bytes :
f[x,y]:=({y=Sum@_}\Radiations@x)@0
30 bytes :
First@${y&`=@Sum\Radiations@x}
29 bytes :
{(_&`=@Sum\_2)@0}#/Radiations
29 bytes :
${({y=Sum@_}\Radiations@x)@0}
29 bytes :
`@&0@${y&`=@Sum\Radiations@x}
29 bytes :
{_}@@${y&`=@Sum\Radiations@x}
Explicação
fonte
APL (NARS), 65 caracteres, 130 bytes
↓ é usado porque o primeiro elemento do conjunto de conjuntos seria um conjunto nulo (aqui ⍬ Zilde), que se deseja eliminar porque parece que + / ⍬ é zero ...
Para não encontrar, ou erro, ele retornaria ⍬ ou no texto impresso:
teste:
fonte