(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 n
que contienen solo los números primos como divisores. Para entrada [2, 5, 7]
y n=15
esto 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
n
siempre será más grande que el elemento más grande en la lista de entrada- Como, por ejemplo,
2**0 = 1
puede incluir opcionalmente1
en 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
int
rango 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)
1
en 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
1
en 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], 15
caso 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
1
en 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*s
es más corto.Haskell , 51 bytes
x
p
mapM((<$>[0..n]).(^))p
product
n
p
Pruébalo en línea!
fuente
Haskell , 39 bytes
Pruébalo en línea!
Comprueba si
k
es divisible solo por números primosl
al ver si el productol
llevado a una alta potencia es divisible pork
.fuente
Python 2 , 65 bytes
Pruébalo en línea!
Comprueba si
k
es divisible solo por números primosl
al ver si el productol
llevado a una alta potencia es divisible pork
.Si
l
se 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
n
se incluyera en la lista. Intenté calcular recursivamente el productol
tambié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
1
en la salida, que no debería. Comencé conk e!øV
mi 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 list
Ruby
-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 (
10000
tiempo 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
1
a 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]==1
entonces la cadena es"%d "
. Six[i]==0
entonces 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++
.