Pair-Golf Twin Primes und die Collatz-Sequenz


12

Dies ist eine neue Art von Herausforderung, die durch das Problem " Wiederherstellung des mutierten Quellcodes" inspiriert wurde .

Sie sollten zwei Programme oder Funktionen in derselben Sprache schreiben. Der erste sollte Aufgabe Nr. 1 lösen und der zweite sollte Aufgabe Nr. 2 lösen.

Ihre Punktzahl ist die Summe aus dem längeren Programm und der Levenshtein-Distanz zwischen dem Quellcode der beiden Programme. Eine niedrigere Punktzahl ist besser, daher sollten Sie versuchen, die beiden Lösungen ähnlich zu gestalten und gleichzeitig die Länge der Programme kurz zu halten.

Aufgabe 1

Sie sind eine positive ganze Zahl angegeben Nund Sie ausgeben sollte die Collatz - Sequenz von Ndurch Leerzeichen oder Zeilenumbruch getrennt. Das nachfolgende Trennzeichen ist zulässig.

Das erste Element der Collatz-Sequenz ist N. Die restlichen Elemente werden basierend auf ihrem Nachfolger generiert :einich-1

einich={einich-12 wenn einich-1 ist gerade3einich-1+1 wenn einich-1 ist ungerade

Sobald die Sequenz erreicht ist, werden 1keine neuen Elemente generiert.

Input => Output Beispiele:

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

Aufgabe Nr. 2

Ein Paar Doppelprimzahlen ist ein Paar positiver Ganzzahlen, deren Differenz 2 beträgt und beide Primzahlen sind.

Sie erhalten eine positive Ganzzahl Nund sollten das kleinste Paar von Doppelprimes ausgeben, bei denen beide Primes größer als sind. NDie erste Zahl sollte die kleinere sein und die beiden Primes sollten durch Leerzeichen oder Zeilenumbrüche getrennt sein. Das nachfolgende Trennzeichen ist zulässig.

Input => Output Beispiele:

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

Snippet zur Berechnung der Punktzahl

(Änderung des Problems, bei dem der mutierte Quellcode wiederhergestellt wurde.)

Bearbeiten

In der Kopfzeile der Antworten verwenden wir das Format

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

Z.B

Python 2, 60 + 32 = 92

Antworten:



4

CJam, 24 + 17 = 41 42

Collatz-Programm :

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

Doppelprimes-Programm :

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

Beide nehmen Eingaben von STDIN und von durch Leerzeichen / Zeilenvorschub getrennten Zahlen an STDOUT

Probieren Sie sie hier online aus


3

CJam, 25 + 16 = 41

Collatz-Programm:

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

Doppelprimes-Programm:

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

Teste es hier.

Ich habe gerade beide Golf gespielt. Ich werde sehen, ob ich die Punktzahl irgendwie reduzieren kann.


2

Pyth, 20 + 14 = 40 34

Collatz:

QWtQ=Q@,/Q2h*3QQQ

Prime Pairs:

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

Beide Programme nehmen Eingaben von STDIN entgegen und geben die Zahlen in Zeilenumbrüchen aus. Ich habe gerade beide Antworten mit demselben Loop-Primitiv abgegolft. Dies könnte wahrscheinlich einiges verbessert werden.

Bearbeiten: Verbesserte Zustandsüberprüfung von @isaacg hinzugefügt. Die Verwendung von Filtern scheint immer noch kürzer zu sein als die Verwendung einer while-Schleife für die Primzahlpaare.

Probieren Sie es hier online aus.


Dieser gibt 3 5für den Eingang 3 Primzahlpaare aus. Es sollte ausgegeben werden 5 7.
Isaacg

@isaacg Behoben, kostete 3 :(
FryAmTheEggman

2

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

-4 Punkte nur dank ASCII

Collatz-Sequenz (14 Bytes):

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

Probieren Sie es online!

Doppelprimzahlen (14 Byte):

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

Probieren Sie es online!


Golfed Twin Primes (11 Bytes):

[ÅNDÌp#]DÌ»

Probieren Sie es online!


Collatz-Link ist falsch
ASCII

Danke, das wurde behoben!
Wisław

Primzahlen , -3 Punkte. Es lohnt sich wahrscheinlich, die Golfversion in der Antwort als Randnotiz beizubehalten, falls es ein anderes, besseres Golfspiel gibt (was genau macht das Paar übrigens? Warum muss ich es tun ,,und warum funktioniert es nur Ð,dort ? )
Nur ASCII

-1 mehr (edit: egal, die erste Zahl sollte kleiner sein. Punktzahl 24 für den Moment
Nur 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));}

Doppelprimzahlen:

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

Erwähnen Sie Java 8 ..
Optimizer

1

Mathematica, 53 + 29 = 82

Collatz-Sequenz:

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

Doppelprimes-Programm:

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

1

> <> , 116 + 86 = 202

Collatz-Programm (46):

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

Doppelprimes-Programm (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

Autsch. Beide Programme starten mit der gleichen atoiFunktion, aber danach geht es bergab. Derselbe Codeteil wird zur Überprüfung der Primalität zweimal wiederholt. Die Wiederverwendung des Teils kann etwas kürzer sein, bei der Einrichtung werden jedoch nicht viele Bytes gespart.

Könnte viel besser sein, wenn man die hintere Hälfte der Doppelprimzahlen in die unbenutzten Stellen des Collatz-Programms wirft, aber ich bin mir nicht sicher, ob das erlaubt ist.


3
"Golf es, Golf es NAO!" - Noanold Golfzenegger. Das heißt, die Frage scheint nicht zu sagen , dass in Müll Hinzufügen der Levenshtein - Distanz zu reduzieren , ist tabu, so würde ich gehen Nüsse;)
FryAmTheEggman

0

C ++ Abstand = 114 Längere Länge = 155 Punktzahl = 269

Aufgabe 1

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

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

Aufgabe 2 verbessert

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

Ich denke, Sie haben nicht einmal versucht, die Punktzahl zu reduzieren. Zum Beispiel haben Sie unterschiedliche Funktionsnamen, unterschiedliche Argumentnamen, unterschiedliche Rückgabetypen und welche erhöhen nicht Ihre Distanz.
Optimierer

@Optimizer Ich kenne keinen anderen Weg, um auf Primzahlen zu testen? Andere Sprachen haben dies eingebaut.
Bacchusbeale

1
Ich redete nicht einmal davon, das Algo zu ändern. Zum Beispiel hat dieser Code nur 102 Entfernung: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;}
Optimierer
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.