这是受到恢复变异的源代码问题启发的一种新挑战。
您应该用相同的语言编写两个程序或函数。第一个应解决任务1,第二个应解决任务2。
您的分数将是较长程序与两个程序源代码之间的Levenshtein距离的总和。分数越低越好,因此您应尝试使两个解决方案相似,同时保持程序长度短。
任务1
您将得到一个正整数N
,你应该输出在Collatz序列的N
用空格或换行分隔。允许使用尾随分隔符。
Collatz序列的第一个元素是N
。其余元素基于其后继:一个i − 1
一个一世= { 一i − 123 个i − 1+ 1 如果 一个i − 1 甚至 如果 一个i − 1 很奇怪
一旦序列到达,就1
不会生成新元素。
输入=>输出示例:
6 => 6 3 10 5 16 8 4 2 1
8 => 8 4 2 1
1 => 1
任务2
一对双素数是一对正整数,它们的差为2,它们都是素数。
您将得到一个正整数,N
并且应该输出最小的一对双素数,其中两个素数均大于N
。第一个数字应为较小的一个,并且两个素数应以空格或换行符分隔。允许使用尾随分隔符。
输入=>输出示例:
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
。