Escriba un programa que pruebe la primalidad de un número específico y dé la salida como un valor booleano (True es primo). Su prueba principal puede (pero no tiene que ser) válida para el número 1.
Aquí está el truco: su propio programa tiene que sumar un número primo. Convierta todos los caracteres (incluidos los espacios) a su valor Unicode / ASCII ( tabla ). Luego, sume todos esos números para obtener la suma de su programa.
Por ejemplo, tome este programa no tan bueno que escribí en Python 3.3:
q=None
y=int(input())
for x in range(2,int(y**0.5)+1):
if y%x==0:
q=False
if not q:
q=True
print(q)
Si convierte todos los caracteres a su valor Unicode / ASCII correspondiente, obtendrá:
113 61 78 111 110 101 10 121 61 105 110 116 40 105 110 112 117 116 40 41 41 10 102 111 114 32 120 32 105 110 32 114 97 110 103 101 40 50 44 105 110 116 40 121 42 42 48 46 53 41 43 49 41 58 10 32 32 32 32 105 102 32 121 37 120 61 61 48 58 10 32 32 32 32 32 32 32 32 113 61 70 97 108 115 101 10 105 102 32 110 111 116 32 113 58 10 32 32 32 32 113 61 84 114 117 101 10 112 114 105 110 116 40 113 41
Luego puede encontrar la suma de esos números manualmente o con su propio programa. Este programa específico suma 8293, que es un número primo.
Por supuesto, este es Code Golf, por lo que cuanto más pequeño pueda hacer su programa, mejor. Como lo señalaron otros usuarios, este programa no es muy deportivo.
Algunas reglas:
Las entradas válidas incluyen STDIN y mensajes (sin funciones, es solo una forma de agregar código adicional gratuito). Se permiten espacios, pero solo si son cruciales para la funcionalidad de su programa. La salida debe ser una salida, no solo almacenada en una variable o devuelta (use print, STDOUT, etc.)
Las banderas se pueden usar y se deben contar literalmente, no expandidas. No se permiten comentarios. En cuanto a los caracteres no ASCII, deben asignarse al valor en su codificación respectiva.
Asegúrese de enumerar el tamaño de su programa y la suma del programa. Probaré para asegurarme de que los programas sean válidos.
¡Buena suerte!
Aquí hay un fragmento para contar la suma de su programa y verificar si es primo:
fuente
Respuestas:
¡Hola Mundo! 13 bytes
1193
fuente
Rubí, suma 3373, 37 bytes
fuente
Microscript II, 2 bytes (suma 137)
Microscript II, 4 bytes (suma 353)
De hecho, estoy bastante sorprendido de que ambos hayan tenido sumas de bytes primos.
fuente
Japt , 2 bytes,
191
U
:85
j
:106
Pruébalo en línea!
fuente
Pyth, 2 bytes,
127
Pruébalo en línea
Salidas
1
para primos,0
para no primos./
Tiene punto de código47
.P
Tiene punto de código80
.Cómo funciona:
fuente
Haskell, 52 bytes, 4421
Teorema de Wilson.
fuente
::IO Int
realidad no debería ser necesario a menos que ese es el camino más corto se puede obtener una suma de primera.Python 2, 50 bytes,
4201
Funciona para 1. La salida es positiva si es primo, o cero si no.
Pruébalo en línea
Python 2, 44 bytes,
3701
No funciona para 1. Emite un booleano.
Pruébalo en línea
fuente
JavaScript (ES6), 47 bytes,
3541
Esto se basa en gran medida en la función de prueba de primalidad de ETHproductions , que se puede encontrar aquí .
fuente
05AB1E , 2 bytes,
173
Explicación:
Pruébalo en línea!
fuente
PHP, 38 bytes, suma 2791
Dato curioso: con en
$h
lugar de$c
, la suma sería2801
(también un primo), y su representación binaria101011110001
leída como decimal también es un número primo.toma el argumento de la línea de comando, imprime
1
o una cadena vacía. Corre con-r
.Código tomado de mi propia función principal (mira la publicación original si puedes).
fuente
R, 27
32bytes, suma 22432609Guardado 5 bytes gracias a @rturnbull
Esto hace uso de la función isprime de la biblioteca gmp.
fuente
cat(!!gmp::isprime(scan()))
es 5 bytes más corto y suma2243
, también primo.Python 2, 44 bytes, suma de bytes 3109
Esta es la implementación de 44 bytes de xnor con los nombres de variables de menor valor que producen una suma de bytes primos.
Imprime
1
si es primo y0
si no.fuente
Gelatina 6 bytes , suma de bytes 691
imprime
1
si es primo y0
si no.TryItOnline!
Los bytes en hexadecimal son
93 0D D5 2C CD 45
(vea la página de códigos ), o en decimal son los147 13 213 44 205 69
que suman 691, que es primo.¿Cómo?
La
Æḍ
funcionalidad es tal que los primos y sus negaciones devuelven uno, mientras que otros enteros no (los compuestos y sus negaciones devuelven números mayores que uno, uno y menos uno devuelven cero y cero, curiosamente, menos uno).La
Ṡ
funcionalidad es tal que los enteros negativos devuelven menos uno, cero devuelve cero y los enteros positivos devuelven uno.Por lo tanto, las dos funciones solo devuelven el mismo valor para los primos.
Tenga en cuenta que el programa de 3 bytes
ƓÆP
que prueba directamente si la entrada de STDIN es primo desafortunadamente no es un programa de suma prima (240).Las pruebas de igualdad utilizando
=
(iguales),e
(existe en) o⁼
(no iguales a vectorización) para 5 bytes tampoco producen programas de suma prima.Alternativa (quizás no aceptable) 4 bytes, suma 571
Si las restricciones de E / S todavía permiten programas completos que toman un argumento.
... usando el mismo principio que el anterior, donde
⁼
es la igualdad no vectorizante (el aspecto no vectorizador no tiene ningún efecto ya que no hay nada que vectorizar de todos modos). Los valores hexadecimales son0D D5 8C CD
los que están13 213 140 205
en decimal, que suma a 571, un número primo.Nuevamente, tenga en cuenta que el programa de 2 bytes
ÆP
no tiene una suma prima (93).fuente
ƓÆPG
(311) yÆPF
(163) deberían estar bien, creo?ƓÆḍ,ṠE
, el valor es16183
, ¡que coincidentemente es primo!ƓÆPG
esté bien. También he preguntado si un programa que toma información en lugar de usar STDIN es aceptable.ÆP¥
son 3 bytes y 97.CJam , 4 bytes, suma de bytes 439
Utiliza la prueba de primalidad incorporada.
Pruébalo en línea!
Solución alternativa, 4 bytes, suma 461
fuente
Mathematica, 21 bytes,
1997
Input[]
lee una línea de entrada (de STDIN si no se utiliza ningún extremo frontal, a través de un cuadro de diálogo si se utiliza el extremo frontal Mathematica),Print@*PrimeQ
es la composición (@*
) de laPrint
yPrimeQ
funciones, y@
es la notación función de prefijo.fuente
Perl 6 ,
2422 bytes,1949
Se requieren los tres caracteres de espacio en blanco.
(Sin embargo, a Perl 6 no le importa qué tipo de espacio en blanco son, así que elegí una nueva línea en lugar del espacio más utilizado para la segunda ...)
fuente
Pyth, 4 bytes,
367
Pruébalo aquí!
fuente
Pip , 8 bytes,
511
Escribí un corrector principal, y la suma fue primo. Conveniente. Verifique las entradas 1-30: ¡ Pruébelo en línea!
Explicación
fuente
Pari / GP , 23 bytes,
2111
Pruébalo en línea!
fuente
J, 18 bytes,
1103
No lejos de ser óptimo, lo menos que pude jugar un test de primalidad de programa completo fue 17 Bytes:
echo(p:[:".1!:1)1
que desafortunadamente suma 1133 = 11 * 103.Desafortunadamente, no puedo entender cómo hacer que la entrada del teclado funcione en TIO, por lo que todavía no hay un enlace.
Explicación:
Validando el programa:
fuente
C (gcc) ,
6260 bytes, 4583Muy claro. Salidas * si es primo, de lo contrario, genera un espacio. No funciona para 1.
-2 gracias a l4m2
Pruébalo en línea!
fuente
n;main(i){for(scanf("%d",&n);++i<n;)n=n%i?n:0;puts("*"+!n);}
Es posible que deba cambiar el nombre de alguna variable para la suma primaAWK , 36 bytes, suma de bytes 2239
Pruébalo en línea!
Salidas
0
si no es prime y1
para prime. Definitivamente no es el código más eficiente, ya que verifica cada número entero mayor que1
para ver si divide la entrada.fuente
Excel (57 bytes, suma de código 3547)
Excel realmente no tiene una "entrada" como tal, pero esta fórmula espera que el número que se probará esté en A1 y salga a cualquier celda en la que lo coloque. Es una fórmula de matriz, así que presione Ctrl-Shift-Enter para ingresar en lugar de entrar.
fuente
Java 8, 114 bytes, Prime 10037
Pruébalo en línea.
Explicación:
Lo he usado en
x
lugar dei
hacer que la suma Unicode sea primo. Verifique la suma unicode aquí.fuente
Gelatina , 4 bytes, Σ = 239
Pruébalo en línea!
Prueba: ¡ Pruébelo en línea! (tome los índices basados en 1 de los caracteres del programa de la página de códigos de Jelly, decremente para hacerlos basados en 0, sume y luego verifique si el resultado es primo).
fuente
SmileBASIC, 42 bytes,
2687
Emite 1 (verdadero) si el número es primo, de lo contrario 0 (falso).
Los nombres de las variables no solo se eligieron para hacer que el programa sea primo.
N
es el n umber a prueba,D
es la d iVisor, yP
mantiene un seguimiento de si N es p escarcha.fuente
Maravilla , 7 bytes,
537
Probablemente hay una mejor manera ...
fuente
Óxido, 190 bytes, puntaje 15013
Sin golf
No funciona para 1
fuente
Stax , 349
Ejecutar y depurarlo
fuente
|pQ
funciona para una puntuación de 317. Si se permite el intercambio de verdad / falsedad,|p!
funciona igual para 269.Susurros v2 , 33 bytes
Pruébalo en línea!
44381
Cómo funciona
Esto se muestra en el orden en que se ejecuta:
fuente