शर्तें
एक कीड़ा nonnegative पूर्णांक की कोई भी सूची है, और इसके सबसे दाहिने (यानी, अंतिम ) तत्व को सिर कहा जाता है । यदि सिर 0 नहीं है, तो कृमि में एक सक्रिय खंड होता है जिसमें तत्वों का सबसे लंबा खंड होता है जिसमें सिर शामिल होता है और इसके सभी तत्व कम से कम सिर के समान बड़े होते हैं । कम सक्रिय खंड सिर 1. उदाहरण के लिए द्वारा कम कर के साथ सक्रिय खंड है, कीड़ा 3 1 2 3 2
सक्रिय खंड है 2 3 2
कम सक्रिय खंड है, और 2 3 1
।
विकास के नियम
एक कीड़ा कदम-दर-कदम इस प्रकार विकसित होता है:
चरण t (= 1, 2, 3, ...) में,
यदि सिर 0 है: सिर को हटा दें
: सक्रिय सेगमेंट को t + 1 से कम सक्रिय सेगमेंट की संक्षिप्त प्रतियों द्वारा प्रतिस्थापित करें।
तथ्य : कोई भी कीड़ा अंततः खाली सूची में विकसित होता है , और ऐसा करने के लिए चरणों की संख्या कीड़ा का जीवनकाल है ।
(विवरण वर्म सिद्धांत में पाया जा सकता है , एलडी बेक्लेमिशेव द्वारा एक पत्र। "अनुक्रम" का अर्थ एक परिमित अनुक्रम, और "सिर" का अर्थ है इसका अंतिम तत्व, इस कागज से लिया गया है - इसे भ्रमित नहीं किया जाना चाहिए। अमूर्त डेटा प्रकार के रूप में सूचियों के लिए सामान्य उपयोग के साथ , जहां सिर का अर्थ आमतौर पर पहला तत्व होता है।)
उदाहरण (कोष्ठक में सक्रिय खंड)
कीड़ा: 0,1
step worm
0(1)
1 0 0 0
2 0 0
3 0
4 <- lifetime = 4
कीड़ा: 1,0
step worm
1 0
1 (1)
2 0 0 0
3 0 0
4 0
5 <- lifetime = 5
कीड़ा: 1,1
step worm
(1 1)
1 1 0 1 0
2 1 0(1)
3 1 0 0 0 0 0
4 1 0 0 0 0
5 1 0 0 0
...
8 (1)
9 0 0 0 0 0 0 0 0 0 0
10 0 0 0 0 0 0 0 0 0
...
18 0
19 <- lifetime = 19
इल्ली: २
step worm
(2)
1 (1 1)
2 1 0 1 0 1 0
3 1 0 1 0(1)
4 1 0 1 0 0 0 0 0 0
5 1 0 1 0 0 0 0 0
6 1 0 1 0 0 0 0
...
10 1 0(1)
11 1 0 0 0 0 0 0 0 0 0 0 0 0 0
12 1 0 0 0 0 0 0 0 0 0 0 0 0
...
24 (1)
25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
...
50 0
51 <- lifetime = 51
कीड़ा: 2,1
(2 1)
1 2 0 2 0
2 2 0(2)
3 2 0(1 1 1 1)
4 2 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0
5 2 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0(1 1 1)
6 2 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0
7 2 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0(1 1)
8 2 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0{1 0}^9
...
?? <- lifetime = ??
इल्ली: ३
step worm
(3)
1 (2 2)
2 (2 1 2 1 2 1)
3 2 1 2 1 2 0 2 1 2 1 2 0 2 1 2 1 2 0 2 1 2 1 2 0
4 2 1 2 1 2 0 2 1 2 1 2 0 2 1 2 1 2 0 2 1 2 1(2)
5 2 1 2 1 2 0 2 1 2 1 2 0 2 1 2 1 2 0(2 1 2 1 1 1 1 1 1 1)
6 2 1 2 1 2 0 2 1 2 1 2 0 2 1 2 1 2 0{2 1 2 1 1 1 1 1 1 0}^7
7 2 1 2 1 2 0 2 1 2 1 2 0 2 1 2 1 2 0{2 1 2 1 1 1 1 1 1 0}^6 (2 1 2 1 1 1 1 1 1)
... ...
?? <- lifetime = ??
अलग
कृमि जीवनकाल आम तौर पर बहुत बड़ा होता है, जैसा कि कार्यों के मानक तेजी से बढ़ते पदानुक्रम के संदर्भ में निम्न सीमा द्वारा दिखाया गया है : α :
worm lower bound on lifetime
---------------- ------------------------------------------
11..10 (k 1s) f_k(2)
2 f_ω(2)
211..1 (k 1s) f_(ω+k)(2)
2121..212 (k 2s) f_(ωk)(2)
22..2 (k 2s) f_(ω^k)(2)
3 f_(ω^ω)(2)
...
n f_(ω^ω^..^ω)(2) (n-1 ωs) > f_(ε_0) (n-1)
उल्लेखनीय रूप से, कृमि [3] का पहले से ही एक जीवनकाल है जो ग्राहम की संख्या , G को पार करता है :
च ω ω (2) = च ω 2 (2) = च ω2 (2) = च ω + 2 (2) = च ω + 1 (च ω + 1 (2)) >> च ω + 1 (64) > जी।
कोड गोल्फ चैलेंज
निम्नलिखित व्यवहार के साथ कम से कम संभव फ़ंक्शन उपप्रोग्राम लिखें:
इनपुट : कोई कीड़ा
आउटपुट : कृमि का जीवनकाल।कोड का आकार बाइट्स में मापा जाता है।
यहाँ एक उदाहरण (पायथन, गोल्फ के बारे में 167 बाइट्स) है:
from itertools import *
def T(w):
w=w[::-1]
t=0
while w:
t+=1
if w[0]:a=list(takewhile(lambda e:e>=w[0],w));a[0]-=1;w=a*(t+1)+w[len(a):]
else:w=w[1:]
return t
NB : यदि t (n) कृमि का जीवनकाल है [n], तो t (n) की वृद्धि की दर मोटे तौर पर गुडस्टीन फ़ंक्शन की है । इसलिए अगर इसे 100 बाइट्स से नीचे रखा जा सकता है, तो यह सबसे बड़े नंबर प्रिंट करने योग्य प्रश्न का एक अच्छा जवाब दे सकता है । (उस उत्तर के लिए, एन-स्टेप-काउंटर को हमेशा n पर शुरू करके विकास-दर को बहुत तेज़ी से बढ़ाया जा सकता है - वर्म [n] के समान मूल्य - इसे 0. पर शुरू करने के बजाय।)
2 1
एक उचित समय में पूछने के लिए बहुत ज्यादा हो सकता है, लेकिन एक उपयोगी परीक्षण है कि अनुक्रम शुरू कर देना चाहिए (2 1)
, 2 0 2 0
, 2 0 (2)
, 2 0 (1 1 1 1)
, ...
w[0]
उस सूची का सबसे छोटा तत्व मानते हैं ?