Primos duplos de golfe e a sequência de Collatz

12

Esse é um novo tipo de desafio inspirado no problema Recuperar o código-fonte mutado .

Você deve escrever dois programas ou funções, ambos no mesmo idioma. O primeiro deve resolver a tarefa nº 1 e o segundo deve resolver a tarefa nº 2.

Sua pontuação será a soma do programa mais longo e a distância de Levenshtein entre o código-fonte dos dois programas. A pontuação mais baixa é melhor; portanto, tente fazer as duas soluções semelhantes, mantendo os comprimentos dos programas curtos.

Tarefa nº 1

Você é dado um número inteiro positivo Ne você deve saída a seqüência Collatz de Nseparados por espaços ou nova linha. O separador à direita é permitido.

O primeiro elemento da sequência Collatz é N. O restante dos elementos é gerado com base no sucessor :ai1

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

Assim que a sequência chega, 1nenhum novo elemento é gerado.

Entrada => Exemplos de saída:

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

Tarefa 2

Um par de números primos gêmeos é um par de números inteiros positivos cuja diferença é 2 e ambos são números primos.

Você recebe um número inteiro positivo Ne deve gerar o menor par de números primos gêmeos, em que ambos os números primos são maiores que NO primeiro número deve ser o menor e os dois números primos devem ser separados por espaços ou nova linha. O separador à direita é permitido.

Entrada => Exemplos de saída:

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

Snippet para calcular a pontuação

(Modificação de uma no problema Recuperar o código-fonte mutado .)

Editar

No cabeçalho das respostas, vamos usar o formato

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

Por exemplo

Python 2, 60 + 32 = 92

randomra
fonte

Respostas:

3

Pitão, 18 + 13 = 31

Collatz Sequence:

QWtQ=Q@,/Q2h*Q3QQ

Primes gêmeos:

=Qf!ttP*T+T2hQQ+Q2

Experimente aqui.

Algumas idéias, graças a FryAmTheEggman.

isaacg
fonte
4

CJam, 24 + 17 = 41 42

Programa Collatz :

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

Programa de primos gêmeos :

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

Ambos levam a entrada de STDIN e imprimem números separados por espaço / nova linha para STDOUT

Experimente-os online aqui

Optimizer
fonte
3

CJam, 25 + 16 = 41

Programa Collatz:

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

Programa de primos gêmeos:

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

Teste aqui.

Eu acabei de jogar os dois por enquanto. Vou ver se consigo reduzir a pontuação de alguma forma.

Martin Ender
fonte
2

Pitão, 20 + 14 = 40 34

Collatz:

QWtQ=Q@,/Q2h*3QQQ

Pares Principais:

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

Ambos são programas que recebem informações do STDIN e emitem os números em novas linhas. Apenas joguei as duas respostas com o mesmo primitivo de loop por enquanto. Provavelmente isso poderia ser melhorado bastante.

Edit: Adicionado melhor verificação de condição roubada de @isaacg. Parece que o uso de filtro ainda é mais curto do que o uso de um loop while para os pares primos.

Experimente online aqui.

FryAmTheEggman
fonte
Isso gera 3 5para a entrada 3 em pares primos. Deve sair 5 7.
Isaacg
@isaacg Corrigido, custou 3 :(
FryAmTheEggman 02/02/2015
2

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

-4 pontos graças ao ASCII-only

Sequência de Collatz (14 bytes):

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

Experimente online!

Primários gêmeos (14 bytes):

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

Experimente online!


Primos duplos com golfe (11 bytes):

[ÅNDÌp#]DÌ»

Experimente online!

Wisław
fonte
O link da Collatz está incorreto
somente ASCII
Obrigado, consertou!
Wisław 19/01/19
primos , -3 pontos. provavelmente vale a pena manter a versão golfada na resposta como uma observação lateral, caso haja um golfe diferente e melhor (o que exatamente o par faz, btw? como por que eu tenho que fazer ,,e por que só Ð,funciona lá)
somente ASCII
-1 mais (edit: não importa, o primeiro número deve ser menor. Score 24 for now
ASCII-only
22?
somente ASCII
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 gêmeos:

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
fonte
mencionar Java 8 ..
Optimizer
1

Mathematica, 53 + 29 = 82

Collatz Sequence:

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

Programa de primos gêmeos:

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

> <> , 116 + 86 = 202

Programa Collatz (46):

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

Programa Twin primes (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

Ai. Ambos os programas começam com a mesma atoifunção, mas depois disso, os primos gêmeos caem ladeira abaixo. O mesmo trecho de código é repetido duas vezes para verificação de primalidade - pode ser um pouco menor para reutilizar o trecho, mas a configuração para ele não economiza muitos bytes.

Poderia fazer muito melhor jogando a metade traseira dos primos gêmeos nos pontos não utilizados do programa Collatz, mas não tenho certeza se isso é permitido.

Sp3000
fonte
3
"Golfe, Golfe NAO!" - Noanold Golfzenegger. Dito isto, a questão não parece dizer que a adição de lixo para reduzir a distância Levenshtein é tabu, então eu iria enlouquecer;)
FryAmTheEggman
0

Distância C ++ = 114 Comprimento mais longo = 155 Pontuação = 269

Tarefa 1

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

Tarefa 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;}

Tarefa 2 aprimorada

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
fonte
Eu acho que você nem tentou reduzir a pontuação. Por exemplo, você tem diferentes nomes de funções, diferentes nomes de argumentos, diferentes tipos de retorno e quais não estão aumentando sua distância.
Optimizer
@ Otimizador Não sei de outra maneira de testar primos? Outras línguas têm isso embutido.
bacchusbeale
1
Eu nem estava falando sobre mudar o algo. Por exemplo, este código tem apenas 102 distância: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;}
Otimizador