Dada una matriz de enteros a
que contiene n enteros y un solo entero x
; eliminar la menor cantidad de elementos a
para hacer la suma de a
igual a x
. Si no se a
pueden formar combinaciones de x
latas, devuelve un valor falso.
Como se señaló en un comentario, este es el conjunto máximo con una suma de x , disculpe mi cerebro matemático menor. Olvidé muchos términos desde la universidad.
Ejemplos (Verdad):
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]
(Sin alterar)
f([], 0) = []
(Caso de suma cero sin cambios)
Ejemplos (Falsy, cualquier valor consistente que no sea de matriz):
Imposible hacer caso: f([-2,4,6,-8], 3) = falsy (E.G. -1)
Caso de suma cero: f([], non-zero number) = falsy (E.G. -1)
- Nota: cualquier valor como
[-1]
no puede ser válido para falsedad, ya que es una salida de verdad potencial.
Reglas:
- La entrada puede tomarse en forma de matriz, o como una lista de argumentos, siendo el último o el primero
x
. - La salida puede ser cualquier lista delimitada de enteros. EG
1\n2\n3\n
o[1,2,3]
. - Cualquier valor puede usarse como un indicador falso, que no sea una matriz de enteros.
- Su código debe maximizar el tamaño de la matriz final, el orden no importa.
- EG Para
f([3,2,3],5)
ambos[2,3]
y[3,2]
son igualmente válidos. - Por ejemplo
f([1,1,2],2)
, solo puede regresar[1,1]
cuando[2]
sea más corto.
- EG Para
- Tanto la suma de
a
como el valor dex
serán menores2^32-1
y mayores que-2^32-1
. - Este es el código de golf , el menor recuento de bytes gana.
- Si hay varios subconjuntos del mismo tamaño que sean válidos, es no aceptable para la producción de todos ellos. Debe elegir uno único y generarlo.
Avíseme si esto se ha publicado, no pude encontrarlo.
Publicaciones que encontré así : relacionadas pero cerradas , ...
fuente
Respuestas:
Brachylog , 8 bytes
Pruébalo en línea!
Respuesta mensual de Brachylog. Devuelve
false.
si no es posible.Explicación
fuente
Python 2 ,
108104bytesPruébalo en línea!
-4 bytes, gracias a Jonathan Allan
Python 2 ,
108106 bytesPruébalo en línea!
-2 bytes, gracias a Janathan Frech
fuente
range(-len(a),1)
y-l
para guardar 2, perolambda a,n:[x for l in range(len(a)+1)for x in combinations(a,l)if sum(x)==n][-1]
guarda 4.05AB1E , 9 bytes
Pruébalo en línea!
fuente
Japt
-h
, 11 bytesPruébalo en línea!
fuente
Pyth , 8 bytes
8 bytes (¡ Pruébelo! ): Genera solo una solución posible. Para entradas insolubles, no imprime nada en STDOUT, que es una cadena vacía, que técnicamente habla falsey en Pyth, pero escribe en STDERR. Gracias a FryAmTheEggman por sugerir esto (ignorando STDERR y centrándose solo en la salida STDOUT), ahorrando así 1 byte.
9 bytes (¡ Pruébelo! ): Genera solo una solución posible, envuelta en una lista de un solo tono según lo permitido por defecto (por ejemplo
([1...10], 10) -> [[1,2,3,4]]; ([], 0) -> [[]]
). Para entradas insolubles, regresa[]
, lo cual es falsey en Pyth.10 bytes (¡ Pruébelo! ): Para obtener una salida más clara, sin usar la regla de lista única y usar en
0
lugar de[]
un valor falso.Explicación
Primero, el código calcula el conjunto de potencia de la lista de entrada (todas las posibles subcolecciones ordenadas de la misma). Luego, solo mantiene aquellas colecciones cuya suma es igual al número de entrada. Cabe señalar que las colecciones se generan de la más corta a la más larga, por lo que nos centramos en la última. Para obtenerlo:
lst[-1:]
en lugar delst[-1]
evitar que se generen errores para entradas insolubles.fuente
[]
es falso? Ordenado. ¿Por qué Pyth hace eso[]
?f([], 0) = []
?Jalea , 7 bytes
Pruébalo en línea!
Salida aclarada sobre TIO.
fuente
Perl 6 ,
3837 bytesPruébalo en línea!
Función curry
fuente
;
necesario?$^x
con$_
.)Brachylog , 4 bytes
Pruébalo en línea!
Casi equivalente a Fatalize
h⊇.+~t?∧
, excepto que es mucho más corto, gracias a la función de composición de predicados que, según el historial de edición de la referencia, era un trabajo en progreso hasta el 8 de enero, posponiendo la respuesta por más de dos meses.⟨⊇+⟩
es un sándwich que se expande hacia{[I,J]∧I⊇.+J∧}
donde los frenos son irrelevantes en este caso, ya que el sándwich está en su propia línea de todos modos.Una transformación mucho menos dramática de la respuesta de Fatalize, que usa los mismos predicados con las mismas variables pero sale un byte más corto de ser organizado de manera diferente:
Brachylog , 7 bytes
Pruébalo en línea!
(Además, si alguien quiere ver algo extraño, cambie cualquiera de los guiones bajos en los casos de prueba a guiones).
fuente
Pyth , 14 bytes
Pruébalo en línea!
fuente
Limpiar , 89 bytes
Pruébalo en línea!
Define la función de
$ :: Int -> [Int] -> (Maybe [Int])
retornoNothing
si no hay una combinación adecuada de elementos, y de lo(Just [elements...])
contrario.fuente
JavaScript (ES6), 108 bytes
Toma entrada como
(array)(n)
. Devuelve una matriz ofalse
.Pruébalo en línea!
fuente
Esto comenzó genial y pequeño, pero los casos extremos me atraparon. Pase lo que pase, estoy orgulloso del trabajo que puse en esto.
Python 3 ,
169161154bytesPruébalo en línea!
fuente
range(x)
genera(0...x-1)
? ¿Entoncesrange(len(a))
no te da la posibilidad de dejar la matriz sin cambios?if a==[] and x==0
usarif sum(a)==x
. Entonces también puedes eliminar+1
derange
.R ,
10080 bytesPruébalo en línea!
20 bytes guardados gracias a digEmAll
Devoluciones
FALSE
por criterios imposibles.fuente
Adjunto , 28 bytes
Pruébalo en línea!
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}
Explicación
fuente
APL (NARS), 65 caracteres, 130 bytes
↓ se usa porque el primer elemento del conjunto de conjuntos sería un conjunto vacío (aquí ⍬ Zilde), que uno quiere eliminar porque parece que + / ⍬ es cero ...
Para no encontrar, o error, devolvería ⍬ o en el texto impreso:
prueba:
fuente