पर्ल: ∞
$z.="-1,";$_.=A;END{$m.=!!s/./{${z}B}/g,map(/B/||s/\d+\K/,/g*/(-\d*,).*\1/||($n{$_}||=$m++),sort glob),print$n{$z}if/A/}
$z.="-2,";$_.=A;END{$m.=!!s/./{${z}B}/g,map(/B/||s/\d+\K/,/g*/(-\d*,).*\1/||($n{$_}||=$m++),sort glob),print$n{$z}if/A/}
$z.="-3,";$_.=A;END{$m.=!!s/./{${z}B}/g,map(/B/||s/\d+\K/,/g*/(-\d*,).*\1/||($n{$_}||=$m++),sort glob),print$n{$z}if/A/}
अपनी पसंद की किसी भी लंबाई तक बढ़ाएँ
मेमोरी जल्दी से चलेगी क्योंकि मेमोरी उपयोग ओ (n ^ n) की तरह है। हालाँकि, O (n) कोड द्वारा क्रमबद्धता अनुक्रमणिका को प्रतिस्थापित करना आसान होगा। मैं सिर्फ इस तरीके का चित्रण कर रहा हूं जिसका उपयोग आप END{}
इस कार्य के लिए पर्ल में कर सकते हैं । सभी END{}
ब्लॉक एग्जिट टाइम पर चलते हैं, लेकिन केवल पहले वाले को ही बुलाया जाता है (कोड में एक अंतिम) /A/
टेस्ट के कारण कुछ भी आउटपुट करेगा जो केवल एक बार सच होता है
ध्यान दें कि $m
काउंटर को एक स्ट्रिंग के रूप में गिनना चाहिए क्योंकि एक संख्या के रूप में यह अतिप्रवाह होगा (ब्रह्मांड के अंत की तुलना में लेकिन यह वह सिद्धांत है जो गिना जाता है)। उसी कारण से मैं A
वास्तविक काउंटर का उपयोग करने के बजाय एस की एक स्ट्रिंग का निर्माण करके लाइनों की संख्या को "गिनता हूं" हालांकि यह अतिप्रवाह बाद में होगा।
पर्ल में ऐसा करने का एक और तरीका:
@{$b.=A; if($a eq $b) {use bigint; $n=0;$n++for@F;$c=0;$c=$c*$n--+map{$z=$_;$a=grep$_&&$_>$z,@F;$_=0;}@F;print$c}}=()x push@F,"1".!($a.=A),
@{$b.=A; if($a eq $b) {use bigint; $n=0;$n++for@F;$c=0;$c=$c*$n--+map{$z=$_;$a=grep$_&&$_>$z,@F;$_=0;}@F;print$c}}=()x push@F,"2".!($a.=A),
@{$b.=A; if($a eq $b) {use bigint; $n=0;$n++for@F;$c=0;$c=$c*$n--+map{$z=$_;$a=grep$_&&$_>$z,@F;$_=0;}@F;print$c}}=()x push@F,"3".!($a.=A),
यह उस तथ्य का उपयोग करता foo = bar
bar
है जिसे बाद में निष्पादित किया जाता है foo
। वैसे यह संस्करण समय और स्थान में पागल नहीं होता है, लेकिन यह कोड को लंबा बनाता है
फिर भी एक अन्य विचार का उपयोग करना है DESTROY
जिसमें यह लाभ है कि उनमें से केवल एक को निष्पादित किया जाएगा। मैं क्रमांकन अनुक्रमण कोड को दोहराने नहीं जा रहा हूं, जिसमें मैंने पहले ही दो उदाहरण दिए हैं।
push@F,"1";bless\@F;DESTROY{print"Work out permutation index of @{$_[0]}\n" }
push@F,"2";bless\@F;DESTROY{print"Work out permutation index of @{$_[0]}\n" }
push@F,"3";bless\@F;DESTROY{print"Work out permutation index of @{$_[0]}\n" }
या उपयोग कर रहा है BEGIN
:
BEGIN{push@F,"1"} print"Work out permutation index of @F\n"; exit;
BEGIN{push@F,"2"} print"Work out permutation index of @F\n"; exit;
BEGIN{push@F,"3"} print"Work out permutation index of @F\n"; exit;
n
? क्या वे सभी ∞ के स्कोर पर बंधे हैं?