Generar premios sexy


8

Sexy Primes son pares de números (n, m)como ny mambos son primos y m = n + 6.

Debe crear una función que tome un número entero, verifique si hay números primos atractivos de 0 a ese número entero y devolverá una matriz de matrices.

Por ejemplo, listSexy(30)debe devolver [[5,11], [7,13], [11,17], [13,19], [17,23], [23,29]]o algún equivalente.

Este es el por lo que gana el programa con el bytecount más corto.


¿Puedes explicar cómo se ve el formato de salida deseado?
Howard

11
Bah, odio cuando el desafío cambia después de que se han enviado las respuestas.
Griffin

2
¿Hay alguna razón para verificar desde 0? ¿Por qué no debería verificar desde (5,11)? Aquí se debe dar una breve definición de primos sexys, mientras que el enlace a Wikipedia para leer más es bienvenido.
usuario desconocido

1
¡En portugués, Sexy Primes se traduce en lo mismo que Sexy Cousins!
sergiol

Respuestas:


11

MATLAB 32

i=1:n;i(isprime(i)&isprime(i+6))

n es tu número


1 Que es la herramienta adecuada para el trabajo: isprime. No es que la operación lo pretendiera.
Johannes Kuhn

5

J, 34 33 31 32 39 37 caracteres

s=.[:(,.-&6)[:I.1([:*/p:)"1 i.,.6-~i.

Perdió un personaje manteniendo ambos números primos por debajo del límite ... y otros 7 declarando una función.

Uso:

   s 100
11  5
13  7
17 11
19 13
23 17
29 23
37 31
43 37
47 41
53 47
59 53
67 61
73 67
79 73
89 83

Editar

Parece que muchas de las nuevas respuestas no están creando funciones, tomando entradas o limitando ambos números en el par para que estén debajo n; si ignoro esas restricciones también, puedo bajar a 28 caracteres :

(,.6&+)I.*/"1[1 p:(i.,.6+i.)


3

GolfScript, 32 caracteres

~),2>{:P{(.P\%}do(!},:L{6+L?)},p

Como no se especificó el formato de salida, el código anterior imprimirá el primo inferior de cada par. Por lo tanto, xse incluye un número si xy x+6son primos y ambos están por debajo n. La entrada se da como un número único en STDIN.

> 150
[5 7 11 13 17 23 31 37 41 47 53 61 67 73 83 97 101 103 107 131]

Creo que deberías imprimir ambos primos. Es parte de la tarea.
ugoren

1
@ugoren La tarea cambió después de enviar mi versión. Intentaré agregar eso a mi versión pronto.
Howard

Sí, su respuesta coincide con la tarea original.
ugoren

2

K3 / Kona , 45

{a@&6=(-).'a:,/a,\:/:a:&{(x>1)&&/x!'2_!x}'!x}

.

{a@&6=(-).'a:,/a,\:/:a:&{(x>1)&&/x!'2_!x}'!x}100
(11 5
 13 7
 17 11
 19 13
 23 17
 29 23
 37 31
 43 37
 47 41
 53 47
 59 53
 67 61
 73 67
 79 73
 89 83)

Y la misma solución en la encarnación actual de K, que es idéntica a la solución K3, excepto por el hecho de que no tiene un operador de mod incorporado, que agrega alrededor de 14 caracteres para 59

{a@&6=(-).'a:,/a,\:/:a:&{(x>1)&&/{x-y*x div y}[x;2_!x]}'!x}

2

Python ( 93 90 99 95)

¡Yay para isprimefunciones rápidas y sucias !

a=lambda x:all(x%i for i in range(2,x));b=2
while b<input():
 b+=1
 if a(b)&a(b+6):print b,b+6

1en lugar de Truete ahorrará 3 personajes ...
Wooble

¿Por qué sigo perdiendo eso? Fijo.
beary605

No obtienes un parámetro límite. También, []en all()que no es necesario (al menos en Python 2.7).
ugoren

¿Wow en serio? ¡Frio! Implementaré el parámetro.
beary605

No sé por qué restas 1 de x, pero puedes eliminar eso para 2 caracteres. Luego puede reemplazar el ciclo while con un ciclo for desde 2 hasta input () + 1 para otros 2 caracteres.
JPvdMerwe

1

Octava 39

Modifiqué mi respuesta de MATLAB para cumplir con las nuevas (molestas) reglas. nes tu valor

p=@isprime;i=1:n;[j=i(p(i)&p(i+6));j+6]

Puede ser probado aquí


1

C, 102 99 95 caracteres

Devolver una matriz en C es algo que intenta evitar. Entonces, la función sobtiene el límite ny un puntero a un conjunto de enteros, y lo llena con los datos. Cada par de primos sexys se coloca en dos posiciones en la matriz. Así o[0]=5, o[1]=11, o[2]=7, o[3]=13. La función asume que la matriz es lo suficientemente grande.

x=7,l;
p(){
    return++l>=x/2||x*(x-6)%l&&p();
}
s(int n,int*o){
    for(;l=++x<=n;)p()?*o++=x-6,*o++=x:0;
}

1

R, 83 caracteres

f=function(n){library(gmp);p=isprime;for(i in 1:n)if(p(i)&p(i+6)){print(c(i,i+6))}}

Uso:

f(150)


1

Rubí, 99 88 86 84 82 78

f=->x{(9..x).map{|n|[n-6,n]if[n,n-6].all?{|t|(2...t).all?{|m|t%m>0}}}.compact}

Salida de muestra:

[[5, 11], [7, 13], [11, 17], [13, 19], [17, 23], [23, 29], [31, 37], [37, 43], [41, 47], [47, 53], [53, 59], [61, 67], [67, 73], [73, 79], [83, 89]]


1

Pitón, 137 132 126 122 116

Me doy cuenta de que esto es un poco fallido, pero es mi primera respuesta, entonces, ¿por qué no?

f=lambda x:not[y for y in range(2,x)if x%y==0]
i=30
print [(x,y)for x in range(i)for y in range(i)if f(x)&f(y)&x-6==y]

Usar listas de comprensión, así como el hecho de que [] = False

f(x)en realidad devuelve todos los factores de x, y luego puede resolver la preferencia a partir de eso.


Puedes convertirte f(x)en f=lambda x:not[y for y in range(2,x)if x%y==0]para guardar algunos personajes. También puede reducir los ifs al final de la comprensión de su lista con f(x)&f(y)&(x-6==y).
beary605

@ beary605 Realmente no sé mucho sobre lamdas (bueno, no sé nada), así que lo investigaré, pero sí, y no si.
ACarter

Una lambda es una función anónima que devuelve un valor. a=lambda x,y,z:(value here)es el mismo que def a(x,y,z):return (value here).
beary605

Impresionante, parece que me acostumbro. Actualizado. ¡Gracias!
ACarter

1

JavaScript (1 tweet = 140 caracteres)

Aquí está:

function t(n,i){for(i=2;i<n;i++)if(!(n%i))return!1;return!0}function s(n,p){for(p=[],i=2;i<n-6;i++)if(t(i)&&t(i+6))p.push([i,i+6]);return p}

Tratar s(30).


1

J, 25 caracteres

(#~*/"1@p:~&1)(,+&6)"0 i.

i.n crea un rango de [0, n)

(,+&6)"0toma cada número entero nen la lista y forma un parn, n+6

(#~ condition)es básicamente un filter, y la condición en este caso */"1@p:~&1, solo verifica si un par está compuesto únicamente por números primos.


1

C # (279 caracteres)

Básicamente, es la solución de Saumil con un par de ajustes. Sin embargo, no tengo suficiente reputación para comentar, así que ...

using System;namespace X{public class P{static int l=100;static void Main(){F(0);}static bool I(int n){bool b=1>0;if(n==1){b=1<0;}for(int i=2;i<n;++i){if(n%i==0){b=1<0;break;}}return b;}static void F(int p){if((p+6)<=l){if(I(p+6)&&I(p)){Console.WriteLine(p+6+","+p);}F(p+1);}}}}

Salida:

11,5
13,7
17,11
19,13
23,17
29,23
37,31
43,37
47,41
53,47
59,53
67,61
73,67
79,73
89,83

0

Perl: 73 char

sub p{(1x$_[0])!~/^(11+?)\1+$/}map{$x=$_+6;p($_)&&p($x)&&say"$_,$x"}2..<>

uso:

echo 30 | perl -E 'sub p{(1x$_[0])!~/^(11+?)\1+$/}map{$x=$_+6;p($_)&&p($x)&&say"$_,$x"}2..<>'

salida:

5,11
7,13
11,17
13,19
17,23
23,29

0

C # 295

using System;using System.Linq;namespace K{class C{public static void Main(string[]a){Func<int,bool>p=i=>Enumerable.Range(2,i-3).All(x=>i%x>0);Console.WriteLine("["+String.Join(",",Enumerable.Range(0,int.Parse(a[0])).Where(i=>i>9&&p(i)&&p(i-6)).Select(i=>"["+(i-6)+","+i+"]").ToArray())+"]");}}}

Prueba en línea: http://ideone.com/4PwTW (en esta prueba he reemplazado int.Parse(a[0])con el valor int real, ya que no puedo proporcionar argumentos de línea de comandos a los programas que se ejecutan en ideone.com)


0

Mathematica - 69 48 caracteres

Asumiendo que a m se le haya asignado un valor

p=PrimeQ;Cases[Range@m,n_/;p@n&&p[n+6]:>{n,n+6}]

0

Scala (82)

def p(n:Int)=9 to n map(x=>List(x-6,x))filter(_.forall(l=>2 to l-1 forall(l%_>0)))

Salida de muestra: Vector(List(5, 11), List(7, 13), List(11, 17), List(13, 19), List(17, 23), List(23, 29), List(31, 37), List(37, 43), List(41, 47), List(47, 53), List(53, 59), List(61, 67), List(67, 73), List(73, 79), List(83, 89))


0

Factor 140

Este lenguaje es divertido e interesante. Mi primer guion

:: i ( n -- ? )
n 1 - 2 [a,b] [ n swap mod 0 > ] all? ;
:: s ( n -- r r )
11 n [a,b] [ i ] filter [ 6 - ] map [ i ] filter dup [ 6 + ] map ;

Uso:

( scratchpad ) 100 f

--- Data stack:
V{ 5 7 11 13 17 23 31 37 41 47 53 61 67 73 83 }
V{ 11 13 17 19 23 29 37 43 47 53 59 67 73 79 89 }

0

PARI / GP (62 caracteres)

f(a)=w=[];forprime(x=0,a,isprime(x+6)&w=concat(w,[[x,x+6]]));w

Ejemplo:

 (00:01) gp > f(a)=w=[];forprime(x=0,a,isprime(x+6)&w=concat(w,[[x,x+6]]));w
 (00:01) gp > f(30)
 %1 = [[5, 11], [7, 13], [11, 17], [13, 19], [17, 23], [23, 29]]

0

C # ( 321 303 290 caracteres)

using System;namespace X{public class P{ static int l=100;static void Main(){F(0);}static bool I(int n){bool b=true;if(n==1){b=false;}for(int i=2;i<n;++i){if(n%i==0){b=false;break;}}return b;}static void F(int p){if((p+6)<=l){int m=p+6;if(I(m)&&I(p)){Console.WriteLine(m+","+p);}F(p+1);}}}}

Producción:
11,5
13,7
17,11
19,13
23,17
29,23
37,31
43,37
47,41
53,47
59,53
67,61
73,67
79,73
89,83


Bienvenido a CodeGolf! Puede guardar algunos caracteres si asigna nombres de una letra a la clase y a los métodos (por ejemplo, en class Plugar de class Program).
Cristian Lupascu

0

Haskell (65 caracteres)

p n=[(x,x+6)|x<-[3..n-6],all(\k->all((>0).mod k)[2..k-1])[x,x+6]]

La salida:

Prelude> p 100
[(5,11),(7,13),(11,17),(13,19),(17,23),(23,29),(31,37),(37,43),(41,47),(47,53),(
53,59),(61,67),(67,73),(73,79),(83,89)]

Sobre la respuesta de MATLAB aquí:

(Gasté toda mi reputación en una recompensa, así que no puedo comentar todavía) . Google dice: "la función isprime de Matlab ... se basa en el probabilístico Miller-Rabin". Entonces parece que la entrada de MATLAB debe ser descalificada.


0

R 85 81 caracteres

f=function(n){m=2:n;a=m[rowSums(!outer(m,m,`%%`))<2];cbind(b<-a[(a+6)%in%a],b+6)}

Ejemplo de ejecución:

f(50)
      [,1] [,2]
 [1,]    5   11
 [2,]    7   13
 [3,]   11   17
 [4,]   13   19
 [5,]   17   23
 [6,]   23   29
 [7,]   31   37
 [8,]   37   43
 [9,]   41   47

0

PHP, 106 bytes

function p($n){for($i=$n;--$i&&$n%$i;);return$i-1;}for(;++$i<$argv[1]-5;)p($i)|p($k=$i+6)?:print"$i,$k\n";

El programa imprime pares n,n+6delimitados por saltos de línea. Corre con -r.

Modifiqué mi función is_prime (y guardé un byte) para que regrese 0para primos al golf en Elvis.


0

Gelatina , 13 bytes (no competitiva)

‘Ḷµż+6$ÆPẠ$Ðf

Pruébalo en línea!

Explicación mejorada:

‘Ḷµż+6$ÆPẠ$Ðf Main link. Arguments: z.
‘Ḷ            Range: [0..z].
  µ           Start a new monadic chain.
    +6        Add 6 to each element of x. (implicit x=⁸).
      $       Last two links (+6) as a monad.
   ż          Interleave x and y.
       ÆP     Do a primality check every element of every element of z.
         Ạ    Do an "all" check on every element of z.
          $   Last two links as a monad.
           Ðf Keep the elements of z that return a truthy value given this monad.

-3

Obj-C 64 caracteres

if([self isPrime:i]&&[self isPrime:i+6])NSLog(@"%d %d\n",i,i+6);

isPrime implementado por separado


66
Si declara una función isPrimeque no forma parte del idioma o de la biblioteca estándar, debe incluir el recuento de caracteres para esa función como parte de su puntaje.
Gareth
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.