Première question ici, ne me criez pas dessus s'il s'agit d'un doublon ou d'un mauvais défi.
introduction
J'ai moi-même pensé à ce défi, et il semble être un bon casse-tête de base pour les golfeurs débutants. Cela pourrait également m'aider à décider quelle langue de golf de code apprendre.
Défi
Étant donné un tableau d'entiers inférieurs ou égaux à n
, affichez ou renvoyez le nombre minimum de nombres du tableau qui résument exactement n
.
Vous pouvez choisir d'écrire une fonction ou un programme complet.
Contribution
Vous pouvez assumer en toute sécurité 0 <= n < 2^31
.
Prenez un tableau ou une liste de tout type ( vector
car C ++ ou Java LinkedList
sont autorisés), avec n
et un paramètre facultatif length
, qui spécifie la longueur du tableau.
Vous pouvez également prendre l'entrée comme une chaîne séparée n
par des espaces, séparée par une virgule ou un espace:
1 5 7 3 7 3 6 3 2 6 3,10
1 5 7 3 7 3 6 3 2 6 3 10
si c'est plus facile.
Production
Générez une sortie ou renvoyez le nombre minimal de nombres du tableau qui résument exactement n
. En utilisant l'exemple ci-dessus:
1 5 7 3 7 3 6 3 2 6 3,10
Votre programme devrait imprimer:
2
parce que le nombre minimum de nombres qui se résume à 10
est 2
(7
et 3
).
Dans le cas où il n'y a pas de solution, imprimez ou retournez soit un négatif 0
, "Pas de solution" (bien que ce ne serait pas intelligent),∞
(comme suggéré), ou toute autre valeur falsifiée, à l'exception d'une chaîne vide.
Exemple d'entrée et de sortie
Contribution:
1 5 7 3 7 3 6 3 2 6 3,10
143 1623 1646 16336 1624 983 122,18102
5 6 9,12
Production:
2
3
-1
Notation
C'est le code-golf, donc le code le plus court en octets gagne.
La meilleure réponse sera acceptée à Noël.
la source
false
des cas sans solutions?Réponses:
Pyth,
1211 octetsCela prend
n
comme première ligne d'entrée et la liste sur la deuxième ligne.Essayez-le ici .
la source
Japt ,
302118 octetsIl s'avère qu'il y avait une méthode beaucoup plus efficace. ;)
Testez-le en ligne! (Remarque:
n-
a été remplacé parn@X-Y}
pour des raisons de compatibilité)Cela prend l'entrée comme un tableau séparé par des espaces ou des virgules, suivi d'un nombre. Sorties
undefined
pour cas de test sans solutions.Je ne peux pas croire que je n'ai pas pensé à cette version quand j'ai écrit cela à l'origine ...
Depuis, plusieurs optimisations ont été apportées qui sont utiles ici:
U
au début du programme peut généralement être omis.Ã
est un raccourci pour}
.n
trie désormais correctement les nombres par défaut.Chacun d'eux décolle un octet, pour un total de 15:
Testez-le en ligne!
la source
Mathematica,
7365 octetsFonction pure, retourne
∞
s'il n'y a pas de solution.la source
Python 3, 128 octets
Ce n'est pas aussi golfé que je le souhaiterais, mais j'y travaillerai plus tard.
la source
Mathematica, 45 octets
la source
CJam, 34 octets
Essayez-le en ligne . Le format d'entrée est la somme suivie de la liste des valeurs, par exemple:
Notez que cela déclenchera une exception si aucune solution n'est trouvée. L'exception va à stderr lorsque CJam est exécuté à partir de la ligne de commande et le résultat correct (
0
) est toujours imprimé sur stdout. Donc, cela répond au consensus établi à Faut-il laisser les soumissions se terminer avec une erreur?Le code peut sembler plus long que prévu. La raison principale est que CJam n'a pas de fonction intégrée pour générer des combinaisons. Ou du moins, c'est mon excuse, et je m'y tiens.
Explication:
la source
JavaScript (ES6), 84 octets
Explication
Prend un
Array
deNumber
s et unNumber
comme arguments. Renvoie un nombre deInfinity
si aucun résultat. Il s'agit d'une fonction récursive qui soustraitn
et supprime chaque élément du tableau un par un jusqu'àn == 0
.Tester
Ce test est défini
m
surInfinity
plus tard au lieu de comme argument par défaut pour le faire fonctionner dans Chrome (au lieu de simplement Firefox).Afficher l'extrait de code
la source
Haskell, 72 octets
Retour
0
s'il n'y a pas de solution.Exemple d'utilisation:
10 # [1,5,7,3,7,3,6,3,2,6,3]
->2
.Trouvez toutes les sous-listes de la liste d'entrée
l
qui ont une somme den
. Prenez la longueur de chacune de ces sous-listes et triez. Ajoutez un0
et prenez le premier élément.Si une liste singleton est autorisée pour la production, par exemple
[2]
, nous pouvons sauver 7 octets:n#l=minimum[length x|x<-subsequences l,sum x==n]
. En cas d'absence de solution, la liste vide[]
est retournée.la source