पेयर-गोल्फिंग ट्विन प्राइम्स और कोलज़ेट अनुक्रम


12

यह एक नई तरह की चुनौती है जो उत्परिवर्तित स्रोत कोड समस्या को पुनर्प्राप्त करने से प्रेरित है ।

आपको एक ही भाषा में दो कार्यक्रम या कार्य लिखने चाहिए। पहले वाले को टास्क # 1 को हल करना चाहिए और दूसरे को टास्क # 2 को हल करना चाहिए।

आपका स्कोर दो कार्यक्रमों के स्रोत कोड के बीच लंबे कार्यक्रम और लेवेंसहाइट दूरी का योग होगा । लोअर स्कोर बेहतर है इसलिए आपको कार्यक्रमों की लंबाई कम रखते हुए दो समाधान समान बनाने की कोशिश करनी चाहिए।

कार्य 1

आपको एक सकारात्मक पूर्णांक दिया जाता है Nऔर आपको रिक्त स्थान या न्यूलाइन द्वारा अलग किए गए Collatz अनुक्रम का उत्पादन करना चाहिए N। अनुगामी विभाजक की अनुमति है।

Collatz अनुक्रम का पहला तत्व है N। तत्वों के बाकी उनके उत्तराधिकारी के आधार पर जेनरेट किए जाते हैं 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

जुड़वां primes की एक जोड़ी सकारात्मक पूर्णांक की एक जोड़ी है जिसका अंतर 2 है और वे दोनों primes हैं।

आपको एक धनात्मक पूर्णांक दिया जाता है Nऔर आपको दो छोटे युग्मों का उत्पादन करना चाहिए जहाँ दोनों प्राइम्स बड़े होते हैं N। पहली संख्या छोटी होनी चाहिए और दो प्राइसेस को रिक्त स्थान या न्यूलाइन द्वारा अलग किया जाना चाहिए। अनुगामी विभाजक की अनुमति है।

इनपुट => आउटपुट उदाहरण:

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

स्कोर की गणना के लिए स्निपेट

(संशोधित स्रोत कोड समस्या पुनर्प्राप्त में से एक का संशोधन ।)

संपादित करें

उत्तरों के शीर्षलेख में प्रारूप का उपयोग करते हैं

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

उदाहरण के लिए

Python 2, 60 + 32 = 92

जवाबों:



4

सीजाम, 24 + 17 = 41 42

Collatz कार्यक्रम :

ri2*{:N2%N3*)N2/?__p(}g;

ट्विन प्राइम्स प्रोग्राम :

ri_2+]{:)_{mp}/&_+((}gS*

दोनों STDIN से इनपुट लेते हैं और स्पेस / न्यूलाइन से अलग किए गए नंबर को STDOUT में प्रिंट करते हैं

उन्हें यहाँ ऑनलाइन प्रयास करें


3

सीजाम, 25 + 16 = 41

Collatz कार्यक्रम:

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

ट्विन प्राइम्स प्रोग्राम:

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

इसका परीक्षण यहां करें।

मैंने अभी के लिए उन दोनों को गोल्फ दिया। मैं देखूंगा कि क्या मैं किसी तरह स्कोर कम कर सकता हूं।


2

पायथ, 20 + 14 = 40 34

Collatz:

QWtQ=Q@,/Q2h*3QQQ

मुख्य जोड़े:

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

दोनों ऐसे प्रोग्राम हैं जो एसटीडीआईएन से इनपुट लेते हैं और नईलाइनों पर संख्याओं को आउटपुट करते हैं। अभी के लिए एक ही लूपिंग प्राइमेटिव का उपयोग करते हुए दोनों जवाबों को गढ़ा। यह शायद काफी सुधार किया जा सकता है।

संपादित करें: @isaacg से चुराई गई बेहतर स्थिति जाँच जोड़ी गई। लगता है कि फिल्टर का उपयोग करना अभी भी प्राइम जोड़े के लिए थोड़ी देर के लूप का उपयोग करने से कम है।

इसे यहाँ ऑनलाइन आज़माएँ।


यह 3 5प्राइम जोड़े पर इनपुट 3 के लिए आउटपुट देता है। इसका उत्पादन होना चाहिए 5 7
isaacg

@isaacg ने इसे ठीक किया, 3 :(
FryAmTheEggman

2

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

-4 स्कोर केवल ASCII के लिए

Collatz अनुक्रम (14 बाइट्स):

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

इसे ऑनलाइन आज़माएं!

ट्विन प्राइम्स (14 बाइट्स):

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

इसे ऑनलाइन आज़माएं!


गोल्फ ट्विन प्राइम्स (11 बाइट्स):

[ÅNDÌp#]DÌ»

इसे ऑनलाइन आज़माएं!


Collatz लिंक गलत है
ASCII-only

धन्यवाद, इसे ठीक किया!
विस्लोव

primes , -3 स्कोर। संभवतया एक साइड नोट के रूप में जवाब में गोल्फ संस्करण को रखने के लायक है, एक अलग, बेहतर गोल्फ है (वास्तव में जोड़ी क्या करती है, बीटीडब्ल्यू? जैसे मुझे क्या करना है ,,, और केवल Ð,वहां क्यों काम करता है )
एएससीआईआई-ओनली

-1 और (संपादित करें: कोई बात नहीं, पहला नंबर छोटा होना चाहिए। स्कोर 24 के लिए अब
केवल


1

जावा 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));}

ट्विन प्राइम्स:

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

उल्लेख जावा 8 ..
अनुकूलक

1

गणितज्ञ, ५३ + २ ९ = 53२

Collatz अनुक्रम:

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

ट्विन प्राइम्स प्रोग्राम:

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

1

> <> , 116 + 86 = 202

Collatz कार्यक्रम (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
"गोल्फ इट, गोल्फ इट नाओ!" - नोनोल्ड गोल्फज़नेगर। उस ने कहा, सवाल यह नहीं लगता है कि लेवेंसहाइट दूरी को कम करने के लिए कचरे में जोड़ना वर्जित है, इसलिए पागल हो जाएगा;)
FryAmTheEggman

0

सी ++ दूरी = 114 लंबी लंबाई = 155 स्कोर = 269

कार्य 1

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

टास्क २

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 मुझे primes के लिए परीक्षण करने का एक और तरीका नहीं पता है? अन्य भाषाओं में इसका निर्माण किया गया है।
bacchusbeale

1
मैं भी अलगो को बदलने की बात नहीं कर रहा था। उदाहरण के लिए, इस कोड में केवल 102 दूरी है: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;}
अनुकूलक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.