이것은 변형 된 소스 코드 복구 문제에서 영감을 얻은 새로운 종류의 도전 입니다.
동일한 언어로 두 개의 프로그램 또는 기능을 작성해야합니다. 첫 번째 작업은 작업 # 1을 해결하고 두 번째 작업은 작업 # 2를 해결해야합니다.
당신의 점수는 더 긴 프로그램과 두 프로그램 소스 코드 사이의 Levenshtein 거리 의 합입니다 . 점수가 낮을수록 프로그램 길이를 짧게 유지하면서 두 솔루션을 비슷하게 만들어야합니다.
작업 # 1
양의 정수가 주어지며 Collatz 시퀀스 를 공백 또는 줄 바꿈 으로 구분하여 N
출력해야합니다 . 후행 분리기가 허용됩니다.N
Collatz 시퀀스의 첫 번째 요소는 N
입니다. 요소의 나머지는 자신의 후계자 기반으로 생성되는 전을 - 1 :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
해야합니다. 첫 번째 숫자는 작은 숫자이어야하고 두 소수는 공백 또는 개행 문자로 구분해야합니다. 후행 분리기가 허용됩니다.
입력 => 출력 예 :
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
.