Số nguyên tố chơi gôn đôi và trình tự Collatz


12

Đây là một loại thử thách mới lấy cảm hứng từ Phục hồi mã nguồn bị đột biến vấn đề .

Bạn nên viết hai chương trình hoặc chức năng cả hai trong cùng một ngôn ngữ. Cái thứ nhất sẽ giải quyết Nhiệm vụ # 1 và cái thứ hai sẽ giải quyết Nhiệm vụ # 2.

Điểm của bạn sẽ là tổng của chương trình dài hơn và khoảng cách Levenshtein giữa hai mã nguồn chương trình. Điểm thấp hơn là tốt hơn vì vậy bạn nên cố gắng làm cho hai giải pháp tương tự nhau trong khi giữ cho độ dài của chương trình ngắn.

Nhiệm vụ 1

Bạn đang đưa ra một số nguyên dương Nvà bạn nên đầu ra các chuỗi Collatz của Ntách bằng dấu cách hoặc dòng mới. Dải phân cách được cho phép.

Yếu tố đầu tiên của chuỗi Collatz là N. Phần còn lại của các yếu tố được tạo dựa trên sự kế thừa của chúng ai1 :

ai={ai12 if ai1 is even3ai1+1 if ai1 là số lẻ

Ngay khi chuỗi đạt đến 1không có yếu tố mới được tạo ra.

Đầu vào => Ví dụ đầu ra:

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

Nhiệm vụ 2

Một cặp số nguyên tố sinh đôi là một cặp số nguyên dương có hiệu số là 2 và cả hai đều là số nguyên tố.

Bạn được cấp một số nguyên dương Nvà bạn nên xuất cặp số nguyên tố sinh đôi nhỏ nhất trong đó cả hai số nguyên tố đều lớn hơn NSố đầu tiên phải là số nhỏ hơn và hai số nguyên tố nên được phân tách bằng dấu cách hoặc dòng mới. Dải phân cách được cho phép.

Đầu vào => Ví dụ đầu ra:

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

Đoạn trích để tính điểm

(Sửa đổi một trong Phục hồi vấn đề mã nguồn bị đột biến .)

Biên tập

Trong tiêu đề của câu trả lời, hãy sử dụng định dạng

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

Ví dụ

Python 2, 60 + 32 = 92

Câu trả lời:


3

Bình thường, 18 + 13 = 31

Trình tự Collatz:

QWtQ=Q@,/Q2h*Q3QQ

Số nguyên tố sinh đôi:

=Qf!ttP*T+T2hQQ+Q2

Hãy thử nó ở đây.

Một số ý tưởng nhờ FryAmTheEggman.



3

CJam, 25 + 16 = 41

Chương trình Collatz:

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

Chương trình sinh đôi:

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

Kiểm tra nó ở đây.

Bây giờ tôi chỉ đánh gôn cả hai. Tôi sẽ xem nếu tôi có thể giảm điểm bằng cách nào đó.


2

Bình thường, 20 + 14 = 40 34

Collatz:

QWtQ=Q@,/Q2h*3QQQ

Cặp chính:

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

Cả hai đều là các chương trình lấy đầu vào từ STDIN và xuất các số trên dòng mới. Bây giờ chỉ cần đánh golf cả hai câu trả lời trong khi sử dụng cùng một vòng lặp nguyên thủy. Điều này có lẽ có thể được cải thiện một chút.

Chỉnh sửa: Đã thêm kiểm tra điều kiện tốt hơn bị đánh cắp từ @isaacg. Có vẻ như việc sử dụng bộ lọc vẫn ngắn hơn so với sử dụng vòng lặp while cho các cặp số nguyên tố.

Hãy thử trực tuyến tại đây.


Điều này đầu ra 3 5cho đầu vào 3 trên cặp nguyên tố. Nó sẽ xuất ra 5 7.
isaacg

@isaacg Đã sửa nó, tốn 3 :(
FryAmTheEggman

2

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

-4 điểm chỉ nhờ ASCII

Chuỗi Collatz (14 byte):

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

Hãy thử trực tuyến!

Số nguyên tố sinh đôi (14 byte):

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

Hãy thử trực tuyến!


Số nguyên tố Golfed (11 byte):

[ÅNDÌp#]DÌ»

Hãy thử trực tuyến!


Liên kết Collatz không chính xác
ASCII - chỉ

Cảm ơn, đã sửa nó!
Wisław

Số nguyên tố , -3 điểm. có lẽ đáng để giữ phiên bản chơi golf trong câu trả lời như một lưu ý phụ trong trường hợp có một môn đánh gôn khác, tốt hơn (chính xác thì cặp đôi này làm gì, như tại sao tôi phải làm ,,và tại sao chỉ Ð,hoạt động ở đó)
ASCII - chỉ

-1 nữa (chỉnh sửa: đừng bận tâm, số đầu tiên phải nhỏ hơn. Điểm 24 bây giờ
ASCII-chỉ


1

Java 8, 118 + 84 = 202

Collatz:

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

Số nguyên tố sinh đôi:

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

đề cập đến Java 8 ..
Trình tối ưu hóa

1

Toán học, 53 + 29 = 82

Trình tự Collatz:

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

Chương trình sinh đôi:

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

1

> <> , 116 + 86 = 202

Chương trình Collatz (46):

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

Chương trình số nguyên tố đôi (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

Ôi. Cả hai chương trình bắt đầu với cùng một atoichức năng, nhưng sau đó các số nguyên tố sinh đôi đi xuống dốc. Cùng một đoạn mã được lặp lại hai lần để kiểm tra tính nguyên thủy - có thể ngắn hơn một chút để sử dụng lại đoạn mã, nhưng thiết lập cho nó sẽ không tiết kiệm được nhiều byte.

Có thể làm tốt hơn rất nhiều bằng cách ném một nửa số nguyên tố sinh đôi vào các điểm không sử dụng của chương trình Collatz, nhưng tôi không chắc liệu điều đó có được phép hay không.


3
"Golf nó, Golf nó NAO!" - Golfanegan Noanold. Điều đó nói rằng, câu hỏi dường như không nói rằng việc thêm rác để giảm khoảng cách Levenshtein là điều cấm kỵ, vì vậy tôi sẽ trở nên điên
cuồng

0

Khoảng cách C ++ = 114 Chiều dài dài hơn = 155 Điểm = 269

Nhiệm vụ 1

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

Nhiệm vụ 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;}

Nhiệm vụ 2 được cải thiện

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

Tôi nghĩ bạn thậm chí không cố gắng giảm điểm. Chẳng hạn, bạn có các tên hàm khác nhau, tên đối số khác nhau, kiểu trả về khác nhau và loại không tăng khoảng cách của bạn.
Tối ưu hóa

@Optimizer Tôi không biết cách nào khác để kiểm tra các số nguyên tố? Các ngôn ngữ khác được tích hợp sẵn.
bacchusbeale

1
Tôi thậm chí không nói về việc thay đổi thuật toán. Chẳng hạn, mã này chỉ có 102 khoảng cách: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;}
Trình tối ưu hóa
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.