これは、Recover the mutated source code問題に触発された新しい種類の挑戦です。
2つのプログラムまたは関数を両方とも同じ言語で作成する必要があります。最初のタスクはタスク#1を解決し、2番目のタスクはタスク#2を解決する必要があります。
スコアは、長いプログラムと2つのプログラムのソースコード間のレーベンシュタイン距離の合計になります。スコアが低いほど良いので、プログラムの長さを短く保ちながら、2つのソリューションを似たものにするようにしてください。
タスク1
正の整数が与えられ、スペースまたは改行で区切られN
たCollatzシーケンスを出力する必要N
があります。末尾の区切り文字が許可されます。
Collatzシーケンスの最初の要素はN
です。残りの要素は、後続のai − 1基づいて生成されます。
ai={ai−123ai−1+1 if ai−1 is even if ai−1 is odd
シーケンスが到達するとすぐに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
スコアを計算するためのスニペット
(「変更されたソースコードの問題を回復する」の修正。)
var f=document.getElementById("f"),g=document.getElementById("s");function h(){var a=f.value,e=g.value,m=Math.max(a.length,e.length);if(10000<a.length)a="<span style='color:red'>First program is too long!</span>";else if(10000<e.length)a="<span style='color:red'>Second program is too long!</span>";else{if(0===a.length)a=e.length;else if(0===e.length)a=a.length;else{var d=[],b;for(b=0;b<=e.length;b++)d[b]=[b];var c;for(c=0;c<=a.length;c++)d[0][c]=c;for(b=1;b<=e.length;b++)for(c=1;c<=a.length;c++)d[b][c]=e.charAt(b-1)===a.charAt(c-1)?d[b-1][c-1]:Math.min(d[b-1][c-1]+1,Math.min(d[b][c-1]+1,d[b-1][c]+ 1));a=d[e.length][a.length]}a="Distance = "+a+" Longer length = "+m+" Score = <strong>"+(a+m)+"</strong>"}document.getElementById("d").innerHTML=a}f.onkeyup=h;g.onkeyup=h;
First program<textarea id=f rows=2 cols=80 style="width:100%"></textarea>Second program<textarea id=s rows=2 cols=80 style="width:100%"></textarea><p id=d></p>
編集
回答のヘッダーでフォーマットを使用しましょう
[Language], [longer length] + [distance] = [final score]
。
例えば
Python 2, 60 + 32 = 92
3 5
は素数ペアの入力3に対して出力します。出力されるはず5 7
です。