Deberá generar el primo más pequeño con n
dígitos, y solo contendrá los dígitos especificados en la lista k
.
Ejemplos:
Entrada:
4
1 2
Para esto, debe generar el primo más pequeño con 4
dígitos, y ese primo solo debe contener los dígitos 1
y 2
.
Salida:
2111
Entrada:
10
0 4 7
Salida:
4000000007
Entrada:
6
5 5 5 5 5 5 5 5 5 5 1 5 5 5 5 5 5 5 5 5 5
Salida:
115151
Puede garantizar que la entrada siempre estará en el formato que especifique, y puede hacer cualquier cosa si obtiene una entrada no válida (como que la entrada sea de un solo dígito n
, sin k
).
Si no existe tal solución para una entrada, su programa puede hacer lo siguiente:
- Impresión
banana
- Lanzar un error
- Corre por siempre
- Algo más
Como se trata de código de golf , intente apuntar al código más corto.
La entrada puede estar en cualquier formato que especifique. Por ejemplo, si desea que su entrada sea como cualquiera de los siguientes, está bien.
4
[1, 2]
[1,2]4
1,2
4
4 12
Puede escribir un programa o una función, y debe devolver el valor correcto o imprimirlo.
El espacio en blanco está permitido en cualquier lugar.
Este desafío inspirado en A036229 .
Respuestas:
Brachylog (2), 8 bytes
Pruébalo en línea!
Muy lento en problemas que tienen muchos dígitos posibles, o que contienen un 0 en el conjunto de dígitos posibles ( funciona en este caso; es solo que es mucho más lento que TIO agota el tiempo de espera a menos que el problema sea muy simple). Como es habitual en Brachylog, esta es una función, no un programa completo.
La entrada se toma en el formato
[ndigits,[list of digits]]
, por ejemplo[10,[[0,4,7]]]
.Explicación
Visto desde el punto de vista puramente declarativo, esto dice "encontrar un número primo, con el número dado de dígitos, donde todos los dígitos son uno de los dígitos dados". Para encontrar el número más pequeño , utilizamos sugerencias de orden de evaluación para asegurarnos de que el orden en el que probamos los números sea menor a mayor; en este caso, las
ᵐ
decisiones cerca del comienzo de la lista son menos propensas a cambiar que las decisiones cerca del final (este es su orden natural, que es el mismo que el orden lexicográfico y, por lo tanto, el número en los enteros), y por lo tanto{o∋}ᵐ
tiene dos órdenes de evaluación consejos "varían los últimos dígitos primeros" (delᵐ
orden natural 's) como el indicio más importante, y 'los dígitos de verificación más pequeños antes de dígitos más grandes'(de lao
antes de la∋
, que actúa como una pista en este contexto) como el desempate.{o∋}ᵐ
se puede escribir como el equivalenteoᵐ∋ᵐ
para guardar un byte.fuente
Paquete Bash + bsd-games, 28 bytes
Entrada dada en la línea de comando como n seguido de k como una lista no delimitada de dígitos.
Pruébalo en línea.
fuente
Python 2 , 66 bytes
Pruébalo en línea!
Toma entrada como
f(3,{'9','3','8'})
.Python no tiene funciones integradas para los números primos, por lo que la función los genera utilizando el Teorema de Wilson para verificar a su vez que cada valor potencial
k
sea primo.La desigualdad encadenada
10**~-n<p%k*k<s>=set(`k`)
combina tres condiciones enk
:10**~-n<k
:k
contiene al menosn
dígitos. No necesitamos verificar exactamente ya que si alcanzamos más dígitos, no debe haber soluciónp%k>0
:k
es primo, a través de la condición del teorema de Wilson conp=(n-1)!^2
. Comop%k
es 0 o 1, esto se puede combinar con la condición anterior como10**~-n<p%k*k
s>=set(`k`)
: Todos los dígitosk
están en el conjuntos
. Esto se puede empalmar porque Python 2 considera los conjuntos como más grandes que los números.Si la corriente
k
no satisface todo esto, la función se repitek+1
y agrega 1 a la salida resultante. Como la salida termina con loTrue
que es igual1
, yk
comienza en1
, la salida esk
. Este seguimiento paralelo dek
latidos que salenk
directamente en caso de éxito.fuente
JavaScript (ES7), 100 bytes
Toma la entrada como número de dígitos
n
y cadena de dígitos permitidoss
en la sintaxis de curry(n)(s)
. Devuelveundefined
si no se encuentra una solución.Funciona bastante rápido para hasta 6 dígitos, podría funcionar para 7 y definitivamente demasiado lento, y con mucha memoria, más allá de eso.
Prueba
Mostrar fragmento de código
fuente
n=>s=>[...Array(10**n).keys()].find(i=>eval(`/[${s}]{${n}}/`).test(i)&(p=j=>i%--j?p(j):j==1)(i))
Jalea , 12 bytes
Toma un conjunto y un entero como argumentos de línea de comandos. Imprime 0 si no existe una solución.
Pruébalo en línea!
Cómo funciona
fuente
Pyke,
1816 bytesPruébalo aquí!
Se ejecuta para siempre si no se encuentran valores
fuente
Mathematica, 64 bytes
Función pura donde el primer argumento es la lista (ordenada) de dígitos permitidos y el segundo argumento es la longitud permitida.
Tuples@##
calcula todas las listas de los dígitos permitidos de la longitud permitida, luego encontramos losFirstCase
que coinciden de manerax:{f_,___}
tal que el primer dígitof
no lo es0
y el enteroy=FromDigits@x
es primo y lo reemplaza pory
.fuente
/;
prueba para seleccionar una tupla pero también la:>
convierte al formato de salida deseado. (¡Veo en la documentación que está permitido, pero solo después de leer esta respuesta!) Debe especificar que su función requiere que se ordenen los dígitos permitidos: da la respuesta incorrecta en3331
lugar de3313
si se llama con[{3,1},4]
.Select[FromDigits/@Tuples[Sort@#,#2],PrimeQ][[1]]&@@#&
?0
y@@#&
parece redundante.Brachylog , 15 bytes
Pruébalo en línea!
Esto es bastante lento.
Explicación
fuente
JavaScript (ES6), 86 bytes
Toma información a través de la sintaxis de curry, por ejemplo,
(4)('12')
Para ejecutarse en modo estricto (para la optimización de llamada de cola [TCO] ). Si su entorno no admite TCO, se producirá un error de desbordamiento de la pila para primos más grandes que la pila de entornos.
Para entradas no válidas se ejecutará para siempre.
Nota:
chrome://flags/#enable-javascript-harmony
y habilitar este indicador para ejecutar el fragmento anterior con soporte de TCO.fuente
F=i=>(P=j=>i%--j?P(j):1==j)(i)&&...
MATL, 17 bytes
Esta función acepta dos entradas, un número entero que especifica el número de dígitos y una matriz de caracteres que indica los posibles valores. En el caso de no primos, se muestra un error.
Pruébalo en línea!
Explicación
fuente
Pyth -
1312 bytesTest Suite .
fuente
Sabio, 62 bytes
Toma entrada del formulario:
f( 4 , {'1','2'} )
fuente
Perl 6 , 43 bytes
Se ejecuta para siempre si no existe una solución.
fuente
05AB1E , 17 bytes
Pruébalo en línea!
fuente
05AB1E ,
221918 bytes (-1 @Riley)Pruébalo en línea!
fuente
,
al final.Perl5, 77 bytes
Corre así:
fuente
Ruby,
7776 bytesFormato de entrada: un número y una cadena.
Ejemplo:
fuente
Perl 6 , 68 bytes
Intentalo
Devoluciones
Nil
si no se puede encontrar tal primo.Expandido:
fuente
Python 2 + primefac ,
9185 bytesPruébalo en línea
La entrada es como
4,{'1','2'}
.fuente
1,{'1'}
no es una entrada válida (porque 1 no es primo), por lo que puede hacer lo que quiera allí.PHP, 82 bytes
Toma un número y una cadena de dígitos de los argumentos de la línea de comandos. Corre con
-nr
.Descompostura
fuente
Java 7,
139141 bytes+2 bytes al admitir números superiores a 32 bits (cambiado
int
along
)Formato de entrada: un entero (es decir
4
) y una cadena (es decir"12"
)Explicación:
Código de prueba:
Pruébalo aquí
NOTA: El segundo caso de prueba está deshabilitado porque se repite durante mucho tiempo.
Salida:
fuente