Dado un entero positivo como entrada, determine si es un número magnánimo.
Un número magnánimo es un número tal que cualquier inserción de un +
signo entre dos dígitos en la base 10 da como resultado una expresión de un entero primo.
Por ejemplo 40427 es magnánimo porque
4+0427 = 431 is prime
40+427 = 467 is prime
404+27 = 431 is prime
4042+7 = 4049 is prime
Salida
Debe generar dos valores distintos, uno cuando la entrada es magnánima y otro cuando la entrada no lo es.
Tanteo
El objetivo de este concurso será hacer que el tamaño del código fuente escrito para resolver esta tarea, dado en bytes, sea lo más pequeño posible.
Casos de prueba
1 -> True
2 -> True
4 -> True
10 -> False
98 -> True
101 -> True
109 -> False
819 -> False
4063 -> True
40427 -> True
2000221 -> True
1
con un signo más insertado entre dos caracteres (sin inserción) solo puede dar como resultado1
, lo que en sí mismo no es primo.1
y2
no tienen dos dígitos, el conjunto de expresiones está vacío. Todos los miembros del conjunto vacío son primos. Además, ninguno de ellos lo es, pero eso es aparte del punto. Es un poco confuso, te lo daré, pero creo que tiene más sentido que las alternativas.Respuestas:
05AB1E , 10 bytes
Código
Utiliza la codificación 05AB1E . Pruébalo en línea! o Verifique todos los casos de prueba!
Explicación
fuente
1 - 9
? El producto de un conjunto vacío es 1? ¿Por qué?1
y multiplicarlo por cada elemento del conjunto, así que ...sum
en[]
que es equivalente a0
, utilizando la propiedad de inducción en la aplicación era muy inteligente.C (gcc) , 83
848583848675111bytesTodas las optimizaciones están desactivadas y solo en GCC de 32 bits.
-1 byte gracias a @ceilingcat
+ algunos bytes para el
1
caso.+ algunos bytes para funciones reutilizables.
Toma la entrada como un entero. Devuelve 1 para casos falsos, 0 para casos verdaderos.
Pruébalo en línea!
Vea mi otra respuesta para el código de Mathematica (55 bytes).
fuente
1
,98
y4063
.Retina , 38 bytes
Pruébalo en línea!
Imprime
1
números magnánimos y0
otros.Explicación
Comenzamos haciendo coincidir cada posición entre dos dígitos (posiciones que no son límites de palabras) e insertando tanto el prefijo como el sufijo de esa coincidencia en unario, utilizando
_
como dígito unario. Entonces, en lugar de insertar+
s, insertamos directamente el resultado unario de la suma allí.Ahora dividimos la cadena alrededor de los dígitos, de modo que cada suma vaya en su propia línea y eliminemos esos dígitos (también habrá una línea inicial y posterior vacía, pero eso no es importante).
Esta es la expresión regular estándar para unir números no primos en unario. Usar una
G
etapa de repetición aquí significa que simplemente mantenemos todas las líneas que contienen no primos positivos (descartando las líneas vacías).Finalmente verificamos si la cadena está vacía. Si la entrada fue magnánima, la etapa anterior habrá descartado todas las líneas (porque eran todas primas), y esto nos da
1
. De lo contrario, si alguna línea no era un primo, permanecerá en la cadena y la expresión regular falla, dando0
.fuente
Python 2 ,
827978 bytesEsto es lento y solo puede hacer frente a los casos de prueba con la memorización.
Pruébalo en línea!
Versión alternativa, 79 bytes.
Acelerado a costa de un byte.
Pruébalo en línea!
fuente
Jalea , 12 bytes
Pruébalo en línea!
Verifique todos los casos de prueba.
fuente
d
!Java 8,
1751719488 bytes-77 gracias a @PeterTaylor al usar una aritmética (en lugar de String with
.substring
) y deshacerse del método separado para verificar si el entero es primo.-6 bytes usando el método de verificación principal de @SaraJ , ¡así que asegúrate de votarla!
Pruébalo aquí
Explicación:
fuente
p
con recursividad; en segundo lugar, acumule los resultados de modo que la función principal solo requiera unareturn
declaración al hacer que el valor centinela seap
be-1
y usar&
para verificar que todos los valores devueltos sean-1
.n->{for(long d=10,m=1;d<n;d*=10)m|=p(n/d+n%d,2)-2;return m>0;}long p(long n,int i){return i<n?p(n%i<1?1:n,i+1):n;}
d<=n
para manejar10
. El desbordamiento de la pila no es un problema (la especificación no proporciona un rango de entrada que debe manejarse), pero se puede solucionar y se pueden obtener más ahorros volviendo a un bucle y alineando .Pyth , 14 bytes
Pruébalo en línea! Se mostrará
True
si el número es magnánimo, de loFalse
contrario. Toma el número como una cadena.Explicaciones
fuente
Python 2 ,
104102 9896103 bytesi
completamente anónimo ya que se llama solo una vez.x-1
solox
para la prueba de verificación principal.x=10
corrigió la falla para el caso , agregando así 7 Bytes, gracias a @Dennis y @Wheat Wizard por detectarlo: mi versión anterior estaba considerando 1 como primoPruébalo en línea!
fuente
x-1
al final del rango; La gama es exclusiva a la derecha.Japt ,
2416 bytesEsto fue más o menos una colaboración entre @Shaggy, @ETHproduction y yo.
Pruébalo en línea!
Toma la entrada como una cadena.
fuente
x
convierte automáticamente los elementos de la matriz a números ;-)XîU
es genio. Creo queU¯X
funciona para la misma duración, pero aún asíPip ,
2524 bytesPruébalo en línea!
Explicación
a
es el primer argumento de línea de comandos.1,#a
genera un rango que contiene números a1
travéslen(a)-1
. Para esto, mapeamos una función lambda:Luego, mapeamos otra función lambda
0N_%,_=1
, que prueba la primalidad. Lo tomé de esta respuesta ; Puedes leer la explicación allí. Finalmente, doblamos la lista en AND lógico ($&
). El resultado es1
si todas las sumas fueran primas,0
si alguna de ellas no lo fuera.Ejemplo, con entrada de
4063
:fuente
CJam , 22 bytes
Pruébalo en línea!
Imprime un entero positivo para la verdad, cero para la falsedad.
-1 gracias a un ingenioso truco de Peter Taylor .
-3 gracias a otro consejo de Peter Taylor.
fuente
0&!
es más corto que1+:*
!
devuelve una intersección booleana y utilizada con el valor falso0
para que puedas hacer0&!
3 en lugar de1&!!
...,
operador de filtro en lugar def
.!
para convertir a un booleano: eso era estándar en GolfScript y es estándar en CJam. Y1&!!
sería incorrecto:0&!
es la prueba obvia porque el requisito es general, no existe.Japt , 23 bytes
Toma la entrada como una cadena.
Dang it; golpeado hasta el golpe en una alternativa mucho más corta en la que estaba trabajando.
Pruébalo
fuente
¬£i+YÄÃe@OxX j
4063
(debe ser verdadero, es falso). El truco aquí es que JS cree que un líder0
significa que quieres octal ...40043
por ejemplo) Simplemente agregue un+
después0
para solucionar esto.Mathematica, 75 bytes
Function
que espera aString
.PrimeQ@ToExpression@StringInsert[#,"+",n]
devuelve si insertar un+
después deln
dígito th da un número primo.Table[...,{n,2,StringLength@#}]
da la lista de estos valores comon
rangos desde2
hasta la longitud de la cadena. Luego tomamosAnd
cada uno de los elementos de esa lista. Convenientemente, siStringLength@#<2
, entoncesTable[...]
es la lista vacía, para la cualAnd@@{}==True
fuente
Mathematica, 55
504549505462 62bytesParece que debería publicarlo por separado.
+6 bytes para la longitud del código medida nuevamente.
+5 bytes gracias a ngenisis.
Toma la entrada como un entero y devuelve regular
True
yFalse
. El
intermedio es unicode 0xF4A1, abreviatura deFunction[,]
. La longitud del código se mide según el tamaño del archivo (UTF-8 sin BOM), comente si no es correcto.PowerRange[x]
devuelve 1, 10, 100 ... no mayor quex
, que se introduce en Mathematica 10.fuente
Inglés simple
4,204341315251241240 bytes(Re-) incorporó pruebas de primalidad en la biblioteca de Plain English, moviendo 3.863 bytes a la biblioteca de Plain English. Se eliminaron 26 bytes de espacio en blanco. Ahorró 64 bytes al abreviar las variables locales. Ahorró 10 bytes al abreviar la interfaz. Según la sugerencia de RosLuP , se guardó 1 byte al cambiar cómo se inicializa e incrementa m.
Versión no codificada del código final:
Notas: El IDE en inglés simple está disponible en github.com/Folds/english . El IDE se ejecuta en Windows. Se compila en código x86 de 32 bits.
La bifurcación dinámica del inglés simple de la Orden de Osmosia ya tenía pruebas de primalidad en la versión 4700, pero utilizaba un algoritmo muy ineficiente (desde enero hasta junio de 2017). Las versiones 4001-4011 de la bifurcación dinámica del sitio GitHub omitieron las pruebas de primalidad. La versión 4013 de la bifurcación dinámica del sitio GitHub incluye pruebas de primalidad. El código para realizar la prueba de primalidad se desarrolló como parte de revisiones anteriores de esta respuesta.
fuente
Perl 6 , 58 bytes
Pruébalo en línea!
10, 10 * * ...^ * > $_
es la secuencia geométrica de múltiplos de diez, tomada hasta una antes del elemento que excede el parámetro de entrada$_
. Luego, solo verificamos que para cada potencia de diez, la suma del parámetro de entrada tomado div y modifique esa potencia sea primo.fuente
Haskell
114110 bytesSin disculpas con la explicación:
fuente
p x=[x]==[i|i<-[2..x],x`mod`i<1]
como su primer cheque, puede guardar 2 bytes.divMod x$10^i
lugar dex`divMod`(10^i)
Axioma, 88 bytes
prueba y resultados
fuente
Brachylog , 11 bytes
Pruébalo en línea!
fuente
Perl 6 , 35 bytes
Pruébalo en línea!
Explicación:
fuente
Apilado , 51 bytes
Pruébalo en línea!
Esta es una función. Funciona convirtiendo su argumento en una cadena (
tostr
), duplicándolo y obteniendo su longitud (:#'
), restando 1 (1-
), haciendo un rango de 1 a ese número (~>
). La pila se ve más o menos así, para entrada40427
:Realizamos vectorizados
splitat
, lo que da como resultado que la siguiente matriz esté en la parte superior de la pila:Transponiendo esto con
tr
, obtenemos:Luego, mapeamos la función
['+',' '#
# ~ prime](with
map`). Esta función hace:Luego, después del mapa, concatenamos
1
. Esto se debe a queall
devuelveundef
una lista vacía.fuente
JavaScript (ES6), 70 bytes
Falla en el último caso en mi navegador debido a un error de "demasiada recursividad" durante el cálculo
P(200023)
. Esperemos que esto no lo invalide.fuente
QBIC , 38 bytes
Explicación
fuente
CJam (21 bytes)
Demostración en línea , banco de pruebas en línea
Disección
fuente
Pyth,
1514 bytesBanco de pruebas
Guardado un byte usando el cambio más reciente de Pyth.
fuente
APL (NARS), caracteres 35, bytes 70
prueba:
Esta sería la traducción en APL de Axiom post algo aquí ...
fuente
PHP, 100 bytes
imprime
1
si la entrada es magnánima, si no la salida está vacía. Ejecutar como tubería-nR
o probarlo en línea .fuente
Perl 5
-p
, 42 bytesPruébalo en línea!
fuente