GolfScript, 59 अक्षर
~:N..*.,2>{:P{(.P\%}do(!},{{N-.*}$0=}:C~[1.{.@+.N<}do]C+++4/
यह स्क्रिप्ट कुछ आवश्यकताओं को पूरा नहीं करती है:
- यह केवल इनपुट के लिए सही तरीके से काम करता है
n >= 2
, अन्यथा यह क्रैश हो जाता है।
- आउटपुट को पूर्णांक में काट दिया जाता है।
- किसी भी बड़े के लिए भयानक प्रदर्शन
n
कोड का एक संक्षिप्त पूर्वाभ्यास:
~:N..*
इनपुट एन में संग्रहित है, और हम दोनों n
और वर्ग को n*n
तुरंत धक्का देते हैं ।
.,2>
हम एरे को फ़िल्टर करके प्रिम्स की एक सूची तैयार करेंगे [2..n*n]
। हम अपनी पिछली गणना का उपयोग n*n
एक (बहुत खराब!) के रूप में करते हैं, जो कि n की तुलना में बड़ा होता है।
{:P{(.P\%}do(!},
हमारा पिछला सरणी परीक्षण प्रभाग द्वारा फ़िल्टर किया गया है। प्रत्येक पूर्णांक P को प्रत्येक पूर्णांक [P-1..1] के विरुद्ध जांचा जाता है।
{{N-.*}$0=}:C~
दूरी के आधार पर पिछले सरणी को सॉर्ट करता है n
, और पहले तत्व को पकड़ता है। अब हमारे पास निकटतम प्रधान है।
[1.{.@+.N<}do]C
हम Fibonnacis उत्पन्न करते हैं जब तक हम एक से अधिक नहीं हो जाते n
। सौभाग्य से, यह एल्गोरिथ्म स्वाभाविक रूप से पिछली फिबोनेसी का ट्रैक रखता है, इसलिए हम उन दोनों को एक सरणी में फेंक देते हैं और हमारे पहले की दूरी की तरह का उपयोग करते हैं। अब हमारे पास निकटतम Fibonnaci है।
+++4/
औसत। ध्यान दें कि GolfScript के पास फ़्लोट्स के लिए समर्थन नहीं है, इसलिए परिणाम छोटा है।
गोल्फक्राफ्ट, 81 अक्षर
यहां एक ऐसा संस्करण है जो सभी आवश्यकताओं को पूरा करता है।
~:N..*2N*,3,|2,^{:P{(.P\%}do(!},{{N-.*}$0=}:C~[0.1{.@+.N<}do]C+++100:E*4/.E/'.'@E%
के लिए उचित व्यवहार सुनिश्चित करने के लिए n<2
, मैं 2<
(क्रैश जब सरणी छोटा है) से बचें , और इसके बजाय उपयोग करें 3,|2,^
। यह सुनिश्चित करता है कि अभ्यर्थी का अभिप्राय [2]
तब है जब n < 2
। मैंने अगले प्राइम के लिए ऊपरी सीमा n*n
को 2*n
( बर्ट्रेंड के डाक्यूमेंट ) में बदल दिया। इसके अलावा, 0 को एक फिबोनासी संख्या माना जाता है। परिणाम की गणना अंत में निश्चित बिंदु गणित में की जाती है। दिलचस्प है, ऐसा लगता है कि परिणाम हमेशा चौथे (0, .25, .5, .75) में होता है, इसलिए मुझे उम्मीद है कि परिशुद्धता के 2 दशमलव स्थान पर्याप्त हैं।
GolfScript का उपयोग करने पर मेरी पहली दरार, मुझे यकीन है कि सुधार के लिए जगह है!