Python 3 , 113 62 bytes
for i in[1]*3:x|={a+b for a in x for b in x}
while{i+1}&x:i+=1
Aquí x
está la entrada como un conjunto de entradas y i
es la salida.
(Gracias: Erik the Outgolfer, Sr. Xcoder, Lynn)
marca
fuente
fuente
x=0,*x
ahorra 1 byte. Mejor aún,x+=0,
ahorra 2.Respuestas:
Jalea , 12 bytes
Pruébalo en línea!
Toma un promedio de ~ 3.7 segundos para ejecutar todos los casos de prueba en TIO en mi teléfono, por lo que sorprendentemente es bastante rápido.
Explicación
fuente
Haskell,
5650 bytesPruébalo en línea!
Un enfoque de fuerza bruta. Agregue
0
a la lista de monedas y pruebe todas las combinaciones de 8 selecciones. Encuentra el primer númeron
que no es igual a la suma de cualquiera de las selecciones y devuelven-1
.Toma alrededor de 5m30s para
[1, 2, 5, 13, 34, 89, 233, 610]
el hardware de mi laptop de 7 años.Editar: -6 bytes gracias a @ Ørjan Johansen
Una versión aún más corta (-2 bytes, de nuevo gracias a @ Ørjan Johansen) es
Haskell, 48 bytes
pero usa mucha más memoria y se encuentra con una gran paginación en mi máquina y no termina "en unos minutos".
fuente
mapM(0:)$c<$c
. (De hecho,mapM(:0:c)c
debería funcionar, pero se agota el tiempo de espera en TIO para el caso de prueba dado)Jalea , 9 bytes
Pruébalo en línea!
Cómo funciona
fuente
Żṗ8§ḟ’$Ṃ
guarda un byte, pero no estoy seguro si 8,5 minutos cuentan como unos pocos .Wolfram Language (Mathematica) , 53 bytes
Pruébalo en línea!
fuente
JavaScript (ES6),
100 88 8076 bytesEsta es esencialmente una búsqueda de fuerza bruta, pero mejorada con poda para acelerarla. El tiempo de ejecución promedio para los casos de prueba es cercano a 1 segundo en TIO.
Asume que la matriz de entrada está ordenada de mayor a menor.
Pruébalo en línea!
Comentado
fuente
Python 2 , 145 bytes
Pruébalo en línea!
fuente
Pari / GP , 57 bytes
Pruébalo en línea!
fuente
Python 2 ,
125115111 bytesPruébalo en línea!
Espera una lista de enteros como entrada.
Explicación:
fuente
Perl6,
656341 bytes (3937 caracteres)Pruébalo en línea!
Este es un bloque anónimo que pasa sus datos como una matriz. El
(0,|@_)
es una forma rápida de añadir una0
a@_
, y a pesar de que ha hecho dos veces, es todavía un poco más corto que@_.push: 0;
el que necesitaría entonces espacios después de la_
. Este es un enfoque de fuerza bruta que se basa un poco en el hecho de que son 8 combinaciones. Después de la adición cruzada, se crea una lista anónima para valores secuenciales. Con los operadores matemáticos, las listas se evalúan según su longitud, por lo que el -1 obtiene un doble deber: tener en cuenta el 0 y coaccionar a Int.Esto puede llevar su tiempo dulce, pero cambiando uno o ambos
(0,|@_)
a(0,|@_.unique)
antes del primerofor
se puede acelerar considerablemente. Eso agrega +7 (tiempo de ejecución <60s) o +14 (tiempo de ejecución <10s) a la puntuación si siente que el primero es demasiado lento (hice esto para el código vinculado para evitar tiempos de espera después de 60 segundos).Editar: JoKing en los comentarios lo mejoró (misma idea, suma cruzada, luego devuelve el último resultado consecutivo) a un sorprendente 39 caracteres (41 bytes):
Pruébalo en línea!
La tabulación final no necesita un 0, ahorrando unos pocos bytes al solo tener que agregar 0 una vez. Los
xx 3
imita el bucle (todavía quesos en las monedas que son una potencia de 2). Elfirst
sub devuelve el primer número en la lista infinita0..*
(también^Inf
es posible, pero no ahorra espacio) que+1
no es miembro de la lista cruzada agregada. Al igual que el mío, es lento, así que agregue +7 por un tiempounique
después del primer igual si siente que es demasiado lento para las pautas.fuente
unique
no es necesario, pero lo acelera muchoxx
. Sabía que tenía que haber una manera de hacer la tabulación final de una manera mucho más corta usando funciones establecidas, pero mi cerebro no funcionaba.xx 1
debería serxx 3
^∞
(1...*∉@_)-1
lugar de utilizarfirst
, (que dan cuenta es el mismo método que utiliza aquí )JavaScript (Node.js) ,
171145115 bytesPruébalo en línea! Puerto de la respuesta de @ Mark's Python 3. 108 bytes en Firefox 30-57:
fuente
Wolfram Language (Mathematica) , 46 bytes
Pruébalo en línea!
Enfoque de fuerza bruta: comprueba los enteros contando hacia arriba hasta que alcanza un valor que no se puede pagar en 8 monedas. Muy, muy lento (se agota el tiempo de espera), pero estoy bastante seguro de que la condición es correcta.
fuente
Limpio , 161 bytes
Pruébalo en línea!
fuente