Reto
Dado un entero de entrada n > 0, genera el número de primos (que no sea n, si nes primo) que se pueden producir al alterar un dígito en la expansión decimal de n (sin cambiar el número de dígitos).
Ejemplos
Por ejemplo, n = 2. Al alterar un dígito en la expansión decimal de 2, podemos obtener tres números primos adicionales 3, 5, 7, entonces a(n) = 3.
Para otro ejemplo n = 13,. Al alterar un dígito, puede obtener primos 11, 17, 19, 23, 43, 53, 73, 83, entonces a(13) = 8.
Para un ejemplo final, n = 20. Al alterar un dígito, puede obtener primos 23, 29, entonces a(20) = 2.
Secuencia
Aquí están los primeros 20 términos para comenzar. Este es OEIS A048853 .
4, 3, 3, 4, 3, 4, 3, 4, 4, 4, 7, 4, 8, 4, 4, 4, 7, 4, 7, 2
Reglas
- Se puede suponer que la entrada y la salida encajan en el tipo de entero nativo de su idioma.
- La entrada y la salida se pueden dar en cualquier formato conveniente .
- Ignorar los ceros a la izquierda (por ejemplo,
03no es un número primo en esta formulación). - Un programa completo o una función son aceptables. Si es una función, puede devolver el resultado en lugar de imprimirlo.
- Si es posible, incluya un enlace a un entorno de prueba en línea para que otras personas puedan probar su código.
- 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).
code-golf
sequence
arithmetic
primes
AdmBorkBork
fuente
fuente

npara el que es la salida0. Creo que esn = 200. También creo que vienen en racimos:200,202,204,206,208,320,322,...,328,510,...,518,620,...628,840,...,848, etcRespuestas:
05AB1E ,
17161411 bytesExplicación:
Pruébalo en línea! o hasta 100 .
fuente
.L? ¿Seriamente?.L?!?!L.<para guardar un byte. Incluso si el filtro no elimina el100/1000/10000/ etc., nunca es un primo de todos modos, por lo que no afectará la salida.Python 2 ,
146136127121118bytesGracias a @ Mr.Xcoder por sugerencias
Explicación:
Genere números con longitud igual a la longitud de entrada, omitiendo primero (1,10,100,1000, ...)
Verifique que el número generado difiera de la entrada en solo un dígito
Compruebe si hay prima
Contar
Pruébalo en línea!
fuente
r=range, ya que lo usa muchas veces ...?143? Porque veorange(1,10), eso excluye0y103es primordial0enr(0,10).r(10)es suficientelambda I,r=range:Javascript (ES6) 148 bytes
Toma la entrada como una cadena y regresa como un número
Fragmento de código de ejemplo:
fuente
Jalea ,
211815 bytes3 bytes gracias a Dennis.
Pruébalo en línea! o Verificar todas las cajas de prueba .
fuente
æḟ⁵æR×⁵$DnDS€ċ1Guarda algunos bytes.Mathematica, 105 bytes
Pruébalo en línea!
Functionque espera un número entero positivo#. Establecefigual a la funciónIntegerDigitsque devuelve la lista de dígitos de su entrada. Tomamos elRangedega10g(ambos inclusive), dondeg=10^Length@f@#/10está la mayor potencia del10menor o igual a la entrada#, entoncesCountelntal quePrimeQ@n&&MatchQ[f@n-f@#,{x=0...,_,x}]&&n!=#.PrimeQ@ncomprueba sines primo,MatchQ[f@n-f@#,{x=0...,_,x}]comprueba si la diferencia entre la lista de dígitos deny#es de la forma{0..., _, 0...}, yn!=#asegura queny#sonUnequal.fuente
JavaScript (ES6),
153142139 bytesAcepta entradas como una cadena. Comportamiento indefinido para entrada no válida, aunque debería terminar sin error en cualquier cadena que se me ocurra. Sin embargo, no necesariamente antes de la muerte por calor del universo, particularmente para cuerdas largas.
Manifestación
Mejoras
Ahorró 11 bytes refactorizando las
reduce()llamadas enmap()llamadas y copiando implícitamente la matrizaen el parámetro de la función, en lugar de hacerlo dentro del contexto de lasplice()llamada.Guardado 3 bytes gracias a @Neil sugerencia 's para convertir
[...Array(10)]a[...''+1e9].Código no minificado
Explicación
La función utiliza dos niveles
map()para sumar la cantidad de permutaciones que pasan la prueba de primalidad, que se tomó prestada y modificada de esta respuesta .(Respuesta original)
Entonces, por ejemplo, para calcular la suma de una matriz, pasaría un
initialValuede0y devolvería unaggregateigual aaccumulator + currentValue. Modificando ligeramente este enfoque, calculamos el número de permutaciones que pasan la prueba de primalidad:Eso es esencialmente lo interno
reduce(), que itera todas las permutaciones de ladigitArrayal cambiar cadadecimaluna a una específicapermutatedDigit. Luego necesitamos un exteriorreduce()para iterar todos los posiblespermutatedDigitcon los que reemplazar cada unodecimal, lo cual es justo0-9.Anormalidades en la implementación
[...''+1e9].map((u,j)=>...era el camino más corto @Neil podía pensar en iterar un argumento0a través9. Sería preferible hacerlou, perouno es útil para cada elemento de la matriz, en este caso.i+jen la condición ternaria, verifica que0no haya una permutación posible del dígito inicial, según la especificación de desafío.j!=casegura que el originalnno sea candidato para pasar la prueba de primalidad.(a.splice(i,1,j),a.join``)Es un desastre.splice()reemplaza el dígito endecimal == icon elpermutatedDigit == j, pero comosplice()devuelve los elementos eliminados (en este caso, sería igual a[a[i]]) en lugar de la matriz modificada, debemos usar el operador de coma para pasar la matriz modificadaaa la prueba de primalidad, pero no antes dejoin()iniciarla en una cadena de números.Por último,
eval()es guardar un byte ya que, en comparación con el enfoque más canónico, es más corto:La referencia a la prueba principal
pse inicializa en un argumento no utilizado para lamap()llamada.fuente
[...''+1e9]es más corta.Python 2 , 134 bytes
Pruébalo en línea!
Más elegante, versión más larga:
La entrada se toma como una cadena.
Explicación (versión anterior)
lambda x,r=range,l=len:- Define una lambda con un parámetro de cadenaxy dos parámetros constantesr=rangeyl=len.sum(1...)- Obtenga la longitud, que ahorra 1 bytelen([...]).for f in r(10**~-l(x),10**l(x))- Genera absolutamente todos los números con el mismo orden de magnitud que la entrada (espere0). Por ejemplo, una entrada de3, daría como resultado[1, 2, 3, 4, 5, 6, 7, 8, 9].sum(1for t in r(l(x))if`f`[t]==x[t])==~-l(x)and f>1- Comprueba si el número actual está exactamente a 1 dígito de la entrada y si es mayor que 1.all(f%v for v in r(2,f))- Comprueba si el número actual es primo.fuente
sum(1for..ifBOOL)parasum(BOOLfor)guardar algunos bytes</joke>)JavaScript (ES6), 137 bytes
Adapta mi otra respuesta en un envío de programa completo utilizando los métodos de API web
prompt()yalert().fuente
Bean , 126 bytes
Pruébalo en línea!
Una adaptación de mi envío de JavaScript de programa completo .
JavaScript equivalente
Explicación
ase inicializa implícitamente como la primera línea de entrada como una cadena y la última instrucciónsse emite implícitamente, que contiene la suma de las permutaciones principales.fuente
Casco , 32 bytes
Pruébalo en línea!
Ungolfed / Explicación
fuente
Japt ,
2823 bytes-5 bytes gracias a @ETHproductions.
Toma una cadena como entrada.
Pruébalo en línea!
fuente
¬x@AÇ|Y©+UhYZsÃâ kUn)èj?PHP ,
151147141140136134129128 bytes-6 bytes gracias a @Einacio; -1 byte gracias a @Titus
Pruébalo en línea!
Formateado, con comentarios:
Para que sea lo más corto posible, he:
$f = $t = 1;++incremento como parte de otra expresión$f += $i % $t++ == 0(el incremento se ejecuta después de la operación de módulo y, por lo tanto, no afecta su resultado);ifinstrucción para un incremento condicional, hemos utilizado el hecho de que boolean verdadero cuando se convierte como un entero se convierte en 1, usando en$c += $f == 2;lugar deif ($f == 2) $c++;.fuente
levenshtein. ¡Buena idea!$i%$t++<1es más corto que$i%$t++==0.Perl 6 , 83 bytes
Pruébalo en línea!
fuente
X~lugar demap? 81 bytesPHP, 100 + 1 bytes
Ejecutar como tubería
-nRo probarlo en línea .Descompostura
fuente
Java 8,
201194 bytesExplicación:
Pruébalo aquí
new Integer(s.substring(0,i)+j+(i<l?s.substring(i+1):"")dará como resultado estos enteros:Por
0-9:1, 2, 3, 4, 5, 6, 7, 8, 9.Por
10:10, 20, 30, 40, 50, 60, 70, 80, 90, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19.Por
11:11, 21, 31, 41, 51, 61, 71, 81, 91, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19.etc.
fuente
JavaScript (ES7), 118 bytes
Toma la entrada como una cadena.
Pruébalo en línea!
Comentado
fuente
Ruby con
-rprime101 bytes-rprimePruébalo en línea!
fuente