Su desafío, si elige aceptarlo, es codificar golf una función que devuelve verdadero o falso (o alguna representación significativa similar de sí y no) si un número cumple con los siguientes criterios:
- El entero en sí es un número primo O
- Cualquiera de sus números enteros vecinos son primos
Por ejemplo:
una entrada de 7
devolvería True.
Una entrada de 8
también devolvería True.
Una entrada de 15
devolvería False. (Ni 14, 15 o 16 son primos)
La entrada debe poder regresar correctamente para números entre 2 ^ 0 y 2 ^ 20 inclusive, por lo que no hay necesidad de preocuparse por problemas de signos o desbordamientos de enteros.
code-golf
number
primes
decision-problem
Señor llama
fuente
fuente
Respuestas:
J, 17
Devuelve booleanos codificados como códigos de retorno de proceso: cero para verdadero, distinto de cero para falso. Uso de la muestra:
fuente
*/0 p:<:,],>:
es más corto y una función adecuada (lambda) es([:*/0 p:<:,],>:)
Haskell, 47 personajes
fuente
Python
8580Primera vez en Code Golf, así que probablemente faltan algunos trucos.
fuente
[]
. todos estarán más que felices de trabajar con una expresión generadora. Si no le importa que su código sea feo, también puede eliminar los espacios entre0
yfor
, y)
yor
.f=lambda n:any(all(m%i for i in range(2,m))for m in[n,n-1,n+1])
No es un contendiente real en la falta de código de ninguna manera, pero aún se somete desde la determinación de la prima por expresión regular está torcido de muchas maneras!
Python (2.x), 85 caracteres
fuente
Rubí (55 o 50 como lambda)
o como lambda (solía
g[23]
llamarlo)Coffeescript (53)
fuente
¡La aburrida solución de Mathematica, 35 !
fuente
Or@@PrimeQ/@{n-1,n,n+1}
.Or@@PrimeQ@{#-1,#,#+1}&
(la barra en su código no es necesaria)C,
1128272 caracteresSiguiendo el comentario de Ilmari Karonen, ahorró 30 caracteres al eliminar
main
, ahoraP
devuelve verdadero / falso. También reemplazado bucle con recursión, y algunos ajustes más.Versión original:
fuente
main(n,m)int**m;
.Mathematica, 24 bytes
No sé por qué esta vieja publicación apareció en mi lista hoy, pero me di cuenta de que Mathematica es competitiva aquí.
Función sin nombre que toma un argumento entero y devuelve
True
oFalse
. Implementación directa.fuente
PrimeQ
hilos sobre listas, por lo queOr@@PrimeQ@{#-1,#,#+1}&
(oOr@@PrimeQ[#+{-1,0,1}]&
) también funciona, para -1 byte. (Aunque, supongo que no sé si sePrimeQ
enroscaron en las listas en 2012.)Stax , 6 bytes
Ejecutar y depurarlo
Explicación (sin embalaje):
fuente
JavaScript (71
7380)Demostración: http://jsfiddle.net/ydsxJ/3/
Edición 1: Cambiar
for(i=2;i<j;i++)
afor(i=1;++i<j;)
(gracias@minitech
). Convierta laif
declaración a ternario. Movidor|=p
yp=1
hacia afuerafor
para eliminar los frenos internos. Guardado 7 caracteres.Edición 2: combina
p=1
yj++<=n
parap=j++<=n
, guarda 2 caracteres (gracias@ugoren
).fuente
for(i=1;++i<j;)
lugar defor(i=2;i<j;i++)
guardar 1 personaje más.!j%i
no funcionará debido a la precedencia. Una alternativa de trabajo esj%i<1
.p=j++<=n
? Si Javascript es como C aquí, debería funcionar.Regex (ECMAScript), 20 bytes
^x?x?(?!(x+)(x\1)+$)
Pruébalo en línea!
La versión anterior no maneja correctamente el cero, pero eso solo toma 1 byte adicional:
^x?x?(?!(x+)(x\1)+$)x
Como una ventaja adicional, aquí hay una versión que ofrece una coincidencia de retorno de
1
uno menos que un primo,2
por primo y3
por uno más que un primo:^x?x??(?!(x+)(x\1)+$)x
Pruébalo en línea!
fuente
C #, 96
Devuelve -1,0,1 para verdadero, cualquier otra cosa es falsa.
¡Cualquier sugerencia para hacerlo más corto sería maravilloso!
Forma expandida:
fuente
if(i==r-1)break;
y cambiar la mitad delfor
ciclo dei<r
ai<r-1
. Te llevaría a 82.GolfScript: 26
Explicación: el bloque más interno
{.:i,{i\%!},,2=@|\(}
determina si la parte superior de la pila es primo al verificar si hay exactamente 2 factores menos que la parte superior de la pila. Luego disjunta esto con el segundo elemento en la pila, que contiene el estado de si ya se ha visto una prima. Finalmente, disminuye el número en la parte superior de la pila.Comience incrementando la entrada, inicializando el estado de vista principal, y repita el bloque 3 veces. Como esto disminuirá dos veces, pero comenzamos incrementando, esto cubrirá
n+1
yn-1
.fuente
C #,
8797 caracteresfuente
CJam, 12 bytes
CJam es mucho más joven que este desafío, por lo que esta respuesta no es elegible para la marca de verificación verde (que debe actualizarse a la respuesta de randomra de todos modos). Sin embargo, jugar al golf en realidad fue bastante divertido: comencé con 17 bytes y luego cambié mi enfoque por completo tres veces, ahorrando uno o dos bytes cada vez.
Este es un bloque, el equivalente más cercano a una función en CJam, que espera la entrada en la pila y deja un 1 (verdadero) o 0 (falso) en la pila.
Pruébalo aquí.
Así es como funciona:
fuente
F #, 68 bytes (no competitivos)
Pruébalo en línea!
Por eso me encanta el golf de código. Todavía soy muy verde con F #, pero aprendo mucho sobre cómo funciona el lenguaje y qué puede hacer con este tipo de desafíos.
fuente
APL (Dyalog Classic) , 20 bytes
Pruébalo en línea!
fuente
Retina , 22 bytes
Pruébalo en línea!
Toma unario como entrada
fuente
Java 8, 83 bytes
Devoluciones
true
/false
como verdad / valores de falsey.Pruébalo en línea.
Explicación: "
Entonces
int p(int n)
dará como resultado-1
forn=0
y non-primes, y dará como resultadon-1
forn=1
o primes. Dado quep(0)+p(1)+p(2)
se convertirá-1+0+1 = 0
y devolvería falso (aunque2
sea un primo), esten=1
es un caso límite con este enfoque.Un solo bucle sin método separado sería de 85 bytes :
Devuelve
1
/0
como verdad / valores de falsey.Pruébalo en línea.
Explicación:
fuente
Japt , 7 bytes
Pruébalo en línea!
fuente
R, 68 caracteres
Uso (1 para VERDADERO, 0 para FALSO):
fuente
i(n-1)|i(n)|i(n+1)
lugar deifelse(i(n-1)|i(n)|i(n+1),1,0)
?C ++
fuente
Q,
43 caracteres36fuente
J, 16 caracteres
fuente
Python,
6967 caracteres8**7 > 2**20
siendo un poco más corto para escribirfuente
Ruby, 47 caracteres pero muy legible
fuente
C ++ 97
Ugoren parece haberme ganado en la solución inteligente. Entonces es una versión corta en el enfoque de tres veces:
fuente
Adelante (gforth) , 104 bytes
Pruébalo en línea!
Explicación
Comprobación principal (p)
Función principal (f)
fuente
Julia 0.4 , 23 bytes
Pruébalo en línea!
fuente
Jalea , 5 bytes
Pruébalo en línea!
Cómo funciona
fuente