Étant donné un tableau d'entiers a
qui contient n entiers et un seul entier x
; supprimer le moins d'éléments a
pour que la somme soit a
égale à x
. Si aucune combinaison de a
ne peut se former x
, renvoyez une valeur fausse.
Comme indiqué dans un commentaire, il s'agit de l'ensemble maximal avec une somme de x , excusez mon cerveau mathématique inférieur. J'ai oublié beaucoup de termes depuis le collège.
Exemples (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]
(Inchangé)
f([], 0) = []
(Cas à somme nulle inchangé)
Exemples (Falsy, toute valeur non matricielle cohérente):
Impossible de faire l'affaire: f([-2,4,6,-8], 3) = falsy (E.G. -1)
Cas à somme nulle: f([], non-zero number) = falsy (E.G. -1)
- Remarque: toute valeur comme
[-1]
ne peut pas être valide pour la falsification, car il s'agit d'une sortie véridique potentielle.
Règles:
- L'entrée peut être prise sous forme de tableau ou sous forme de liste d'arguments, le dernier ou le premier étant
x
. - La sortie peut être n'importe quelle liste délimitée d'entiers. EG
1\n2\n3\n
ou[1,2,3]
. - Toute valeur peut être utilisée comme indicateur de falsification, autre qu'un tableau d'entiers.
- Votre code doit maximiser la taille du tableau final, l'ordre n'a pas d'importance.
- EG Pour les
f([3,2,3],5)
deux[2,3]
et[3,2]
sont également valables. - Par exemple,
f([1,1,2],2)
vous ne pouvez revenir[1,1]
que[2]
plus court.
- EG Pour les
- La somme de
a
et la valeur dex
seront inférieures2^32-1
et supérieures à-2^32-1
. - Il s'agit du code-golf , le plus petit nombre de victoires d'octets.
- S'il existe plusieurs sous-réseaux de même taille qui sont valides, il n'est pas acceptable de les afficher tous. Vous devez en choisir un seul et le sortir.
Faites-moi savoir si cela a été publié, je ne l'ai pas trouvé.
Messages que j'ai trouvés comme ceci : liés mais fermés , ...
la source
Réponses:
Brachylog , 8 octets
Essayez-le en ligne!
Réponse Brachylog mensuelle. Retourne
false.
si ce n'est pas possible.Explication
la source
Python 2 ,
108104 octetsEssayez-le en ligne!
-4 octets, merci à Jonathan Allan
Python 2 ,
108106 octetsEssayez-le en ligne!
-2 octets, merci à Janathan Frech
la source
range(-len(a),1)
et-l
pour enregistrer 2, maislambda a,n:[x for l in range(len(a)+1)for x in combinations(a,l)if sum(x)==n][-1]
enregistre 4.05AB1E , 9 octets
Essayez-le en ligne!
la source
Japt
-h
, 11 octetsEssayez-le en ligne!
la source
Pyth , 8 octets
8 octets ( essayez-le! ) - Produit une seule solution possible. Pour les entrées insolubles, il n'imprime rien dans STDOUT, qui est une chaîne vide, qui est techniquement parlant falsey en Pyth, mais écrit dans STDERR. Merci à FryAmTheEggman d' avoir suggéré cela (en ignorant STDERR et en se concentrant uniquement sur la sortie STDOUT), économisant ainsi 1 octet.
9 octets ( Essayez! ) - Produit une seule solution possible, enveloppée dans une liste singleton comme autorisé par défaut (par exemple
([1...10], 10) -> [[1,2,3,4]]; ([], 0) -> [[]]
). Pour les entrées insolubles, il revient[]
, ce qui est falsey en Pyth.10 octets ( essayez-le! ) - Pour une sortie plus claire, sans utiliser la règle de la liste singleton et en utilisant
0
plutôt que[]
comme valeur falsifiée.Explication
Tout d'abord, le code calcule le jeu de puissance de la liste d'entrée (toutes ses sous-collections ordonnées possibles). Ensuite, il ne conserve que les collections dont la somme est égale au nombre d'entrée. Il convient de noter que les collections sont générées du plus court au plus long, nous nous concentrons donc sur la dernière. Pour l'obtenir:
lst[-1:]
à la place delst[-1]
pour éviter que des erreurs ne soient levées pour des entrées insolubles.la source
[]
est faux? Soigné. Pourquoi Pyth fait ça[]
?f([], 0) = []
?Gelée , 7 octets
Essayez-le en ligne!
Sortie clarifiée sur TIO.
la source
Perl 6 ,
3837 octetsEssayez-le en ligne!
Fonction curry.
la source
;
même nécessaire?$^x
par$_
.)Brachylog , 4 octets
Essayez-le en ligne!
À peu près équivalent à Fatalize
h⊇.+~t?∧
, sauf beaucoup plus court, grâce à la fonction de composition de prédicat qui, selon l'historique de modification de la référence, était un travail en cours jusqu'au 8 janvier, postdatant la réponse de plus de deux mois.⟨⊇+⟩
est un sandwich ,{[I,J]∧I⊇.+J∧}
, où les accolades sont dans ce cas hors de propos car le sandwich est de toute façon sur sa propre ligne.Une transformation beaucoup moins spectaculaire de la réponse de Fatalize, qui utilise les mêmes prédicats avec les mêmes variables mais sort un octet plus court d'être organisé différemment:
Brachylog , 7 octets
Essayez-le en ligne!
(De plus, si quelqu'un veut voir quelque chose d'étrange, changez l'un des traits de soulignement des cas de test en traits d'union.)
la source
Pyth , 14 octets
Essayez-le en ligne!
la source
Nettoyer , 89 octets
Essayez-le en ligne!
Définit la fonction
$ :: Int -> [Int] -> (Maybe [Int])
renvoyantNothing
s'il n'y a pas de combinaison appropriée d'éléments, et(Just [elements...])
sinon.la source
JavaScript (ES6), 108 octets
Prend l'entrée comme
(array)(n)
. Renvoie un tableau oufalse
.Essayez-le en ligne!
la source
Cela a commencé cool et petit, mais les cas de bord m'ont eu. Quoi qu'il arrive, je suis fier du travail que je fais dans ce domaine.
Python 3 ,
169 161 161154 octetsEssayez-le en ligne!
la source
range(x)
génère pas(0...x-1)
? Donc, votrerange(len(a))
ne vous donne pas la possibilité de laisser le tableau inchangé?if a==[] and x==0
utilisationif sum(a)==x
. Ensuite, vous pouvez également supprimer+1
derange
.R ,
10080 octetsEssayez-le en ligne!
20 octets économisés grâce à digEmAll
Retourne
FALSE
pour des critères impossibles.la source
Attaché , 28 octets
Essayez-le en ligne!
Alternatives
34 octets :
f[x,y]:=({y=Sum@_}\Radiations@x)@0
30 octets :
First@${y&`=@Sum\Radiations@x}
29 octets :
{(_&`=@Sum\_2)@0}#/Radiations
29 octets :
${({y=Sum@_}\Radiations@x)@0}
29 octets :
`@&0@${y&`=@Sum\Radiations@x}
29 octets :
{_}@@${y&`=@Sum\Radiations@x}
Explication
la source
APL (NARS), 65 caractères, 130 octets
↓ est utilisé car le premier élément de l'ensemble d'ensembles serait un ensemble vide (ici ⍬ Zilde), que l'on veut éliminer car il semble que + / ⍬ soit nul ...
Pour ne pas trouver, ou erreur, il retournerait ⍬ ou en texte imprimé:
tester:
la source