(Aleatoriamente inspirado por /mathpro//q/339890 )
(Relacionado: 1 , 2 )
Dada una lista de entrada de números primos distintos (por ejemplo, [2, 5, 7]) y un número entero n, genera todos los números enteros positivos estrictamente más pequeños nque contienen solo los números primos como divisores. Para entrada [2, 5, 7]y n=15esto significa una salida de [2, 4, 5, 7, 8, 10, 14].
Ejemplos adicionales
[list] n | output
[2, 5, 7] 15 | [2, 4, 5, 7, 8, 10, 14]
[2, 5, 7] 14 | [2, 4, 5, 7, 8, 10]
[2] 3 | [2]
[2] 9 | [2, 4, 8]
[103, 101, 97] 10000 | [97, 101, 103, 9409, 9797, 9991]
[97, 101, 103] 104 | [97, 101, 103]
Reglas y aclaraciones
- La lista de entrada está garantizada como no vacía, pero puede ser solo un elemento
- Puede suponer que la lista de entrada está ordenada previamente de la forma más conveniente
nsiempre será más grande que el elemento más grande en la lista de entrada- Como, por ejemplo,
2**0 = 1puede incluir opcionalmente1en su lista de salida - La entrada y salida se pueden dar por cualquier método conveniente
- Puede imprimir el resultado en STDOUT o devolverlo como resultado de una función
- Un programa completo o una función son aceptables
- Si corresponde, puede suponer que los enteros de entrada / salida se ajustan al
intrango nativo de su idioma - Las lagunas estándar están prohibidas
- Este es el código de golf, por lo que se aplican todas las reglas habituales de golf, y gana el código más corto (en bytes)

1en la salida.[2, 3, 7]no puede usar5.Respuestas:
Stax , 6 bytes
¡Ejecútelo y depúrelo en staxlang.xyz!
Desempaquetado (7 bytes) y explicación:
fuente
05AB1E , 6 bytes
Toma el entero como primera entrada, la lista como segunda. Incluye lo opcional
1en la salida.Pruébelo en línea o verifique todos los casos de prueba .
Explicación:
Dos alternativas de 6 bytes proporcionadas por @Grimy :
Pruébalo en línea.
Este es muy lento (el
[2,5,7], 15caso de prueba ya se agota), pero se parece menos a los otros dos enfoques:A diferencia de los otros dos programas anteriores, toma la lista como primera entrada y el entero como segunda. Sin embargo, también incluye lo opcional
1en la salida.Pruébalo en línea.
fuente
sиPѦʒ›. Pensé que tenía un 6, pero no parece haber una forma de evitar el uso des/I/¹4747561509943000000000000000. ;)GNfåP–JavaScript (ES6),
64 ... 5250 bytesToma entrada como
(n)(primes)donde primos es un conjunto. Salidas modificando el conjunto.Pruébalo en línea!
Comentado
fuente
Python 3 ,
6865 bytesPruébalo en línea!
-3 bytes gracias a @xnor
La función toma una secuencia principal y un número entero n como entradas. El resultado es una lista que incluye 1.
Sin golf:
Pruébalo en línea!
fuente
c*s<n*s. Editar:n//c*ses más corto.Haskell , 51 bytes
xpmapM((<$>[0..n]).(^))pproductnpPruébalo en línea!
fuente
Haskell , 39 bytes
Pruébalo en línea!
Comprueba si
kes divisible solo por números primoslal ver si el productolllevado a una alta potencia es divisible pork.fuente
Python 2 , 65 bytes
Pruébalo en línea!
Comprueba si
kes divisible solo por números primoslal ver si el productolllevado a una alta potencia es divisible pork.Si
lse puede tomar como una lista de cadenaseval("*".join(l))ahorra 3 bytes másreduce(int.__mul__,l)y se puede utilizar en Python 3, que carecereduce.Python 3 , 64 bytes
Pruébalo en línea!
Una función que imprime en orden inverso y termina con error.
La solución recursiva a continuación sería más corta si
nse incluyera en la lista. Intenté calcular recursivamente el productoltambién, pero eso fue más largo.62 bytes (no funciona)
Pruébalo en línea!
fuente
Gaia , 10 bytes
Pruébalo en línea!
Nunca lo he usado
‡con una mónada antes, es bastante útil para la manipulación de la pila.fuente
J , 24 bytes
Pruébalo en línea!
fuente
Jalea , 7 bytes
Pruébalo en línea!
Un enlace diádico que toma el límite superior exclusivo como argumento izquierdo y la lista de números primos como derecho. Devuelve una lista que incluye 1, así como los números compuestos solo por los primos suministrados.
Una alternativa 7 sería
ṖÆfḟ¥Ðḟfuente
Python 2 , 98 bytes
Pruébalo en línea!
fuente
Japt
-f,118 bytesIntentalo
fuente
Japt
-f, 7 bytesIntentalo
fuente
1en la salida, que no debería. Comencé conk e!øVmi solución también, pero necesitaba los 2 bytes adicionales para filtrar0&1.Since, e.g., 2**0 = 1, you can optionally include 1 in your output listRuby
-rprime, 61 bytesPruébalo en línea!
fuente
Retina 0.8.2 , 64 bytes
Pruébalo en línea! La lista incluye casos de prueba más pequeños (
10000tiempo de espera debido a todas las cadenas largas). Toma información en el ordenn f1 f2 f3...(los factores no necesitan ser primos pero sí deben ser primos). La salida incluye1. Explicación:Convierte a unario.
Genere una lista de 0 a
n-1, tanto en decimal como en unario.Dividir repetidamente el unario por cualquier factor disponible.
Salida de los números decimales donde el número unario se ha reducido a
1.fuente
Pyth , 10 bytes
Pruébalo en línea!
Toma entrada como
[[primes...], n]fuente
Perl 6 , 27 bytes
Pruébalo en línea!
Puerto de la solución Haskell de xnor. También salidas 1.
fuente
Carbón ,
2220 bytesPruébalo en línea! El enlace es a la versión detallada del código. Demasiado lento para el caso de prueba más grande. Explicación:
Respuesta anterior más rápida de 22 bytes:
Pruébalo en línea! El enlace es a la versión detallada del código. La salida incluye
1. Explicación:Empuje
1a la lista vacía predefinida.Recorra la lista, incluidos los elementos que se le envíen durante el ciclo.
Multiplique el elemento actual por cada primo y repita sobre los productos.
Compruebe si el producto es un nuevo valor.
Si es así, empújalo a la lista.
Imprime la lista.
fuente
C (clang) , 115 bytes
Pruébalo en línea!
Una solución basada en el tamiz de Eratóstenes.
(Incluye 1 en la salida)
Gracias a la sugerencia de @ceilingcat: printf (x [i] + "\ 0% d", i ++) en lugar de x [i] && printf ("% d", i), i ++ Supongo que cambia el puntero del literal pero no No encontré ninguna documentación, si alguien me puede dar algunas ideas, sería bienvenido.
fuente
x[i]==1entonces la cadena es"%d ". Six[i]==0entonces la cadena es"". Las cadenas C están terminadas en nulo, por lo que un carácter nulo explícito termina la cadena. Este truco también abusa de un comportamiento indefinido en el clang relacionado con eli++.