Reto
Dado un entero de entrada n > 0
, genera el número de primos (que no sea n
, si n
es 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,
03
no 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
n
para 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 excluye0
y103
es primordial0
enr(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€ċ1
Guarda algunos bytes.Mathematica, 105 bytes
Pruébalo en línea!
Function
que espera un número entero positivo#
. Establecef
igual a la funciónIntegerDigits
que devuelve la lista de dígitos de su entrada. Tomamos elRange
deg
a10g
(ambos inclusive), dondeg=10^Length@f@#/10
está la mayor potencia del10
menor o igual a la entrada#
, entoncesCount
eln
tal quePrimeQ@n&&MatchQ[f@n-f@#,{x=0...,_,x}]&&n!=#
.PrimeQ@n
comprueba sin
es primo,MatchQ[f@n-f@#,{x=0...,_,x}]
comprueba si la diferencia entre la lista de dígitos den
y#
es de la forma{0..., _, 0...}
, yn!=#
asegura quen
y#
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 matriza
en 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
initialValue
de0
y devolvería unaggregate
igual 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 ladigitArray
al cambiar cadadecimal
una a una específicapermutatedDigit
. Luego necesitamos un exteriorreduce()
para iterar todos los posiblespermutatedDigit
con 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 argumento0
a través9
. Sería preferible hacerlou
, perou
no es útil para cada elemento de la matriz, en este caso.i+j
en la condición ternaria, verifica que0
no haya una permutación posible del dígito inicial, según la especificación de desafío.j!=c
asegura que el originaln
no sea candidato para pasar la prueba de primalidad.(a.splice(i,1,j),a.join``)
Es un desastre.splice()
reemplaza el dígito endecimal == i
con 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 modificadaa
a 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
p
se 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 cadenax
y dos parámetros constantesr=range
yl=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
a
se inicializa implícitamente como la primera línea de entrada como una cadena y la última instruccións
se 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);if
instrucció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++<1
es 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
-nR
o 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
-rprime
101 bytes-rprime
Pruébalo en línea!
fuente