Çift golf İkiz asalları ve Collatz dizisi


12

Bu, mutasyona uğramış kaynak kodu sorununun kurtarılmasından esinlenilen yeni bir zorluktur .

Her ikisi de aynı dilde iki program veya işlev yazmalısınız. Birincisi Görev # 1'i, ikincisi Görev # 2'yi çözmelidir.

Puanınız, daha uzun program ve iki program kaynak kodu arasındaki Levenshtein mesafesinin toplamı olacaktır . Daha düşük puan daha iyidir, bu nedenle programların uzunluklarını kısa tutarken iki çözümü benzer yapmaya çalışmalısınız.

Görev 1

Size pozitif bir tamsayı verilir Nve boşluk veya satırsonu ile ayrılmış Collatz dizisinin çıktısını almalısınız N. Sondaki ayırıcıya izin verilir.

Collatz dizisinin ilk unsuru N. Öğelerin geri kalanı temel alınarak oluşturulur :birben-1

birben={birben-12 Eğer birben-1 eşit3birben-1+1 Eğer birben-1 garip

Dizi ulaşır ulaşmaz 1yeni elemanlar üretilmez.

Girdi => Çıktı örnekleri:

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

Görev # 2

Bir çift ikiz prim, farkı 2 olan ve her ikisi de prim olan bir çift pozitif tamsayıdır.

Pozitif bir tamsayı verilir Nve her iki primerin de büyük olduğu en küçük ikiz prim çiftini vermelisiniz N. İlk sayı daha küçük olmalı ve iki primer boşluk veya satırsonu ile ayrılmalıdır. Sondaki ayırıcıya izin verilir.

Girdi => Çıktı örnekleri:

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

Skoru hesaplamak için snippet

( Mutasyona uğramış kaynak kodu sorununu giderme bölümündeki değişiklik .)

Düzenle

Cevapların başlığında biçimi kullanalım

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

Örneğin

Python 2, 60 + 32 = 92

Yanıtlar:


3

Pyth, 18 + 13 = 31

Collatz Dizisi:

QWtQ=Q@,/Q2h*Q3QQ

İkiz Asal:

=Qf!ttP*T+T2hQQ+Q2

Burada deneyin.

FryAmTheEggman sayesinde bazı fikirler.


4

CJam, 24 + 17 = 41 42

Collatz programı :

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

İkiz asal programı :

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

Her ikisi de STDIN'den girdi alır ve alan / satırsonu ayrılmış sayıları STDOUT'a yazdırır

Burada çevrimiçi deneyin


3

CJam, 25 + 16 = 41

Collatz programı:

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

İkiz asal programı:

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

Burada test edin.

Şimdilik ikisini de golf oynadım. Skoru bir şekilde azaltıp azaltamayacağımı göreceğim.


2

Pyth, 20 + 14 = 40 34

Collatz:

QWtQ=Q@,/Q2h*3QQQ

Başbakan Çiftleri:

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

Her ikisi de STDIN'den girdi alan ve yeni satırlardaki sayıları çıkaran programlardır. Şimdilik aynı döngü ilkelini kullanırken her iki cevabı da golf oynadım. Bu muhtemelen biraz daha geliştirilebilir.

Düzenleme: @isaacg'dan çalınan daha iyi durum kontrolü eklendi. Filtre kullanmak, ana çiftler için while döngüsü kullanmaktan hala daha kısa gibi görünüyor.

Burada çevrimiçi deneyin.


Bu 3 5, birincil çiftlerde giriş 3 için çıkış yapar. Çıktı almalıdır 5 7.
isaacg

@isaacg Düzeltildi, maliyeti 3 :(
FryAmTheEggman

2

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

Sadece ASCII sayesinde 4 puan

Collatz dizisi (14 bayt):

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

Çevrimiçi deneyin!

İkiz asal (14 bayt):

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

Çevrimiçi deneyin!


Golf İkiz Asallar (11 byte):

[ÅNDÌp#]DÌ»

Çevrimiçi deneyin!


Collatz bağlantısı yanlış
yalnızca ASCII yalnızca

Teşekkürler, düzeltin!
Wisław

asal , -3 puan. Farklı, daha iyi bir golf (muhtemelen tam olarak ne yapar, btw? neden yapmak zorundayım ,,ve neden sadece Ð,orada çalışıyor gibi) durumunda muhtemelen bir yan not olarak cevapta golf versiyonu tutmaya değer
ASCII-sadece



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

İkiz asal:

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

Java 8'den bahsedin ..
Optimizer

1

Mathematica, 53 + 29 = 82

Collatz Dizisi:

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

İkiz asal programı:

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

1

> <> , 116 + 86 = 202

Collatz programı (46):

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

İkiz asal programı (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

Ahh. Her iki program da aynı ile başlaratoi işlevle başlar, ancak bundan sonra ikiz asal yokuş aşağı gider. Aynı kod parçası, öncelik kontrolü için iki kez tekrarlanır - parçayı bir şekilde yeniden kullanmak biraz daha kısa olabilir, ancak kurulum çok fazla bayt tasarrufu sağlamaz.

İkiz asalların arka yarısını Collatz programının kullanılmayan noktalarına atarak çok daha iyi yapabilirdim, ancak buna izin verilip verilmediğinden emin değilim.


3
"Golf, Golf NAO!" - Noanold Golfzenegger. Bununla birlikte, soru Levenshtein mesafesini azaltmak için çöp eklemenin tabu olduğunu söylemiyor gibi görünüyor, bu yüzden fındıklara gidecektim;)
FryAmTheEggman

0

C ++ Mesafe = 114 Daha uzun uzunluk = 155 Puan = 269

Görev 1

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

Görev 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;}

Görev 2 geliştirildi

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

Bence skoru düşürmeye bile çalışmadın. Örneğin, farklı işlev adlarınız, farklı argüman adlarınız farklı dönüş türleriniz ve mesafenizi ne artırmazsınız.
Doktor

@Optimizer Asalları test etmenin başka bir yolunu bilmiyorum? Diğer dillerde bu yerleşik.
bacchusbeale

1
Algoyu değiştirmekten bile bahsetmiyordum. Örneğin, bu kodun yalnızca 102 mesafesi vardır: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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.