ペアゴルフツインプライムとCollat​​zシーケンス


12

これは、Recover the mutated source code問題に触発された新しい種類の挑戦です。

2つのプログラムまたは関数を両方とも同じ言語で作成する必要があります。最初のタスクはタスク#1を解決し、2番目のタスクはタスク#2を解決する必要があります。

スコアは、長いプログラムと2つのプログラムのソースコード間のレーベンシュタイン距離の合計になります。スコアが低いほど良いので、プログラムの長さを短く保ちながら、2つのソリューションを似たものにするようにしてください。

タスク1

正の整数が与えられ、スペースまたは改行で区切られNCollat​​zシーケンスを出力する必要Nがあります。末尾の区切り文字が許可されます。

Collat​​zシーケンスの最初の要素はNです。残りの要素は、後続のa1基づいて生成されます。

ai={ai12 if ai1 is even3ai1+1 if ai1 奇妙です

シーケンスが到達するとすぐに1、新しい要素は生成されません。

入力=>出力の例:

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

タスク#2

双子の素数のペアは、差が2の正の整数のペアであり、両方とも素数です。

正の整数が与えられ、N両方の素数がより大きな双子素数の最小ペアを出力する必要がありますN。最初の数は小さい方で、2つの素数はスペースまたは改行で区切る必要があります。末尾の区切り文字が許可されます。

入力=>出力の例:

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

スコアを計算するためのスニペット

(「変更されたソースコードの問題を回復する」の修正。)

編集

回答のヘッダーでフォーマットを使用しましょう

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

例えば

Python 2, 60 + 32 = 92

回答:





2

パイス、20 + 14 = 40 34

コラッツ:

QWtQ=Q@,/Q2h*3QQQ

プライムペア:

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

どちらも、STDINから入力を受け取り、改行で数値を出力するプログラムです。今のところ、同じループプリミティブを使用しながら、両方の答えをゴルフで練習しました。これはおそらくかなり改善される可能性があります。

編集:@isaacgから盗まれたより良い条件チェックを追加しました。素数ペアにwhileループを使用するよりも、フィルターを使用する方が短いようです。

こちらからオンラインでお試しください。


これ3 5は素数ペアの入力3に対して出力します。出力されるはず5 7です。
isaacg

@isaacg修正済み、費用は3 :(
FryAmTheEggman

2

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

ASCIIのみのおかげで-4スコア

Collat​​zシーケンス(14バイト):

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

オンラインでお試しください!

ツインプライム(14バイト):

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

オンラインでお試しください!


ゴルフツインプライム(11バイト):

[ÅNDÌp#]DÌ»

オンラインでお試しください!


collat​​zのリンクが正しくありません
ASCIIのみ

ありがとう、修正しました!
ヴィスワフ

素数、-3スコア。ケースのサイドノートとしての答えではおそらく価値が維持golfedバージョンの異なる、より良いゴルフがあります(なぜ私がしなければならないんのようなペアがところで、正確に何をするのでしょうか?,,、と理由だけではないÐ,そこで働く)
ASCIIのみ

-あともう1つ(編集:気にせず、最初の数字は小さくする必要があります。現時点では24点
ASCIIのみ


1

Java 8、118 + 84 = 202

コラッツ:

n->{for(System.out.println(n);n>1;System.out.println(n=n%2<1?n/2:3*n+1));}

ツインプライム:

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に言及..
オプティマイザー

1

Mathematica、53 + 29 = 82

Collat​​zシーケンス:

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

ツインプライムプログラム:

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

1

> <>、116 + 86 = 202

Collat​​zプログラム(46):

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

ツインプライムプログラム(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

痛い。両方のプログラムは同じで始まりますatoi機能でますが、その後、ツインプライムは下り坂になります。同じコードの断片を素数チェックのために2回繰り返します。断片を再利用するために少し短くなるかもしれませんが、そのためのセットアップは多くのバイトを節約しません。

双子の素数の後ろ半分をCollat​​zプログラムの未使用のスポットに投げ込むことで、より良い結果が得られますが、それが許可されているかどうかはわかりません。


3
「ゴルフ、ゴルフ、NAO!」-ノアノールド・ゴルフツェネッガー。それは私がナッツ行くので質問は、レーベンシュタイン距離を減らすためにゴミに追加することはタブーであることを言っていないようだ、と述べた;)
FryAmTheEggman

0

C ++距離= 114より長い長さ= 155スコア= 269

タスク1

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

タスク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;}

タスク2の改善

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

スコアを下げようとしてもいないと思います。たとえば、異なる関数名、異なる引数名、異なる戻り値の型、そして距離を伸ばすものはありません。
オプティマイザー

@Optimizerプライムをテストする別の方法がわかりませんか?他の言語にはこれが組み込まれています
。– bacchusbeale

1
私はアルゴの変更についても話していませんでした。たとえば、このコードの距離は102のみです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;}
オプティマイザー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.