Pair prime golf jumelé et séquence Collatz


12

Il s'agit d'un nouveau type de défi inspiré par le problème de récupération du code source muté .

Vous devez écrire deux programmes ou fonctions dans la même langue. Le premier doit résoudre la tâche n ° 1 et le second doit résoudre la tâche n ° 2.

Votre score sera la somme du programme le plus long et de la distance Levenshtein entre le code source des deux programmes. Un score plus bas est préférable, vous devriez donc essayer de rendre les deux solutions similaires tout en gardant la durée des programmes courte.

Tache 1

On vous donne un entier positif Net vous devez sortir la séquence Collatz de Nséparés par des espaces ou saut de ligne. Le séparateur de fin est autorisé.

Le premier élément de la séquence Collatz est N. Les autres éléments sont générés en fonction de leur successeur :ai1

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

Dès que la séquence atteint, 1aucun nouvel élément n'est généré.

Entrée => Exemples de sortie:

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

Tâche n ° 2

Une paire de nombres premiers jumeaux est une paire d'entiers positifs dont la différence est 2 et ils sont tous les deux des nombres premiers.

On vous donne un entier positif Net vous devez sortir la plus petite paire de nombres premiers jumeaux où les deux nombres premiers sont plus grands que Nle premier nombre doit être le plus petit et les deux nombres premiers doivent être séparés par des espaces ou une nouvelle ligne. Le séparateur de fin est autorisé.

Entrée => Exemples de sortie:

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

Extrait pour calculer le score

(Modification de celle du problème Récupérer le code source muté .)

Éditer

Dans l'en-tête des réponses, utilisons le format

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

Par exemple

Python 2, 60 + 32 = 92

Réponses:


3

Pyth, 18 + 13 = 31

Séquence de Collatz:

QWtQ=Q@,/Q2h*Q3QQ

Twin Primes:

=Qf!ttP*T+T2hQQ+Q2

Essayez-le ici.

Quelques idées grâce à FryAmTheEggman.


4

CJam, 24 + 17 = 41 42

Programme Collatz :

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

Programme Twin Prime :

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

Les deux prennent l'entrée de STDIN et les numéros séparés par l'espace d'impression / la nouvelle ligne dans STDOUT

Essayez-les en ligne ici


3

CJam, 25 + 16 = 41

Programme Collatz:

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

Programme Twin Prime:

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

Testez-le ici.

Je viens de jouer au golf pour le moment. Je vais voir si je peux réduire le score d'une manière ou d'une autre.


2

Pyth, 20 + 14 = 40 34

Collatz:

QWtQ=Q@,/Q2h*3QQQ

Paires principales:

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

Les deux sont des programmes qui prennent les entrées de STDIN et sortent les numéros sur les nouvelles lignes. Je viens de jouer aux deux réponses tout en utilisant la même primitive de boucle pour l'instant. Cela pourrait probablement être amélioré un peu.

Edit: Ajout d'une meilleure vérification de l'état volé à @isaacg. Il semble que l'utilisation du filtre soit encore plus courte que l'utilisation d'une boucle while pour les paires principales.

Essayez-le en ligne ici.


Cela sort 3 5pour l'entrée 3 sur les paires principales. Il devrait sortir 5 7.
isaacg

@isaacg Corrigé, coûté 3 :(
FryAmTheEggman

2

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

-4 score grâce à ASCII uniquement

Séquence Collatz (14 octets):

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

Essayez-le en ligne!

Nombre premier double (14 octets):

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

Essayez-le en ligne!


Golfed Twin Prime (11 octets):

[ÅNDÌp#]DÌ»

Essayez-le en ligne!


Le lien Collatz est incorrect
ASCII uniquement

Merci, corrigé!
Wisław

nombres premiers , -3 score. vaut probablement la peine de garder la version golfée dans la réponse comme note de côté au cas où il y aurait un golf différent et meilleur (que fait exactement la paire, btw? comme pourquoi dois-je faire ,,, et pourquoi ne Ð,fonctionne que là-bas)
ASCII uniquement

-1 de plus (modifier: tant pis, le premier nombre devrait être plus petit. Marquer 24 pour l'instant
ASCII uniquement


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

Premiers jumeaux:

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

mentionner Java 8 ..
Optimizer

1

Mathematica, 53 + 29 = 82

Séquence de Collatz:

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

Programme Twin Prime:

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

1

> <> , 116 + 86 = 202

Programme Collatz (46):

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

Programme de nombres premiers jumeaux (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

Aie. Les deux programmes commencent avec la même atoifonction, mais après cela, les nombres premiers jumeaux descendent. Le même morceau de code est répété deux fois pour le contrôle de primalité - il pourrait être légèrement plus court pour réutiliser le morceau, mais sa configuration ne sauverait pas beaucoup d'octets.

Pourrait faire beaucoup mieux en jetant la moitié arrière des nombres premiers jumeaux dans les endroits inutilisés du programme Collatz, mais je ne sais pas si cela est autorisé.


3
"Golfez-le, golfez-le NAO!" - Noanold Golfzenegger. Cela dit, la question ne semble pas dire que l'ajout d'ordures pour réduire la distance de Levenshtein est tabou, donc je deviendrais fou;)
FryAmTheEggman

0

Distance C ++ = 114 Longueur plus longue = 155 Score = 269

Tache 1

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

Tâche 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;}

Tâche 2 améliorée

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

Je pense que vous n'avez même pas essayé de réduire le score. Par exemple, vous avez des noms de fonctions différents, des noms d'arguments différents, un type de retour différent et ce qui augmente la distance.
Optimizer

@Optimizer Je ne connais pas d'autre moyen de tester les nombres premiers? D'autres langues ont cela intégré.
bacchusbeale

1
Je ne parlais même pas de changer l'algo. Par exemple, ce code n'a que 102 distances: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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.