Una prueba principal que es LITERALMENTE excelente

23

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:

Noah L
fuente
12
En los idiomas que no son de golf, parece que podría tomar el código de decisión primo más corto y ajustar los nombres de las variables hasta que la suma sea primo.
xnor
55
¿Por qué las restricciones en E / S?
Jonathan Allan el
2
¿Qué es un "valor de Unibyte"?
aditsu
55
Hablas de personajes y páginas de códigos. Un carácter Unicode siempre tiene el mismo punto de código, sin importar qué codificación se use para representarlo. En cuanto a los caracteres no ASCII, deben asignarse al valor en su codificación respectiva. me hace pensar que realmente desea la suma de los bytes valores a ser primer
Dennis

Respuestas:

22

¡Hola Mundo! 13 bytes1193

hello, world!
Gurupad Mamadapur
fuente
1
perfeccionar . He oído hablar de este lenguaje antes, pero pensar que también tenía una suma de bytes perfecta para este desafío: D
Value Ink el
7

Rubí, suma 3373, 37 bytes

require'prime'
g=gets.to_i
p g.prime?
Tinta de valor
fuente
6

Microscript II, 2 bytes (suma 137)

N;

Microscript II, 4 bytes (suma 353)

N;ph

De hecho, estoy bastante sorprendido de que ambos hayan tenido sumas de bytes primos.

SuperJedi224
fuente
4

Pyth, 2 bytes, 127

/P

Pruébalo en línea

Salidas 1para primos, 0para no primos.

/Tiene punto de código 47. PTiene punto de código 80.

Cómo funciona:

/P
/PQQ    Implicit variables.
        Q = input
 PQ     Prime factorize Q.
/  Q    Count how many times Q appears. 1 if prime, 0 if not.
isaacg
fuente
4

Haskell, 52 bytes, 4421

main=do
 k<-readLn
 print$product[1..k-1]`rem`k==k-1

Teorema de Wilson.

fquarp
fuente
2
Lo convirtió en un programa completo e independiente.
fquarp
La ::IO Intrealidad no debería ser necesario a menos que ese es el camino más corto se puede obtener una suma de primera.
Ørjan Johansen
Buena llamada. Sin embargo, luego obtenemos algo de código que se convierte en un valor par. Agregar espacios o nuevas líneas no hace nada (incluso valores), ni tampoco cambia el nombre de la variable (aparece cuatro veces, por lo que reemplazar su código (digamos c) equivale a restar 4 * c y sumar 4 * c ', dejando el . sum incluso Sin embargo, puede ser ajustado al romper las líneas y aún así ser más corto, lo que hice.
fquarp
1
47 bytes con una prueba de primalidad diferente: ¡ Pruébelo en línea! (tenga en cuenta que hay pestañas en lugar de espacios para obtener el recuento correcto).
Laikoni
¡Bienvenido también a PPCG!
Laikoni
4

Python 2, 50 bytes, 4201

Funciona para 1. La salida es positiva si es primo, o cero si no.

p=input();print all(p%m for m in range(2,p))*~-p;p

Pruébalo en línea


Python 2, 44 bytes, 3701

No funciona para 1. Emite un booleano.

p=input();print all(p%k for k in range(2,p))

Pruébalo en línea

mbomb007
fuente
3

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í .

alert((F=(n,x=n)=>n%--x?F(n,x):!~-x)(prompt()))

Arnauld
fuente
3

05AB1E , 2 bytes,173

p=

Explicación:

p  # Checks if number is prime - returns 1 if true and 0 if false. Uses implicit input.
 = # Wouldn't usually be required for this sort of program, but I added it to make the sum prime.

Pruébalo en línea!

Okx
fuente
Algo que "los comentarios no están permitidos", pero supongo que las no-operaciones efectivas funcionan bien: D
Value Ink el
2

PHP, 38 bytes, suma 2791

Dato curioso: con en $hlugar de $c, la suma sería 2801(también un primo), y su representación binaria 101011110001leída como decimal también es un número primo.

for($b=$c=$argv[1];$c%--$b;);echo$b<2;

toma el argumento de la línea de comando, imprime 1o una cadena vacía. Corre con -r.

Código tomado de mi propia función principal (mira la publicación original si puedes).

Tito
fuente
@Artyer Está arreglado.
Titus el
2

R, 27 32 bytes, suma 2243 2609

Guardado 5 bytes gracias a @rturnbull

cat(gmp::isprime(scan(),r=43)>0)

Esto hace uso de la función isprime de la biblioteca gmp.

> sum(as.integer(charToRaw('cat(!!gmp::isprime(scan()))')))
[1] 2243
> cat(!!gmp::isprime(scan()))
1: 2243
2: 
Read 1 item
TRUE
> 
MickyT
fuente
cat(!!gmp::isprime(scan()))es 5 bytes más corto y suma 2243, también primo.
rturnbull
@rturnbull gracias por eso :)
MickyT
1

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 1si es primo y 0si no.

C=B=1
exec"B*=C*C;C+=1;"*~-input()
print B%C
Jonathan Allan
fuente
1

Gelatina 6 bytes , suma de bytes 691

ƓÆḍ,ṠE

imprime 1si es primo y 0si no.

TryItOnline!

Los bytes en hexadecimal son 93 0D D5 2C CD 45(vea la página de códigos ), o en decimal son los 147 13 213 44 205 69que suman 691, que es primo.

¿Cómo?

ƓÆḍ,ṠE - Main Link: no arguments
Ɠ      - read and evaluate a line from STDIN (integer expected)
 Æḍ    - proper divisor count
   ,   - paired with
    Ṡ  - sign
     E - all equal? - returns a boolean (1 or 0)
       - implicit print

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 ƓÆPque 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 son 0D D5 8C CDlos que están 13 213 140 205en decimal, que suma a 571, un número primo.

Nuevamente, tenga en cuenta que el programa de 2 bytes ÆPno tiene una suma prima (93).

Jonathan Allan
fuente
ƓÆPG(311) y ÆPF(163) deberían estar bien, creo?
Lynn el
Como Unicode, para ƓÆḍ,ṠE, el valor es 16183, ¡que coincidentemente es primo!
Artyer
@ Lynn Sí, parece que la "restricción de código innecesaria" (excepto el carácter de espacio) se ha eliminado, lo que hace que ƓÆPGesté bien. También he preguntado si un programa que toma información en lugar de usar STDIN es aceptable.
Jonathan Allan el
1
... Si ambas cosas están bien, entonces ÆP¥son 3 bytes y 97.
Jonathan Allan
1

CJam , 4 bytes, suma de bytes 439

qimp

Utiliza la prueba de primalidad incorporada.

Pruébalo en línea!

Solución alternativa, 4 bytes, suma 461

r~mp
Gato de negocios
fuente
1

Mathematica, 21 bytes, 1997

Print@*PrimeQ@Input[]

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@*PrimeQes la composición ( @*) de la Printy PrimeQfunciones, y @es la notación función de prefijo.

ngenisis
fuente
1

Perl 6 , 24 22 bytes,1949

say .is-prime
for +get

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 ...)

smls
fuente
1

Pip , 8 bytes,511

0Na%,a=1

Escribí un corrector principal, y la suma fue primo. Conveniente. Verifique las entradas 1-30: ¡ Pruébelo en línea!

Explicación

          a is first command-line argument
    ,a    Numbers from 0 to a-1
  a%      Take a mod each of those numbers (a%0 gives nil)
0N        Count number of times 0 occurs in that list
      =1  If 0 occurs only 1 time (for a%1), then a is prime
DLosc
fuente
1

J, 18 bytes, 1103

echo 1&p:".(1!:1)1

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:

echo 1&p:".(1!:1)1  | Full program
           (1!:1)1  | Read a line of input from keyboard
         ".         | Evaluate (converts string to int)
     1&p:           | 1 for prime, 0 for composite
echo                | Print result. The space is required, as 'echo1' would be interpreted as a variable

Validando el programa:

   1 p:+/u:inv'echo 1&p:".(1!:1)1'  NB. Convert to ints, sum, and test primality
1
Bolce Bussiere
fuente
1

C (gcc) , 62 60 bytes, 4583

Muy claro. Salidas * si es primo, de lo contrario, genera un espacio. No funciona para 1.

-2 gracias a l4m2

p;main(i){for(scanf("%d",&p);++i<p;)p=p%i?p:0;puts("*"+!p);}

Pruébalo en línea!

gastropner
fuente
1
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 prima
l4m2
@ l4m2 ¡Buena!
Gastropner
1

AWK , 36 bytes, suma de bytes 2239

{for(a=1;$0%++a&&a<$0;);$0=(a==$0)}1

Pruébalo en línea!

Salidas 0si no es prime y 1para prime. Definitivamente no es el código más eficiente, ya que verifica cada número entero mayor que 1para ver si divide la entrada.

Robert Benson
fuente
1

Excel (57 bytes, suma de código 3547)

=XOR(0<PRODUCT(MOD(A1,ROW(OFFSET(D2,0,,SQRT(A1))))),3>A1)

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.

Sophia Lechner
fuente
1

Java 8, 114 bytes, Prime 10037

interface M{static void main(String[]a){long n=new Long(a[0]),x=2;for(;x<n;n=n%x++<1?0:n);System.out.print(n>1);}}

Pruébalo en línea.

Explicación:

interface M{                     // Class
  static void main(String[]a){   //  Mandatory main-method
    long n=new Long(a[0]),       //   The first argument as number
    x=2;for(;x<n;n=n%x++<1?0:n); //   Check if `n` is a prime
    System.out.print(n>1);}}     //   Print whether `n` was a prime
                                 //    (if `n` is still the same: it's a prime;
                                 //     if `n` is now 0 or 1: it's not a prime)

Lo he usado en xlugar de ihacer que la suma Unicode sea primo. Verifique la suma unicode aquí.

Kevin Cruijssen
fuente
1

Gelatina , 4 bytes, Σ = 239

ÆPa1

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).

Erik el Outgolfer
fuente
0

SmileBASIC, 42 bytes, 2687

INPUT N:FOR D=2TO N/2P=P+!(N MOD D)NEXT?!P

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. Nes el n umber a prueba, Des la d iVisor, y Pmantiene un seguimiento de si N es p escarcha.

12Me21
fuente
0

Maravilla , 7 bytes,537

pr rl e

Probablemente hay una mejor manera ...

Mama Fun Roll
fuente
0

Óxido, 190 bytes, puntaje 15013

fn main(){let A=&mut"".into();std::io::stdin().read_line(A);let(B,mut C)=(A.trim().parse::<u64>().unwrap(),true);for H in 2..((B as f64).sqrt()+1.0) as u64{if B%H==0{C=false}}print!("{}",C)}

Sin golf

fn main() {
    let input = &mut "".into();
    std::io::stdin().read_line(input);
    let (number, mut prime) = (input.trim().parse::<u64>().unwrap(), true);

    for x in 2..((number as f64).sqrt() + 1.0) as u64 {
        if number % x == 0 {
            prime = false;
        }
    }

    print!("{}", prime);
}

No funciona para 1

dragonita44
fuente
0

Stax , 349

|pq

Ejecutar y depurarlo

Weijun Zhou
fuente
|pQ funciona para una puntuación de 317. Si se permite el intercambio de verdad / falsedad, |p! funciona igual para 269.
Khuldraeseth na'Barya
Gracias. No creo que el desafío requiera que la puntuación se minimice, así que no modifiqué esa parte.
Weijun Zhou
0

Susurros v2 , 33 bytes

>>> ⊤ℙ∘ℕ
> Input
>> 1∘2

Pruébalo en línea!

  1. Puntuación: 44381
  2. ¡Solo se agregaron 6 bytes / 2 caracteres para que sea válido!
  3. 1 no es primo

Cómo funciona

Esto se muestra en el orden en que se ejecuta:

		; Line 3:
>>  ∘		; Compose...
   1            ; Line 1 with
     2          ; The result of line 2

		; Line 2:
> Input		; Retrieve a line of input

		; Line 1:
>>> ⊤		; The input is...
     ℙ		; Prime
      ∘		; And it is...
       ℕ	; Natural
caird coinheringaahing
fuente