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

randomra
quelle

Antworten:

3

Pyth, 18 + 13 = 31

Collatz-Sequenz:

QWtQ=Q@,/Q2h*Q3QQ

Twin Primes:

=Qf!ttP*T+T2hQQ+Q2

Probieren Sie es hier aus.

Einige Ideen dank FryAmTheEggman.

isaacg
quelle
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

Optimierer
quelle
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.

Martin Ender
quelle
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.

FryAmTheEggman
quelle
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!

Wisław
quelle
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
22?
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;}}
Ypnypn
quelle
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});&
Alephalpha
quelle
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.

Sp3000
quelle
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;}
Bacchusbeale
quelle
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