एक निश्चित बिंदु खोजें


24

पूर्णांक और कुछ ब्लैक बॉक्स फ़ंक्शन को देखते हुए परिभाषित अनुक्रम में एक निश्चित बिंदु मिलता है ।x1 f: ℤ → ℤfxk+1 := f(xk)

विवरण

  • मान xको निश्चित बिंदु कहा जाता है fयदि x = f(x)

    उदाहरण के लिए, यदि f(x) := round(x/pi)और हमारे पास एक प्रारंभिक बिंदु है तो हम तब , फिर , और अंत में जिसका अर्थ है कि सबमिशन वापस आ जाना चाहिए ।x1 = 10x2 = f(x1) = f(10) = 3x3 = f(x2) = f(3) = 1x4 = f(x3) = f(1) = 0x5 = f(x4) = f(0) = 00

  • आप मान सकते हैं कि उत्पन्न अनुक्रम में वास्तव में एक निश्चित बिंदु शामिल है।
  • आप के स्थान पर पूर्णांक के लिए मूल प्रकार का उपयोग कर सकते हैं
  • आप किसी भी भाषा का उपयोग कर सकते हैं जिसके लिए मानक IO मेटा पोस्ट में ब्लैक बॉक्स फ़ंक्शंस इनपुट के लिए डिफॉल्ट हैं । यदि आपकी भाषा के लिए ऐसा कोई डिफ़ॉल्ट नहीं है, तो ब्लैक बॉक्स फ़ंक्शंस की परिभाषा में एक जोड़ने के लिए स्वतंत्र महसूस करें , और उस परिभाषा में अपने प्रस्तावों को लिंक करना सुनिश्चित करें। इसके अलावा उन पर वोट करने के लिए मत भूलना।

उदाहरण

f(x) = floor(sqrt(abs(x)))
0 -> 0,  all other numbers -> 1

f(x) = c(c(c(x))) where c(x) = x/2 if x is even; 3*x+1 otherwise
all positive numbers should result in 1,2 or 4 (Collatz conjecture)

f(x) = -42
all numbers -> -42

f(x) = 2 - x
1 -> 1

ध्यान दें कि जब यह विवरणों में निहित है कि ब्लैक बॉक्स फ़ंक्शन निश्चित बिंदु पर अभिसरण करेगा, तो अंतिम उदाहरण अन्यथा कहता है
phflack

1
@phflack ब्लैकबॉक्स में केवल दिए गए इनपुट के लिए अभिसरण करना है।
दोष

ओह, मूल रूप से मैंने सोचा था कि सबमिशन x_0 नहीं दिया गया है, जिससे मुझे कुछ भ्रम हुआ। मैंने सोचा कि एक समाधान होना चाहिए (जेली) ~Nƭ⁻Ç$¿, जो कुछ इस तरह है, (छद्म कोड) for x in [0, -1, 1, -2, 2, -3, 3, -4, 4, ...]: if (x == f(x)): break; print(x); । यह एक और चुनौती के लायक हो सकता है।
user202729

1
भविष्य के आगंतुकों के लिए ध्यान दें: कोई भी निश्चित बिंदु खोजने से काम नहीं चलता, आपको x_0 से एक निश्चित बिंदु खोजना चाहिए । यह गारंटी है कि एक मौजूद है।
user202729

और यदि कोई निश्चित बिंदु मौजूद नहीं है, तो एक फ़ंक्शन f, और एक प्रारंभिक मान x0 के लिए ... क्या मान होना चाहिए जो उसे वापस करना है? और अगर x0 = x0 + 1 f (X1) = f (1) के लिए x0 = 0 और f = int (9 / (x-1)) पहले से ही एक त्रुटि है ... तो उस f के लिए ऑपरेटर को क्या लौटना चाहिए x0?
रोजलूपी

जवाबों:


16

दरअसल , 1 बाइट

Y

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

Yवास्तव में फिक्स्ड प्वाइंट फंक्शन है। TIO उदाहरण में, फ़ंक्शन को स्ट्रिंग के रूप में लिया जा रहा है, और £इसे स्टैक पर फ़ंक्शन में बदलने के लिए उपयोग किया जाता है। यह भी संभव है कि फ़ंक्शन को स्टैक की तरह धकेलने के लिए । वास्तव में फ़ंक्शन इनपुट प्राप्त करने के लिए ये केवल दो तरीके हैं।


7
आप बस जानते हैं कि किसी दिन यह चुनौती पोस्ट की जाने वाली थी, क्या आपने नहीं? : P
को आउटगॉल्फ को एरिक करें

2
@EriktheOutgolfer मैंने वास्तव में Yकई चुनौतियों के लिए उपयोग किया है । मैं जाहिरा तौर पर बेहद संजीदा हूँ : P
Mego

11

एपीएल (डायलॉग) , 2 बाइट्स

⍣=

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

NB: मैं O←⍣=इनपुट खंड में एक बग के कारण परिभाषित करता हूं कि व्युत्पन्न मोनैडिक ऑपरेटरों को उस तरीके से परिभाषित नहीं किया जा सकता है जिस तरह से TIO चीजों को परिभाषित करना पसंद करता है।

एक ऑपरेटर है जिसका उपयोग किया जा सकता है (function⍣condition) ⍵

यह लागू होता है function, f, के लिए जब तक (f ⍵) condition ⍵रिटर्न सच।

⍣=एक व्युत्पन्न राक्षसी ऑपरेटर है जो fअपने बाएं तर्क के रूप में एक राक्षसी कार्य करता है, और इसे अपने सही तर्क पर लागू करता है , जब तक किf ⍵ = ⍵


शायद ध्यान दें कि ⍣=एक व्युत्पन्न मोनैडिक ऑपरेटर है जो एक कार्य को बाएं ऑपरेंड के रूप में लेता है और दिए गए प्रारंभिक मूल्य पर फिक्स बिंदु पाता है। मैं के लिए एक अलग पत्र का प्रयोग करेंगे ⍣=की तुलना fके रूप में यह एक है perator, नहीं एक गर्मजोशी।
आदम डे

हाँ। मैं। यह भ्रामक है कि आप fअपने विवरण में "इनपुट" फ़ंक्शन कहते हैं , लेकिन फिर TIO पर, fआपका समाधान ऑपरेटर है। आप O←⍣=इसे गिनती करने के लिए कोड फ़ील्ड में भी स्थानांतरित कर सकते हैं और यह इंगित करने के लिए कि वास्तविक समाधान है, और यह कि बाकी (इनपुट) बस इसका परीक्षण कर रहा है।
आदम डे

मेरे लिए एक बग की तरह लग रहा है। मैं कल संबंधित सहयोगी से बात करूंगा।
आदम डे

@ अपडेट किया गया। मुझे बताएं कि क्या बग ठीक हो जाता है
H.PWiz


9

MATLAB , 41 बाइट्स

function x=g(f,x);while f(x)-x;x=f(x);end

यह सुंदरता भी है जिसे फ़ंक्शन फ़ाइलों की आवश्यकता नहीं है। दुर्भाग्य से यह थोड़ा लंबा है:

i=@(p,c)c{2-p}();g=@(g,f,x)i(f(x)==x,{@()x,@()g(g,f,f(x))});q=@(f,x)g(g,f,x)

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


7
यह जवाब एक उदाहरण के रूप में था और किसी को भी जवाब देने से नहीं रोकता है।
दोष डिसाइड

बेशक, अगर आपने इस ऑक्टेव को बुलाया, तो आप दो ;एस हटा सकते हैं । इसे ऑनलाइन आज़माएं!
सांचेस

और अपने अनाम फ़ंक्शन में, आप 50 बाइट्स के लिए @()पहले हटा सकते हैं x। कुडोस भी जिस तरह से आप अपने सहायक समारोह ( g(g)अंत के साथ) को लपेटते हैं , मैं केवल 51 बाइट्स करने में कामयाब रहा @(g,x)(f=@(r,z){@()r(r,m),z}{(m=g(z)==z)+1}())(f,x)। मैं सोच रहा था कि दोनों दृष्टिकोणों का कोई संयोजन अभी भी कम है।
सांचेस

6

मानक एमएल (एमएलटन) , 30 बाइट्स

fun& $g=if$ =g$then$else&(g$)g

इसे ऑनलाइन आज़माएं! के रूप में उपयोग करें & n blackbox

ब्लैक बॉक्स फ़ंक्शन को निम्नानुसार परिभाषित किया गया है:

fun blackbox1 x = floor(Math.sqrt(Real.fromInt(abs x)))

fun blackbox2 x = c(c(c(x))) 
and c x = if x mod 2 = 0 then x div 2 else 3*x+1

fun blackbox3 _ = ~42

fun blackbox4 x = 2-x

Ungolfed संस्करण:

fun fixpoint n g = if n = g n then n else fixpoint (g n) g

1
जंगल में एसएमएल देखने के लिए अच्छा है! हम इसे हमारे विश्वविद्यालय में हमारे कार्यात्मक प्रोग्रामिंग वर्ग के लिए उपयोग करते हैं।
vijrox

6

आर , 36 35 बाइट्स

एक बाइट नीचे गोल्फिंग के लिए JayCe को धन्यवाद

function(f,x){while(x-(x=f(x)))0;x}

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

उदाहरण कार्यों को सत्यापित करें!

त्रुटिपूर्ण समाधान का बंदरगाह


इसके लायक क्या है ... function(f,x){while(x-(x=f(x)))0;x}एक बाइट बचाता है।
JayCe

ओह, 0अच्छा है। बहुत धन्यवाद!
ग्यूसेप


4

पायथन 2 , 39 37 33 बाइट्स

-2 बाइट्स के लिए @ Mr.Xcoder को धन्यवाद

s=lambda k:s(f(k))if k-f(k)else k

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

ब्लैक-बॉक्स फ़ंक्शन को f नाम दिया गया है


क्या फ़ंक्शन को पैरामीटर के रूप में पारित करने की आवश्यकता नहीं है? मुझे नहीं लगता कि पूर्व-परिभाषित चर एक स्वीकृत इनपुट विधि है।
mbomb007

मुझे यकीन नहीं है कि आपको फ़ंक्शन मानने की अनुमति है f, क्या ऐसा नहीं है कि इनपुट का एक रूप चर में है? (संपादित करें: निंजा को mbomb द्वारा)
22:17


4

जावास्क्रिप्ट (Node.js) , 25 22 21 बाइट्स

धन्यवाद हरमन लॉएन्स्टीन ने मुझे इस सहमति
को दिखाने के लिए -1 बाइट के लिए @ l4m2 धन्यवाद दिया

नामित किए जाने वाले ब्लैक-बॉक्स फ़ंक्शन को मानता है f

g=k=>f(k)-k?g(f(k)):k

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



f (k) -k की जगह
l4m2

4

जेली , 3 बाइट्स

vÐL

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

जेली लिंक ( 2_उदाहरण के लिए) का प्रतिनिधित्व करने वाले स्ट्रिंग के रूप में बाएं तर्क को ले जाता है , और सही तर्क को पूर्णांक के रूप में

यह काम किस प्रकार करता है

 ÐL - While the output is unique...
v   -   Evaluate the function with the argument given

4

ब्रेन-आलोचना , 24 बाइट्स

(()){{}(({})<>[({})])}{}

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

(ब्लैक बॉक्स फ़ंक्शन के लिए x -> 2-x नीचे दिए गए उदाहरण में के लिए)

प्रदान किया गया ब्लैक बॉक्स फ़ंक्शन एक प्रोग्राम होना चाहिए, जो xस्टैक, पॉप xऔर पुश के शीर्ष पर दिया गया हैf(x) - दूसरे शब्द में, यह fस्टैक के शीर्ष पर मूल्य पर फ़ंक्शन का मूल्यांकन करना चाहिए ।

समतुल्य मिनी-फ्लैक 26 बाइट्स (2 बाइट्स बचाने के लिए गेहूं जादूगर के लिए धन्यवाद):

(()){{}(({})( )[{}({})])}{}
             ^ put the function f here

(टिप्पणियों और स्थानों की गिनती नहीं)

फ़ंक्शन ( इनपुट के अंदर <>) और इनपुट से एक नंबर लें । (ध्यान दें कि ब्रेन-फ्लैक एक गूढ़ भाषा है और इनपुट के रूप में कार्यात्मक तर्क नहीं ले सकता है)x0


उदाहरण ब्लैकबॉक्स फ़ंक्शन:

x -> 2-x: इसे ऑनलाइन आज़माएं!


स्पष्टीकरण:


(()){{}(({})<f>[({})])}{}   Main program.
                            Implicit input from stdin to stack.
(  )                        Push
 ()                         literal number 1.
                            Now the content of the stack: [1, x0]
    {                 }     While stack top ≠ 0:
                            current stack content: [something ≠ 0, x]
     {}                       Pop stack top (something). stack = [x]
       (             )        Push
        ({})                    Stack top = x. Current stack = [x]
             f                  Evaluate f. Current stack = [f(x)]
            < >                   (suppress the value of f(x), avoid adding it)
               [    ]           plus the negative of
                ({})            the top of the stack ( = -f(x) )
                              In conclusion, this change (x) on the stack to
                              (f(x)), and then push (x + -f(x))
                            If it's 0, break loop, else continue.
                       {}   Pop the redundant 0 on the top.
                            Implicit output stack value to stdout.


3

स्विफ्ट , 47 42 बाइट्स

func h(_ n:Int){f(n)==n ?print(n):h(f(n))}

Naive approach, मानता है कि ब्लैक बॉक्स फ़ंक्शन का नाम है f


मुझे आपके दूसरे प्रयास के बारे में संदेह है, क्योंकि यह एक जटिल क्लोजर है और इसका प्रकार अस्पष्ट है जब तक आप इसे स्पष्ट रूप से नहीं डालते {...}as(<parameter types>)-><return type>। यदि आप इसका रिटर्न प्रकार निर्दिष्ट नहीं करते हैं, तो यह बिल्ड-टाइम त्रुटियों को फेंक देगा इसलिए मुझे नहीं लगता कि यह अब तक मान्य है (ध्यान दें कि कलाकारों को बाइट की गिनती में शामिल किया जाना चाहिए)। आपका पहला सबमिशन ठीक है, हालाँकि।
श्री एक्सकोडर

2

सी (जीसीसी) , 40 बाइट्स

f(n,b)int(*b)(_);{n=n^b(n)?f(b(n),b):n;}

इसे ऑनलाइन आज़माएं!ध्यान दें कि झंडे आवश्यक नहीं हैं, वे ऊपर परिभाषित किए गए फ़िक्सपॉइंट फ़ंक्शन के परीक्षण में सहायता करने के लिए हैं।

यह एक फ़ंक्शन है जो एक इंट nऔर एक फ़ंक्शन पॉइंटर लेता है b : int → int। इस तथ्य का दुरुपयोग करते हुए कि पहले चर तर्क में लिखना eaxरजिस्टर को सेट करता है , जो लौटने के बराबर है । अन्यथा, यह बहुत मानक है जहां तक ​​सी गोल्फ जाता है। n^b(n)की असमानता nऔर ब्लैक बॉक्स के लिए जाँच की जाती है n। जब असमान होता है, तो यह फिक्सपॉइंट फ़ंक्शन को कॉल करता हैf पुन: आवेदन के साथ पुनरावृत्ति के रूप पुन: और तर्क के रूप में ब्लैक बॉक्स। अन्यथा, यह फ़िक्स पॉइंट लौटाता है।

This प्रशस्ति पत्र की जरूरत है, मुझे याद है कि यह कहीं पढ़ने के लिए याद है और Google को मेरे संदेह की पुष्टि होती है

यह K & R- स्टाइल टाइपिंग के साथ इनपुट घोषित करता है:

f(n, b)
int(*b)(_);
{
    n=n^b(n)?f(b(n),b):n;
}

ऊपर की दूसरी पंक्ति पर आर्कन बिट bएक फ़ंक्शन पॉइंटर होने की घोषणा करता है जो पूर्णांक पैरामीटर लेता है - डिफ़ॉल्ट प्रकार को _पूर्णांक माना जाता है। इसी तरह, nएक पूर्णांक fमाना जाता है , और एक पूर्णांक वापस करने के लिए माना जाता है। अंतर्निहित टाइपिंग के लिए हुर्रे?


2

साफ , 46 बाइट्स

import StdEnv
p x=hd[n\\n<-iterate f x|f n==n]

मान लेता है कि फ़ंक्शन को परिभाषित किया गया है f :: !Int -> Int

यह f f f ... xउन तत्वों के लिए फ़िल्टर किए गए अनुप्रयोगों की अनंत सूची का प्रमुख लेता है जहांf el == el

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

यदि आप TIO में फ़ंक्शन बदलना चाहते हैं, तो क्लीन का लैम्ब्डा सिंटैक्स है:

\argument = expression

(वास्तव में यह कहीं अधिक जटिल है, लेकिन शुक्र है कि हमें केवल एकात्मक कार्यों की आवश्यकता है)


2

एपीएल (डायलॉग यूनिकोड) , 14 बाइट्स

{⍵=⍺⍺⍵:⍵⋄∇⍺⍺⍵}

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

हेडर पर फ़ंक्शन के बराबर है f(x) = floor(sqrt(abs(x)))

धन्यवाद @ @ यह बताने के लिए कि मूल उत्तर PPCG सर्वसम्मति के अनुसार मान्य नहीं था।

यह काम किस प्रकार करता है:

{⍵=⍺⍺⍵:⍵⋄∇⍺⍺⍵}  Main 'function' (this is actually an operator)
      :          if
 ⍵=⍺⍺⍵           the right argument (⍵) = the left function (⍺⍺, which is f) of 
                return 
                else
         ∇⍺⍺⍵    return this function (∇) with argument f(⍵)

{{= F⍵: ⍵⋄∇ (f⍵)} अपने नाम से अलग अनाम फ़ंक्शन के लिए ठीक होगा (n)
RosLuP

2
यह मान लिया fजाता है कि यह गर्वित है, जो मुझे लगता है कि PPCG सर्वसम्मति से निषिद्ध है। {⍵=⍺⍺⍵:⍵⋄∇⍺⍺⍵}एक मान्य ऑपरेटर समाधान होगा।
आदम डे

1

ऑक्टेव , 37 बाइट्स

function x=g(f,x);while x-(x=f(x))end

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

ऑक्टेव में इनलाइन असाइनमेंट है, लेकिन MATLAB नहीं है, इसलिए यह त्रुटिपूर्ण समाधान का एक गोल्फ ऑक्टेव पोर्ट है ।

यह आर को अच्छी तरह से पोर्ट करता है



1

आगे (gforth), 36 बाइट्स

यह संस्करण सिर्फ मानता fहै पूर्वनिर्धारित है। यह नीचे दिए गए घोल जितना ठंडा नहीं है। दोनों प्रोग्राम स्टैक ओवरफ्लो के साथ बाहर निकलते हैं यदि नहीं मिला है, या एक स्टैक अंडरफ्लो अगर मिला (परिणाम को प्रिंट करने के बाद)।

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

: g dup f over = IF . THEN recurse ;

फोर्थ (gforth), 52 बाइट्स

यह फ़ंक्शन के निष्पादन टोकन को एक पैरामीटर के रूप में पारित करने की अनुमति देता है, और निश्चित रूप से कूलर समाधान है।

: g 2dup execute rot over = IF . THEN swap recurse ;

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

स्पष्टीकरण:

: g             \ x1 f          Define g. Params on the stack. f is on top
2dup execute    \ x1 f x2       duplicate both params, execute f(x1)
rot over        \ f x2 x1 x2    move x1 to top and copy x2 to top
= IF . THEN                     compare, if equal, print
swap recurse ;                  otherwise, recurse


1

टिनिस्पिल उत्तर , 28 बाइट्स

(d P(q((x)(i(e(f x)x)x(P(f x

मान लेता है कि फ़ंक्शन fपूर्वनिर्धारित है।

इसे ऑनलाइन आज़माएं! (उदाहरण समारोह हैf(x) = (x*2) mod 10 )

Ungolfed

(load library)
(def P
 (lambda (x)
  (if (equal? (f x) x)
   x
   (P (f x)))))

यदि f(x)बराबरी है x, तो xएक निश्चित बिंदु है; इसे लौटा दो। अन्यथा, f(x)इसके बजाय से शुरू होने वाले एक निश्चित बिंदु के लिए पुनरावर्ती रूप से देखें x


1

APL NARS 65 वर्ण

r←(f v)n;c
   c←0⋄→B
E: r←∞⋄→0
A: n←r
B: r←f n⋄c+←1⋄→E×⍳c>1e3⋄→A×⍳r≠n

v ऑपरेटर त्रुटि के लिए operator (या संभवतः -oo या नेन) लौटाएगा, या x = f (x) के साथ एक मान x होगा। परीक्षण में f = मंजिल (sqrt (abs (x))), f1 = 2-x, f2 = c (c (c (x))) के साथ c = x% 2 == 0? X / 2: 3 * x? +1

  f←⌊∘√∘|
  f v 0
0
  f v 9
1
  f1←{2-⍵}
  f1 v 1
1
  f1 v ¯10
∞
  f1 v 2
∞
  c1←{0=2∣⍵:⍵÷2⋄1+3×⍵}
  f2←c1∘c1∘c1
  f2 v 1
1
  f2 v 2
2
  f2 v 7
2
  f2 v 82
4

1

क्लोजर, 45 43 बाइट्स

खैर, यह सबसे छोटा और बदसूरत है:

#(loop[a + b %2](if(= a b)a(recur b(% b))))

+वहाँ एक संख्या के बजाय इतना है कि यह किसी भी मूल्य के बराबर नहीं है x0

55 बाइट्स और कार्यात्मक:

#(reduce(fn[a b](if(= a b)(reduced a)b))(iterate % %2))

उदाहरण:

(def f #(...))
(defn collaz [x] (if (even? x) (-> x (/ 2)) (-> x (* 3) (+ 1))))
(f (->> collaz (repeat 3) (apply comp)) 125)
; 1

1

x86 ओपकोड, 8 बाइट्स

fun:
        call    edx          ; 2B
        cmpxchg eax,    ecx  ; 3B, on 8086 use xchg and cmp instead
        jnz     fun          ; 2B
        ret                  ; 1B

इनपुट लें: ecx(वैल्यू ), (फंक्शन एड्रेस, से इनपुट लें , रिजल्ट को मॉडिफाई किए बिना लिखें और )x0edxecxeaxecxedx

8086 ओपकोड, 7 बाइट्स (लेकिन धीमा)

    xor     cx,     cx
    call    dx
    loop    $-2
    ret

यदि कोई निश्चित बिंदु मौजूद है, तो 65536 बार लूपिंग हमेशा इसे वहां चलाता है।
इनपुट लें: ax(आरंभिक मूल्य ), (फ़ंक्शन एड्रेस, से इनपुट लें , आउटपुट को बिना मूल्य के संशोधित किए लिखें ) और । रजिस्टर में निर्धारित बिंदु को आउटपुट करें ।x0dxaxaxcxdx
ax


यदि आप उत्तर को अधिक पठनीय बनाते हैं तो यह निश्चित रूप से मदद करेगा।
user202729

इसे सही करने के लिए अधिक संपादन
l4m2


0

जावा 8, 42 बाइट्स

यह एक Function<Integer, Integer>या IntFunction<Integer>एक intया Integer(करी) लेता है और निर्धारित बिंदु देता है।

f->i->{while(i!=(i=f.apply(i)));return i;}

यह ऑनलाइन की कोशिश करो

इस तथ्य का लाभ उठाता है कि जावा बाएं से दाएं (इसलिए पुराने iकी तुलना नए से की जाती है), एक ऐसी संपत्ति का मूल्यांकन करता है , जिसे लिखते समय मैं अनजान था!

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.