Par primos gemelos de golf y la secuencia de Collatz

12

Este es un nuevo tipo de desafío inspirado en el problema Recuperar el código fuente mutado .

Debe escribir dos programas o funciones en el mismo idioma. El primero debe resolver la Tarea # 1 y el segundo debe resolver la Tarea # 2.

Su puntaje será la suma del programa más largo y la distancia de Levenshtein entre el código fuente de los dos programas. Una puntuación más baja es mejor, por lo que debe intentar hacer que las dos soluciones sean similares, manteniendo cortas las duraciones de los programas.

Tarea 1

Se le da un número entero positivo Ny debe generar la secuencia Collatz de Nseparados por espacios o nueva línea. Se permite el separador final.

El primer elemento de la secuencia de Collatz es N. El resto de los elementos se generan en función de su sucesor :ai1

ai={ai12 if ai1 is even3ai1+1 if ai1 is odd

Tan pronto como la secuencia llega, 1no se generan nuevos elementos.

Entrada => Ejemplos de salida:

6 => 6 3 10 5 16 8 4 2 1
8 => 8 4 2 1
1 => 1

Tarea 2

Un par de primos gemelos es un par de enteros positivos cuya diferencia es 2 y ambos son primos.

Se le da un número entero positivo Ny debe generar el par más pequeño de primos gemelos donde ambos primos son más grandes que NEl primer número debe ser el más pequeño y los dos primos deben estar separados por espacios o nueva línea. Se permite el separador final.

Entrada => Ejemplos de salida:

6 => 11 13
42 => 59 61
1 => 3 5

Fragmento para calcular el puntaje

(Modificación de la del problema Recuperar el código fuente mutado ).

Editar

En el encabezado de las respuestas usemos el formato

[Language], [longer length] + [distance] = [final score].

P.ej

Python 2, 60 + 32 = 92

randomra
fuente

Respuestas:

3

Pyth, 18 + 13 = 31

Secuencia Collatz:

QWtQ=Q@,/Q2h*Q3QQ

Primes gemelos:

=Qf!ttP*T+T2hQQ+Q2

Pruébalo aquí.

Algunas ideas gracias a FryAmTheEggman.

isaacg
fuente
4

CJam, 24 + 17 = 41 42

Programa Collatz :

ri2*{:N2%N3*)N2/?__p(}g;

Programa de primos gemelos :

ri_2+]{:)_{mp}/&_+((}gS*

Ambos toman datos de STDIN e imprimen números separados por espacio / nueva línea a STDOUT

Pruébalos en línea aquí

Optimizador
fuente
3

CJam, 25 + 16 = 41

Programa Collatz:

l~2*{_2%{3*)}{2/}?_p_(}g;

Programa de primos gemelos:

l~_2+]{:)_{mp}/&!_&}gS*

Pruébalo aquí.

Acabo de jugar golf los dos por ahora. Veré si puedo reducir el puntaje de alguna manera.

Martin Ender
fuente
2

Pyth, 20 + 14 = 40 34

Collatz:

QWtQ=Q@,/Q2h*3QQQ

Pares principales:

~Q1WttP*Q+Q2~Q1;Q+Q2

Ambos son programas que toman datos de STDIN y generan los números en las nuevas líneas. Acabo de jugar golf ambas respuestas mientras usamos la misma primitiva de bucle por ahora. Esto probablemente podría mejorarse bastante.

Editar: Se agregó una mejor verificación de las condiciones robadas de @isaacg. Parece que usar filtro es aún más corto que usar un ciclo while para los pares primos.

Pruébelo en línea aquí.

FryAmTheEggman
fuente
Esto genera 3 5la entrada 3 en pares primos. Debería salir 5 7.
isaacg
@isaacg Lo arregló, costó 3 :(
FryAmTheEggman
2

05AB1E , 14 + 13 10 9 = 27 24 23

-4 puntuación gracias solo a ASCII

Secuencia Collatz (14 bytes):

[DÉi3*>ë2÷}Ð,#

Pruébalo en línea!

Primes gemelos (14 bytes):

[DÅND>>Dp#}s,,

Pruébalo en línea!


Golfed Twin primes (11 bytes):

[ÅNDÌp#]DÌ»

Pruébalo en línea!

Wisław
fuente
El enlace de Collatz es incorrecto
solo ASCII el
Gracias, lo arreglé!
Wisław
primos , -3 puntaje. Probablemente valga la pena mantener la versión de golf en la respuesta como una nota al margen en caso de que haya un golf diferente y mejor (¿qué hace exactamente el par, por cierto? ¿Por qué tengo que hacerlo ,,y por qué solo Ð,funciona allí?)
Solo ASCII
-1 más (editar: no importa, el primer número debería ser menor. Puntuación 24 por ahora
solo ASCII
22?
Solo ASCII el
1

Java 8, 118 + 84 = 202

Collatz:

n->{for(System.out.println(n);n>1;System.out.println(n=n%2<1?n/2:3*n+1));}

Primos gemelos:

n->{t:for(int p,z;;n++){for(z=n;z<n+3;z=z+2)for(p=2;p<z;p++)if(z%p<1)continue t;System.out.print(n+" "+(n+2));break;}}
Ypnypn
fuente
mencione Java 8 ..
Optimizer
1

Mathematica, 53 + 29 = 82

Secuencia Collatz:

Print/@(NestWhileList[If[OddQ@#,3#+1,#/2]&,#,#>1&]);&

Programa de primos gemelos:

Print/@(NestWhile[NextPrime,#,!PrimeQ[#+2]&]+{0,2});&
alephalpha
fuente
1

> <> , 116 + 86 = 202

Programa Collatz (46):

0i:0(?v$a*$'0'-+!
?v6,>:>~:nao:1=?;3*:2%
 >1+^

Programa de primos gemelos (116):

0i:0(?v$a*$'0'-+!
v&2+1~<:-2
<v!?%&+1:&:v?=&:&:
 >&~0$2&2+v>&~143.
:&:1+&%?!v>:&:&=?v
0v?*r$0~&< .561~&<.1
:<;noan-2

Ay. Ambos programas comienzan con la misma atoifunción, pero después de eso los primos gemelos van cuesta abajo. La misma parte del código se repite dos veces para la verificación de primalidades: puede ser un poco más corto para reutilizar de alguna manera la pieza, pero la configuración no ahorraría muchos bytes.

Podría hacerlo mucho mejor arrojando la mitad posterior de primos gemelos a los lugares no utilizados del programa Collatz, pero no estoy seguro de si eso está permitido.

Sp3000
fuente
3
"¡Golf, Golf, NAO!" - Noanold Golfzenegger. Dicho esto, la pregunta no parece decir que agregar basura para reducir la distancia de Levenshtein es tabú, por lo que me volvería loco;)
FryAmTheEggman
0

C ++ Distancia = 114 Longitud más larga = 155 Puntuación = 269

Tarea 1

void c(int N){while(N>1){cout<<N<<' ';N=(N%2==0)?N/2:N*3+1;}cout<<N;}

Tarea 2

int p(int x){int z=0;for(int i=2;i<x;i++){if(x%i==0){z=1;break;}}return z;}
void c(int N){N=(N%2==0)?N+1:N+2;int M=N+2;while(p(N)+p(M)>0){N=M;M+=2;}cout<<N<<' '<<M;}

Tarea 2 mejorada

int p(int N){int z=0;for(int i=2;i<N;i++){if(N%i==0){z=1;break;}}return z;}
void c(int N){N=(N%2==0)?N+1:N+2;while(p(N)+p(N+2)>0){N+=2;}cout<<N<<' '<<N+2;}
bacchusbeale
fuente
Creo que ni siquiera trataste de reducir la puntuación. Por ejemplo, tiene diferentes nombres de funciones, diferentes nombres de argumentos, diferentes tipos de retorno y qué no, lo que aumenta su distancia.
Optimizador
@Optimizer No conozco otra forma de probar primos Otros idiomas tienen esto incorporado.
bacchusbeale 01 de
1
Ni siquiera estaba hablando de cambiar el algo. Por ejemplo, este código solo tiene una distancia de 102:int p(int x){int z=0;for(int i=2;1<x;i++){cout<<x<<' ';x=(x%2==0)?x/2:x*3+1;}cout<<x;return z;}
Optimizer