페어 골프 트윈 프라임과 Collatz 시퀀스


12

이것은 변형 된 소스 코드 복구 문제에서 영감을 얻은 새로운 종류의 도전 입니다.

동일한 언어로 두 개의 프로그램 또는 기능을 작성해야합니다. 첫 번째 작업은 작업 # 1을 해결하고 두 번째 작업은 작업 # 2를 해결해야합니다.

당신의 점수는 더 긴 프로그램과 두 프로그램 소스 코드 사이의 Levenshtein 거리 의 합입니다 . 점수가 낮을수록 프로그램 길이를 짧게 유지하면서 두 솔루션을 비슷하게 만들어야합니다.

작업 # 1

양의 정수가 주어지며 Collatz 시퀀스 를 공백 또는 줄 바꿈 으로 구분하여 N출력해야합니다 . 후행 분리기가 허용됩니다.N

Collatz 시퀀스의 첫 번째 요소는 N입니다. 요소의 나머지는 자신의 후계자 기반으로 생성되는 전을 - 1 :ai1

ai={ai12 if ai1 is even3ai1+1 if ai1 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

점수를 계산하기위한 스 니펫

( 돌연변이 된 소스 코드 복구 문제 에서 하나의 수정 .)

편집하다

답변 헤더에 형식을 사용합시다

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

예 :

Python 2, 60 + 32 = 92

답변:




3

CJam, 25 + 16 = 41

Collatz 프로그램 :

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

트윈 프라임 프로그램 :

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

여기에서 테스트하십시오.

나는 방금 두 골프를 쳤다. 어떻게 든 점수를 줄일 수 있는지 살펴 보겠습니다.


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 점

Collatz 시퀀스 (14 바이트) :

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

온라인으로 사용해보십시오!

트윈 프라임 (14 바이트) :

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

온라인으로 사용해보십시오!


골프 트윈 프라임 (11 바이트) :

[ÅNDÌp#]DÌ»

온라인으로 사용해보십시오!


Collatz 링크가 잘못되었습니다
ASCII 전용

고마워요!
Wisław

소수 , -3 점. 아마 가치를 유지하는 경우에 보조 노트와 같은 질문에 대해 답 버전을 golfed 다른, 더 나은 골프가있다 (정확히 쌍에게 무엇을 할 BTW, 내가해야 할 왜 좋아? ,,, 왜에만 않는 Ð,이 작동)
ASCII 전용

-1 more (편집 : 상관 없음, 첫 번째 숫자는 작아야합니다. 현재 24 점
ASCII 전용


1

자바 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 ..
Optimizer를

1

수학, 53 + 29 = 82

콜라 츠 시퀀스 :

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

트윈 프라임 프로그램 :

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

1

> <> , 116 + 86 = 202

콜 랏츠 프로그램 (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기능으로 시작 하지만 그 이후에 트윈 프라임은 내리막 길이됩니다. 우선 순위 검사를 위해 동일한 코드 조각이 두 번 반복됩니다. 조각을 재사용하는 데 약간 짧을 수 있지만 설정에 따라 많은 바이트가 절약되지는 않습니다.

트윈 프라임의 뒤쪽 절반을 Collatz 프로그램의 사용되지 않는 부분에 던져서 훨씬 더 잘 할 수는 있지만 그것이 허용되는지 확실하지 않습니다.


3
"골프 잇, 골프 잇 NAO!" -Noanold Golfzenegger. 즉,
레 벤슈 테인

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

@Optimizer 나는 소수를 테스트하는 다른 방법을 모른다? 다른 언어들도 내장되어 있습니다.
bacchusbeale

1
나는 알고를 바꾸는 것에 대해 이야기조차하지 않았다. 예 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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.