Primera pregunta aquí, no me grites si esto es un duplicado o un mal desafío.
Introducción
Pensé en este desafío yo mismo, y parece ser un buen rompecabezas básico para los golfistas principiantes. También podría ayudarme a decidir qué lenguaje de golf de código aprender.
Desafío
Dada una matriz de enteros que son menores o iguales que n, generar o devolver el número mínimo de números de la matriz que suman exactamente n.
Puede elegir escribir una función o un programa completo.
Entrada
Puede asumir con seguridad 0 <= n < 2^31.
Tome una matriz o lista de cualquier tipo ( vectorpara C ++ o Java LinkedListestán permitidos), junto con nun parámetro opcional length, que especifica la longitud de la matriz.
También puede tomar la entrada como una cadena separada npor espacios, separada por una coma o un espacio:
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 es más fácil.
Salida
Imprima o devuelva el número mínimo de números de la matriz que suman exactamente n. Usando el ejemplo anterior:
1 5 7 3 7 3 6 3 2 6 3,10
Su programa debe imprimir:
2
porque el número mínimo de números que suman 10es 2( 7y 3).
En el caso de que no haya solución, imprima o devuelva un negativo, 0"Sin solución" (aunque eso no sería inteligente), ∞(como se sugiere) o cualquier otro valor falso, con la excepción de una cadena vacía.
Ejemplo de entrada y salida
Entrada:
1 5 7 3 7 3 6 3 2 6 3,10
143 1623 1646 16336 1624 983 122,18102
5 6 9,12
Salida:
2
3
-1
Puntuación
Este es el código de golf, por lo que gana el código más corto en bytes.
La respuesta principal será aceptada en Navidad.
fuente

falsepara casos sin soluciones?Respuestas:
Pyth,
1211 bytesEsto toma
ncomo la primera línea de entrada y la lista en la segunda línea.Pruébalo aquí .
fuente
Japt ,
302118 bytesResulta que había un método mucho más eficiente. ;)
¡Pruébalo en línea! (Nota:
n-se ha cambiado an@X-Y}por razones de compatibilidad)Esto toma la entrada como una matriz separada por comas o espacios, seguida de un número. Salidas
undefinedpara casos de prueba sin soluciones.No puedo creer que no pensé en esta versión cuando originalmente escribí esto ...
Desde entonces se han realizado varias optimizaciones que son útiles aquí:
Ual comienzo del programa generalmente se puede omitir.Ães un acceso directo para}.nahora ordena los números correctamente por defecto.Cada uno de estos despega un byte, para un total de 15:
¡Pruébalo en línea!
fuente
Mathematica,
7365 bytesFunción pura, regresa
∞si no hay solución.fuente
Python 3, 128 bytes
Esto no es tan divertido como me gustaría, pero trabajaré en ello más tarde.
fuente
Mathematica, 45 bytes
fuente
CJam, 34 bytes
Pruébalo en línea . El formato de entrada es la suma seguida de la lista de valores, por ejemplo:
Tenga en cuenta que esto generará una excepción si no se encuentra una solución. La excepción se aplica a stderr cuando CJam se ejecuta desde la línea de comandos y el resultado correcto (
0) todavía se imprime en stdout. Entonces esto cumple con el consenso establecido en ¿Debería permitirse que las presentaciones salgan con un error?El código puede parecer más largo de lo que cabría esperar. La razón principal es que CJam no tiene una función incorporada para generar combinaciones. O al menos esa es mi excusa, y me apego a ella.
Explicación:
fuente
JavaScript (ES6), 84 bytes
Explicación
Toma una
ArraydeNumbers y unaNumbercomo argumentos. Devuelve un número deInfinitysi no hay resultado. Es una función recursiva que restany elimina cada elemento de la matriz uno por uno hastan == 0.Prueba
Esta prueba se establece
menInfinitymás tarde en lugar de como un argumento predeterminado para que funcione en Chrome (en lugar de solo Firefox).Mostrar fragmento de código
fuente
Haskell, 72 bytes
Devuelve
0si no hay solución.Ejemplo de uso:
10 # [1,5,7,3,7,3,6,3,2,6,3]->2.Encuentre todas las sublistas de la lista de entrada
lque tienen una suma den. Toma la longitud de cada sublista y ordena. Añadir un0y toma el primer elemento.Si se permite que una lista unitaria para la salida, por ejemplo
[2], podemos ahorrar 7 bytes:n#l=minimum[length x|x<-subsequences l,sum x==n]. En caso de que no haya solución,[]se devuelve la lista vacía .fuente