शुद्ध ईविल: एवल
a=lambda x,y:(y<0)*x or eval("a("*9**9**9+"x**.1"+",y-1)"*9**9**9)
print a(input(),9**9**9**9**9)//1
Eval के अंदर का स्टेटमेंट 7 * 10 10 10 10 10 10 8.57 लंबाई का एक स्ट्रिंग बनाता है जिसमें लैंबडा फ़ंक्शन के अलावा और कुछ भी नहीं होता है, जिनमें से प्रत्येक समान लंबाई की एक स्ट्रिंग का निर्माण करेगा , जब तक कि अंत में y
0. नहीं हो जाता। यह नीचे Eschew विधि के रूप में एक ही जटिलता है, लेकिन अगर-और-नियंत्रण तर्क पर भरोसा करने के बजाय, यह सिर्फ एक साथ विशाल तार को मिटाता है (और शुद्ध परिणाम अधिक ढेर हो रहा है ... शायद?)।
y
पायथन को बिना किसी त्रुटि के फेंकने के लिए मैं सबसे बड़ी कीमत की आपूर्ति कर सकता हूं और गणना कर सकता हूं 2 जो पहले से ही 1 में लौटने में अधिकतम-फ्लोट के इनपुट को कम करने के लिए पर्याप्त है।
लंबाई की एक स्ट्रिंग 7,625,597,484,987 बहुत बड़ी है OverflowError: cannot fit 'long' into an index-sized integer
:।
मुझे रुकना चाहिए।
Eschew Math.log
: (10 वीं-) रूट (समस्या की) पर जा रहे हैं, स्कोर: y = 1 से प्रभावी रूप से अप्रभेद्य है।
गणित पुस्तकालय को आयात करना बाइट गिनती को प्रतिबंधित कर रहा है। आओ हम इसके साथ काम करते हैं और log(x)
फ़ंक्शन को कुछ हद तक समान रूप से बदलते हैं : x**.1
और जिसकी लागत लगभग समान वर्ण होती है, लेकिन आयात की आवश्यकता नहीं होती है। दोनों कार्यों में इनपुट के संबंध में एक सुस्पष्ट आउटपुट है, लेकिन x 0.1 धीरे-धीरे बढ़ता है । हालाँकि, हम पूरी तरह से परवाह नहीं करते हैं, हम केवल इस बात की परवाह करते हैं कि इसमें एक ही आधार ग्रोथ पैटर्न है जिसमें बड़ी संख्या में वर्णों की तुलना होती है (उदाहरण के लिए) वर्णों x**.9
की समान संख्या है, लेकिन अधिक तेज़ी से बढ़ता है, इसलिए वहाँ है। कुछ मूल्य है जो सटीक समान वृद्धि का प्रदर्शन करेंगे)।
अब, 16 पात्रों के साथ क्या करना है। कैसे के बारे में ... Ackermann अनुक्रम गुण है करने के लिए हमारे भेड़ के बच्चे समारोह का विस्तार? बड़ी संख्या के लिए इस जवाब ने इस समाधान को प्रेरित किया।
a=lambda x,y,z:(z<0)*x or y and a(x**.1,z**z,z-1)or a(x**.1,y-1,z)
print a(input(),9,9**9**9**99)//1
z**z
भाग यहाँ मुझे कहीं भी साथ इस समारोह चल रहा से रोकता है पास के लिए समझदार आदानों की y
और z
, सबसे बड़ा मान मैं उपयोग 9 और कर रहे हैं कर सकते हैं 3 जिसके लिए मैं 1.0 का मूल्य वापस पाने के, यहां तक कि सबसे बड़ी नाव अजगर का समर्थन करता है टिप्पणी के लिए (: जबकि 1.0 संख्यात्मक रूप से 6.77538853089e-05 से अधिक है, बढ़ी हुई पुनरावृत्ति का स्तर इस फ़ंक्शन के आउटपुट को 1 के करीब ले जाता है, जबकि 1 से अधिक शेष रहता है, जबकि पिछला फ़ंक्शन 0 से अधिक शेष रहते हुए मानों को स्थानांतरित कर देता है, इस प्रकार इस फ़ंक्शन पर भी मध्यम पुनरावृत्ति होती है। इतने सारे परिचालनों में परिणाम कि फ्लोटिंग पॉइंट संख्या सभी महत्वपूर्ण बिट्स खो देती है )।
0 और 2 के पुनरावर्तन मान रखने के लिए मूल लैंबडा कॉल को पुनः कॉन्फ़िगर करना ...
>>>1.7976931348623157e+308
1.0000000071
यदि "फ़ंक्शन 1 से ऑफसेट" के बजाय "ऑफसेट से 0" की तुलना की जाती है 7.1e-9
, तो यह फ़ंक्शन लौटता है , जो निश्चित रूप से इससे छोटा है 6.7e-05
।
वास्तविक कार्यक्रम का आधार पुनरावर्तन (z मान) 10 10 10 10 1.97 स्तर गहरा है, जैसे ही y स्वयं समाप्त हो जाता है, यह 10 10 10 10 10 1.97 के साथ रीसेट हो जाता है (यही कारण है कि 9 का प्रारंभिक मूल्य पर्याप्त है), इसलिए मैं डॉन यह भी पता नहीं है कि कैसे सही ढंग से होने वाली कुल संख्याओं की गणना करें: मैं अपने गणितीय ज्ञान के अंत में पहुंच गया हूं। इसी तरह मुझे नहीं पता **n
कि प्रारंभिक इनपुट से माध्यमिक में एक्सपोनेंटिअशन में से एक को स्थानांतरित करने z**z
से रिकर्स की संख्या में सुधार होगा या नहीं (डिट्टो रिवर्स)।
और भी अधिक पुनरावृत्ति के साथ धीमी गति से चलते हैं
import math
a=lambda x,y:(y<0)*x or a(a(a(math.log(x+1),y-1),y-1),y-1)
print a(input(),9**9**9e9)//1
n//1
- 2 बाइट्स बचाता है int(n)
import math
, math.
1 बाइट ओवर बचाता हैfrom math import*
a(...)
कुल 8 बाइट बचाता है m(m,...)
(y>0)*x
एक बाइट की बचत होती है अधिकy>0and x
9**9**99
बढ़ जाती है लगभग द्वारा 4 और बढ़ जाती है प्रत्यावर्तन गहराई से गिनती बाइट 2.8 * 10^x
जहां x
वर्ष गहराई (: 10 या गहराई आकार में एक googolplex होने जा रही है 10 94 )।
9**9**9e9
5 से बाइट की संख्या बढ़ाता है और एक गहरी राशि ... द्वारा पुनरावृत्ति की गहराई बढ़ाता है। संदर्भ की पुनरावृत्ति की गहराई अब 10 10 10 9.93 है , संदर्भ के लिए, एक गूगोलोप्लेक्स 10 10 10 2 है ।
- लैम्ब्डा घोषणा एक अतिरिक्त कदम से पुनरावृत्ति बढ़ाती है: 7 बाइट्स खर्च
m(m(...))
करने के लिएa(a(a(...)))
नया आउटपुट मान (9 पुनरावर्ती गहराई पर):
>>>1.7976931348623157e+308
6.77538853089e-05
पुनरावृत्ति की गहराई उस बिंदु तक फैल गई है जिस पर यह परिणाम शाब्दिक रूप से एक ही इनपुट मानों का उपयोग करने की तुलना में निरर्थक है:
- मूल
log
25 बार कहा जाता है
- पहला सुधार इसे 81 बार कहता है
- वास्तविक कार्यक्रम यह 1e99 कहेंगे 2 या 10 के बारे में 10 2.3 गुना
- यह संस्करण इसे 729 बार कहता है
- वास्तविक कार्यक्रम यह (9 कहेंगे 9 99 ) 3 या थोड़ा कम से कम 10 10 95 बार)।
लम्बे इंसेप्शन, स्कोर: ???
मैंने तुम्हें लंबोदर की तरह सुना, इसलिए ...
from math import*
a=lambda m,x,y:y<0and x or m(m,m(m,log(x+1),y-1),y-1)
print int(a(a,input(),1e99))
मैं इसे भी नहीं चला सकता, मैं केवल 99 पुनरावृत्ति की परतों के साथ अतिप्रवाह को ढेर करता हूं ।
पुरानी विधि (नीचे) रिटर्न (रूपांतरण को पूर्णांक में लंघन):
>>>1.7976931348623157e+308
0.0909072713593
नई विधि वापस आती है, केवल 9 परतों का उपयोग करते हुए (उनके बजाय पूर्ण गोगोल की)
>>>1.7976931348623157e+308
0.00196323936205
मुझे लगता है कि यह एकरमैन सीक्वेंस की तरह ही जटिल है, बड़े के बजाय केवल छोटा है।
इसके अलावा उन स्थानों में 3-बाइट बचत के लिए ETHproductions के लिए धन्यवाद, जिन्हें मैंने महसूस नहीं किया था हटाया जा सकता है।
पुराना उत्तर:
फ़ंक्शन लॉग का पूर्णांक ट्रंकेशन (i + 1) लैम्ब्डा लैंबडास का उपयोग करके 20 25 बार (पायथन) को पुनरावृत्त करता है।
PyRulez का उत्तर एक दूसरे मेमने को पेश करके और उसे ढेर करके संकुचित किया जा सकता है:
from math import *
x=lambda i:log(i+1)
y=lambda i:x(x(x(x(x(i)))))
print int(y(y(y(y(y(input()))))))
९९ १०० पात्रों का उपयोग किया।
यह मूल 25 से अधिक 20 25 की एक पुनरावृत्ति पैदा करता है । इसके अतिरिक्त यह एक अतिरिक्त स्टैक के लिए अनुमति के int()
बजाय 2 वर्णों को बचाता है । यदि लैम्ब्डा के बाद रिक्त स्थान हटाया जा सकता है (मैं इस समय जांच नहीं कर सकता ) तो एक 5 वें जोड़ा जा सकता है। मुमकिन!floor()
x()
y()
यदि from math
पूरी तरह से योग्य नाम (जैसे। x=lambda i: math.log(i+1))
) का उपयोग करके आयात को छोड़ने का कोई तरीका है, तो यह और भी अधिक वर्णों को बचाएगा और एक और स्टैक के लिए अनुमति देगा, x()
लेकिन मुझे नहीं पता कि पायथन ऐसी चीजों का समर्थन करता है (मुझे संदेह नहीं है)। किया हुआ!
यह मूल रूप से बड़ी संख्या में XCKD के ब्लॉग पोस्ट में उपयोग की जाने वाली एक ही चाल है , हालांकि लैम्ब्डा घोषित करने में ओवरहेड एक तीसरी स्टैक को रोकता है:
from math import *
x=lambda i:log(i+1)
y=lambda i:x(x(x(i)))
z=lambda i:y(y(y(i)))
print int(z(z(z(input()))))
यह 3 लैम्ब्डा के साथ सबसे छोटी पुनरावृत्ति संभव है जो 2 लैम्ब्डा की गणना की गई स्टैक ऊंचाई से अधिक है (किसी भी लैम्ब्डा को दो कॉल तक कम करने से स्टैक की ऊंचाई 2-लैम्ब्डा संस्करण के नीचे 18 तक हो जाती है), लेकिन दुर्भाग्य से 110 वर्णों की आवश्यकता होती है।