अनंत शक्ति मीनार


22

चुनौती

काफी सरल है, एक इनपुट दिया गया है x, यह अनंत बिजली टॉवर की गणना करें!

x^x^x^x^x^x...

आपके लिए गणित-प्रेमी वहां से निकलते हैं, यह xअसीम चित्रण है

निम्नलिखित बातों का ध्यान रखें:

x^x^x^x^x^x... = x^(x^(x^(x^(x...)))) != (((((x)^x)^x)^x)^x...)

हैरानी की बात यह है कि हमारे पास "सरल" गणित चुनौती नहीं है!

मान्यताओं

  • xहोगा हमेशा जमा होते है।
  • नकारात्मक और जटिल संख्याओं को संभालने में सक्षम होना चाहिए
  • यह , इसलिए सबसे कम बाइट्स जीतती हैं!
  • आपके उत्तर कम से कम 5 दशमलव स्थानों पर सही होने चाहिए

उदाहरण

Input >> Output

1.4 >> 1.8866633062463325
1.414 >> 1.9980364085457847
[Square root of 2] >> 2
-1 >> -1
i >> 0.4382829367270323 + 0.3605924718713857i
1 >> 1
0.5 >> 0.641185744504986
0.333... >> 0.5478086216540975
1 + i >> 0.6410264788204891 + 0.5236284612571633i
-i >> 0.4382829367270323 -0.3605924718713857i
[4th root of 2] >> 1.239627729522762

* (एक और अधिक जटिल चुनौती से इतर )


1
मैं नहीं लगता है कि इस टॉवर और converges है x = -2 या एक्स = -0.5।
एंडर्स केसरग

@AndersKaseorg मैं सहमत हूं, हालांकि सभी कार्यक्रमों में एक ही अभिसरण उत्तर है। वे अभिसरण क्यों नहीं करते?
ग्रेविटन

2
x = gets2 8-चक्र से आकर्षित होता है और x = gets0.5 6-चक्र से आकर्षित होता है। (मेरा कार्यक्रम अभी भी इन मामलों में एक जवाब देता है, लेकिन यह चक्र में बिंदुओं में से एक है और एक निश्चित बिंदु नहीं है; यह अभिसरण संकेत देता है।)
एंडर्स केसेर्ग

@AndersKaseorg अहा बहुत दिलचस्प। आपको नहीं पता होगा कि -2 के लिए '8' और -0.5 के लिए '6' क्यों है? बस जिज्ञासा से बाहर है।
ग्रेविटन

2
आप पुनरावृत्तियों को केवल उतने ही आसानी से चला सकते हैं, लेकिन यहाँ एक चित्र है: commons.wikimedia.org/wiki/File:Tetration_period.png
एंडर्स केसोर्ग

जवाबों:



10

अजगर,  4  3 बाइट्स

4 को पार कर लिया अभी भी नियमित 4 है;

u^Q

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

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

u       first repeated value under repeated application of G ↦
 ^QG        input ** G
    Q   starting at input

2
आपको अंतिम की आवश्यकता नहीं है G, यह स्वतः भरा जाएगा।
FryAmTheEggman

@FryAmTheEggman अधिकार, धन्यवाद!
एंडर्स कासोर्ग

7

हास्केल , 100 63 बाइट्स

उन इनपुटों के लिए जो अभिसरण नहीं करते (उदा। -2) यह समाप्त नहीं होगा:

import Data.Complex
f x=until(\a->magnitude(a-x**a)<1e-6)(x**)x

मेरे बारे में सिखाने untilऔर मुझे 37बाइट्स बचाने के लिए बहुत बहुत @ JrjanJohansen धन्यवाद !

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


1
आप untilफ़ंक्शन के साथ इसे बहुत छोटा कर सकते हैं । इसे ऑनलाइन आज़माएं!
अर्जन जोहान्सन

साफ! नहीं पता था until, बहुत बहुत धन्यवाद।
ბიმო

7

पायथन 3 , 40 39 35 बाइट्स

  • थैंक्स @ insteadrrr जोहानस बाइट के लिए: d>99इसके बजाय d==99: 1 कम बाइट-काउंट के लिए अधिक पुनरावृति
  • 4 बाइट्स के लिए @Uriel धन्यवाद: x**Trueएक्स में मूल्यांकन करने वाले तथ्य का बुद्धिमान उपयोग x**(d>99or g(x,d+1))। पद की अभिव्यक्ति 99 से अधिक की गहराई के लिए True का मूल्यांकन करती है और इस प्रकार पारित मूल्य को लौटाती है।

एक अधिकतम 100 की गहराई के साथ पुनरावर्ती लैम्ब्डा यानी 100 की गहराई के लिए समान मूल्य देता है। वास्तव में अभिसरण-अज्ञेयवादी है, इसलिए फ़ंक्शन के लिए गैर-रूपांतरित मान वाले संख्याओं के लिए अप्रत्याशित की अपेक्षा करें।

g=lambda x,d=0:x**(d>99or g(x,d+1))

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


1
Tio लिंक में आप जगह ले सकता है complex('j')के साथ1j
श्री Xcoder

1
d>99एक और पुनरावृत्ति करता है और छोटा होता है।
अर्जन जोहान्सन

1
साथ 4 बाइट को बचाने g=lambda x,d=0:x**(d>99or g(x,d+1)), x**Trueकरने के लिए मूल्यांकन करता हैx
ऊरीएल

@ एरियल, यह वास्तव में स्मार्ट है ..... धन्यवाद !!!
आधिकारिक

6

पायथन 3, 37 30 27 बाइट्स

-7 बाइट्स @FelipeNardiBatista से।
@Xnor से -3 बाइट्स

मुझे अजगर के बारे में ज्यादा याद नहीं है, लेकिन मैं अपना रूबी जवाब पोर्ट करने में कामयाब रहा और अन्य पायथन 3 जवाबों को हरा दिया: डी

lambda x:eval('x**'*99+'1')

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


1
FYI करें, ऐसा प्रतीत होता है कि f- स्ट्रिंग्स को पहले पायथन 3.6 में पेश किया गया था: python.org/dev/peps/pep-0498 देखें । (यह समझाता है कि 3.5.2 में आपके कोड ने मेरे लिए काम क्यों नहीं किया।) बस मैंने सोचा था कि मैं इस मामले में किसी और के भ्रमित होने का उल्लेख करूंगा।
गणितमण्डल

1
आपको काम करने की जरूरत नहीं है x, eval('x**'*99+'1')काम करता है
xnor

@xnor doh, बेशक यह :) :) धन्यवाद
daniero

@ एक्सनॉर नीट - मैंने अपने रूबी के जवाब में यही बात लागू की और इसे किसी तरह तय किया :)
daniero

+1, मैं अपने अस्तित्व को भूल जाने के लिए थप्पड़ मार रहा हूं ....: D
आधिकारिक

4

गणितज्ञ, 12 बाइट्स

#//.x_:>#^x&

इनपुट के रूप में एक अस्थायी floating बिंदु संख्या लेता है।


4

जे , 5 बाइट्स

^^:_~

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

व्याख्या

सबसे पहले, मैं बताता हूँ ~कि अंत में पार्स करने के बाद किस कमांड को निष्पादित किया जा रहा है , और नई क्रिया के लिए वॉक-थ्रू होगा।

(^^:_~) x = ((x&^)^:_) x

((x&^)^:_) x  |  Input: x
      ^:_     |  Execute starting with y = x until the result converges
  x&^         |    Compute y = x^y

जे समाधान वास्तव में यहाँ अच्छा है। बारीक दाने में अपनी पहली पंक्ति को तोड़ने के लिए, यह कहना सही है कि निम्नलिखित होता है: (^^:_) पावर कॉइन के माध्यम से एक नया डायडिक क्रिया बनाता है, फिर आत्म क्रिया ~उस क्रिया को विवादास्पद बनाता है, ताकि जब कोई तर्क दिया जाए तो xउसका विस्तार हो x (^^:_) xxबाद में बाईं ओर "चिपक जाता है", ((x&^)^:_) xआपके नोट के अनुसार, और केवल सही तर्क पुनरावृत्ति के दौरान बदलता है?
जोनाह

1
@Jonah ज़रूर, जब शक्ति के साथ एक दो का समूह को दो तर्क दे रही है, x u^:n yके लिए, बाईं तर्क युग्म के साथ एक इकाई है कि नीडिंत है बनाने के लिए बंधुआ है nपर कई बार yx u^:n y -> (x&u)^:n y -> (x&u) ... n times ... (x&u) y
मील

4

सी # (.NET कोर) , 79 78 बाइट्स

x=>{var a=x;for(int i=0;i++<999;)a=System.Numerics.Complex.Pow(x,a);return a;}

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

मैंने i= 999 तक पुनरावृति को चुना क्योंकि अगर मैंने 99 तक पुनरावृति की तो कुछ उदाहरण आवश्यक सटीकता तक नहीं पहुंचे। उदाहरण:

Input:                      (0, 1)
Expected output:            (0.4382829367270323, 0.3605924718713857)
Output after 99 iterations: (0.438288569331222,  0.360588154553794)
Output after 999 iter.:     (0.438282936727032,  0.360592471871385)

जैसा कि आप देख सकते हैं, 99 पुनरावृत्तियों के बाद काल्पनिक हिस्सा 5 वें दशमलव स्थान में विफल रहा।

Input:                      (1, 1)
Expected output:            (0.6410264788204891, 0.5236284612571633)
Output after 99 iterations: (0.64102647882049,   0.523628461257164)
Output after 999 iter.:     (0.641026478820489,  0.523628461257163)

इस मामले में 99 पुनरावृत्तियों के बाद हमें अपेक्षित सटीकता प्राप्त होती है। वास्तव में, मैं i= 1e9 तक एक ही बाइट गिनती के साथ पुनरावृति कर सकता था , लेकिन इससे कोड काफी धीमा हो जाएगा

  • अनाम उपयोगकर्ता के लिए 1 बाइट बचाया धन्यवाद।

1
+1 जटिल वर्ग के लिए मुझे पता भी नहीं था कि अस्तित्व में है।
TheLethalCoder

1
@ TheLethalCoder ने न तो मुझे तब तक किया जब तक मैंने इसे गॉगल नहीं कर दिया। :-)
चार्ली


2

रूबी, 21 20 बाइट्स

->n{eval'n**'*99+?1}

डिस्क्लेमर : ऐसा लगता है कि रूबी एक जटिल संख्या को एक शक्ति में बढ़ाते समय कुछ अजीब मान देती है। मुझे लगता है कि रूबी के पूरे गणित मॉड्यूल को ठीक करने के लिए इस चुनौती के दायरे से बाहर है, लेकिन अन्यथा इस फ़ंक्शन के परिणाम सही होने चाहिए। संपादित करें : मेरे पायथन 3 उत्तर से नवीनतम परिवर्तनों को लागू कियाऔर अचानक यह किसी भी तरह एक ही, अपेक्षित परिणाम देता है :)

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


के बाद अंतरिक्ष बाहर ले eval
मूल्य स्याही

आपका मूल संस्करण जटिल परीक्षण के मामले में विफल रहा, क्योंकि इसने स्ट्रिंग को विकसित किया "0+1i**0+1i**0+1i**...", जो कि गलत तरीके से पार्स करता है क्योंकि **की तुलना में उच्च पूर्वता है +
अर्जन जोहान्सन

@ RightrjanJohansen हुह, आप सही कह रहे हैं। मुझे लगता है कि मुझे इस तथ्य से मूर्ख बनाया गया था #inspectऔर #to_sविभिन्न मूल्यों को वापस लौटाया। प्रारंभिक उत्तर प्रस्तुत करने से पहले मैंने irb में कुछ परीक्षण किया और देखा कि उदाहरण के Complex(1,2)लिए REPL में प्रवेश करना (1+2i), कोष्ठक सहित देना होगा । जब मूल्य को कड़ा करना होता है, लेकिन कोष्ठक शामिल नहीं होते हैं, इसलिए पूर्वता, जैसा कि आप बताते हैं, इसे गड़बड़ कर दिया।
डानिएरो

मुझे लगा कि evalप्रयोग वर्जित है।
वी। कोर्टोइस

@ V.Courtois ठीक है। लेकिन ऐसा नहीं है।
डानिएरो

2

टीआई-बेसिक, 16 बाइट्स

इनपुट और आउटपुट को स्टोर किया जाता है Ans

Ans→X
While Ans≠X^Ans
X^Ans
End

1

आर , 36 33 बाइट्स

- 3 बाइट्स जारको डबेलडैम के लिए धन्यवाद

Reduce(`^`,rep(scan(,1i),999),,T)

स्टड से पढ़ता है। Reduceसही क्रम में लागू किए गए घातांक प्राप्त करने के अधिकार से।

इसे आज़माएँ (कार्य)

यह कोशिश करो (स्टडिन)


1
scan(,1i)काम करता है। कैसे scan(,'')काम करता है के समान ।
JAD

@JarkoDubbeldam बेशक! कभी-कभी मेरा दिमाग काम नहीं करता।
Giuseppe

1

जावास्क्रिप्ट, 33 बाइट्स

f=(x,y=x)=>(x**y===y)?y:f(x,x**y)

जावास्क्रिप्ट काल्पनिक संख्या को नहीं संभालती है।
kamoroso94

1

MATL , 20 10 बाइट्स

@LuisMendo की बदौलत आधा कट गया

t^`Gw^t5M-

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

यह मेरा पहला और MATL का उपयोग करते हुए मेरा पहली बार है तो मुझे यकीन है कि यह आसानी से आउटगोल्ड हो सकता है।


साइट पर आपका स्वागत है, और अच्छा पहला जवाब! कुछ सुझाव: XIIके बराबर है t। आप स्वचालित क्लिपबोर्ड से छुटकारा पा सकते हैं XHऔर Hउसका उपयोग कर सकते हैं M, अर्थात ttt^`yw^t5M-]bb-x। और अंतिम भाग में, आपके द्वारा उपयोग किए जा सकने वाले अवांछित मानों को हटाने के बजाय &, जो अंतर्निहित प्रदर्शन फ़ंक्शन को केवल शीर्ष दिखाने के लिए कहता है। तो, आप ttt^`yw^t5M-]&कुछ बाइट्स का उपयोग और सहेज सकते हैं ।
लुइस मेंडू

इसके अलावा, पहले tकी जरूरत नहीं है, और Gदूसरे के बजाय का उपयोग करके tआप बच सकते हैं &और इस प्रकार ]निहित छोड़ सकते हैं t^`Gw^t5M-:। अरे, हमने बाइट की गिनती आधे से कम कर दी है!
लुइस मेंडू

@LuisMendo महान सुझावों के लिए धन्यवाद! मुझे MATL के बारे में जानने के लिए बहुत कुछ है, लेकिन मैं वास्तव में इसे पसंद करता हूं।
सिनैस्की

जानकर ख़ुशी हुई की!
लुइस मेंडो

0

पर्ल 6 , 17 बाइट्स

{[R**] $_ xx 999}

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

R**रिवर्स-एक्सपेंसेशन ऑपरेटर है; x R** yके बराबर है y ** x[R**]रिवर्स एक्सपोनेंटेशन के साथ इनपुट तर्क की 999 प्रतियों की एक सूची को कम करता है।

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