Perl: ∞
$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/}
ขยายความยาวตามที่คุณต้องการ
จะหมดหน่วยความจำอย่างรวดเร็วเนื่องจากการใช้หน่วยความจำเหมือน O (n ^ n) อย่างไรก็ตามมันจะง่ายต่อการแทนที่ตัวเปลี่ยนดัชนีโดยรหัส O (n) อีกต่อไป ฉันแค่แสดงให้เห็นถึงวิธีที่คุณสามารถใช้END{}
สำหรับงานนี้ใน Perl END{}
บล็อกทั้งหมดรันที่เวลาออก แต่เฉพาะบล็อกแรกที่ถูกเรียก (บล็อกสุดท้ายในโค้ด) จะแสดงผลอะไรก็ได้เนื่องจากการ/A/
ทดสอบซึ่งเป็นจริงเพียงครั้งเดียว
โปรดสังเกตว่าตัว$m
นับต้องนับเป็นสตริงเพราะเป็นตัวเลขมันจะล้น (ภายหลังจากจุดจบของจักรวาล แต่เป็นหลักการที่นับ) ด้วยเหตุผลเดียวกันฉัน "นับ" จำนวนบรรทัดโดยการสร้างสตริงของA
แทนที่จะใช้ตัวนับจริงแม้ว่าล้นนี้จะเกิดขึ้นในภายหลัง
อีกวิธีในการทำเช่นนี้ใน perl:
@{$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
? พวกเขาทุกคนผูกด้วยคะแนน∞หรือไม่?