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.

Rohit
fuente
¿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

Grifo
fuente
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.)
Gareth
fuente
5

Mathematica , 35

{#,#+6}&~Array~#~Cases~{__?PrimeQ}&
Señor mago
fuente
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]
Howard
fuente
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}
tmartin
fuente
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
beary605
fuente
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í

Grifo
fuente
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;
}
Ugoren
fuente
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)
Paolo
fuente
1

Rubí 75 74

La nueva versión utiliza el método de prueba principal de Artem Ice :

z=->x{(9..x).map{|i|[i-6,i]}.select{|a|a.all?{|r|(2...r).all?{|m|r%m>0}}}}

Prueba en línea: http://ideone.com/yaOdn

Cristian Lupascu
fuente
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]]

defhlt
fuente
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.

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

Chinche de tinta
fuente
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.

racionalis
fuente
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
Mr Scapegrace
fuente
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
Toto
fuente
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)

Cristian Lupascu
fuente
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}]
DavidC
fuente
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))

defhlt
fuente
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 }
defhlt
fuente
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]]
Yury
fuente
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

Saumil
fuente
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.

Will Ness
fuente
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
plannapus
fuente
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.

Tito
fuente
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.
Erik el Outgolfer
fuente
-3

Obj-C 64 caracteres

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

isPrime implementado por separado

akshay1188
fuente
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