$ od -c -N 50000 [_CD6_]<sil>GobSources.dm!1>router1.bcpl 0000000 / / \t \t R o u t i n 0000020 g A l g o r i 0000040 t h m s \r \r / / \t P a r t 0000060 2 - H e u r i s t i c s \r 0000100 \r / / \t E . M c C r e i g h t 0000120 \r / / \t l a s t e d i t e d 0000140 J u n e 1 5 , 1 9 7 7 1 0000160 1 : 5 8 A M b y e m m \r 0000200 \r e x t e r n a l \r \t [ \r \t M 0000220 o v e B l o c k \r \t Z e r o \r \t 0000240 C a l l S w a t \r \t b e s t T o 0000260 t a l N e t L e n g t h \r \t h e 0000300 u r i s t i c W o r k \r \r \t G e 0000320 t O r d e r e d R a n d o m S e 0000340 t \r \t A r c L e n g t h \r \r \t f 0000360 o r c e F i r s t N o d e T o E 0000400 n d \r \t n \r \t P e r m \r \r \t H e 0000420 u r i s t i c N e t \r \t ] \r \r \r 0000440 s t a t i c \r \t [ \r \t a r c L 0000460 e n s \r \t t o t a l C i r c u i 0000500 t L e n g t h \r \t l o n g e s t 0000520 A r c L e n \r \t l o n g e s t A 0000540 r c \r \t h e u r i s t i c I m p 0000560 r o v e m e n t s \r \t i m p r o 0000600 v e m e n t B r e a k = - 1 0000620 \r \t h e u r i s t i c W o r k 0000640 = 2 0 \r \t ] \r \r \f \r / / \t 2 . 0000660 A h e u r i s t i c a l g 0000700 o r i t h m w h i c h d o e 0000720 s n o t g u a r a n t e e 0000740 a n \r / / \t o p t i m u m b u 0000760 t i s m u c h m o r e e 0001000 c o n o m i c a l t h a n t 0001020 h e \r / / \t c o m b i n a t o r 0001040 i a l o n e f o r l a r g 0001060 e n e t s . \r \r l e t H e u 0001100 r i s t i c N e t ( ) b e \r \r 0001120 \t [ G e n e r a t e G o o d P 0001140 e r m ( ) \r \t H e u r i s t i c 0001160 I m p r o v e ( ) \r \t ] \r \r \r a 0001200 n d G e n e r a t e G o o d P 0001220 e r m ( ) b e \r \r \t [ l e t 0001240 B U S p a n D e s t = v e 0001260 c 2 0 0 \r \t M a k e M i n S p 0001300 a n T r e e ( B U S p a n D e s 0001320 t ) \r \r \t l e t R o o t = 0001340 R e R o o t ( B U S p a n D e s 0001360 t ) \r \r \t l e t T D S p a n S 0001400 o n s = v e c 2 0 0 \r \t l 0001420 e t T D S p a n B r o s = 0001440 v e c 2 0 0 \r \t R e R e p r e 0001460 s e n t ( B U S p a n D e s t , 0001500 T D S p a n S o n s , T D S 0001520 p a n B r o s ) \r \r \t T r e e W 0001540 a l k ( R o o t , T D S p a n 0001560 S o n s , T D S p a n B r o s 0001600 , P e r m ) \r \r \t C y c l e T 0001620 o R e m o v e L o n g e s t ( P 0001640 e r m ) \r \t ] \r \r \r a n d M a 0001660 k e M i n S p a n T r e e ( B U 0001700 S p a n D e s t ) b e \r \r \t [ 0001720 l e t I n C l u s t e r = 0001740 v e c 2 0 0 \r \t l e t N e 0001760 a r e s t E l t I n C l u s t e 0002000 r = v e c 2 0 0 \r \t l e t 0002020 D i s t T o C l u s t e r = 0002040 v e c 2 0 0 \r \r \t l e t N 0002060 e a r e s t O u t s i d e E l t 0002100 = 0 \r \t l e t S h o r t e 0002120 s t D i s t T o C l u s t e r 0002140 = n i l \r \r \t f o r i = 1 0002160 t o n d o \r \t \t [ I n C l 0002200 u s t e r ! i = ( i e q 0002220 1 ) \r \t \t i f I n C l u s t e 0002240 r ! i t h e n \r \t \t \t [ B U 0002260 S p a n D e s t ! i = 0 \r \t 0002300 \t \t l o o p \r \t \t \t ] \r \r \t \t N 0002320 e a r e s t E l t I n C l u s t 0002340 e r ! i = 1 \r \t \t D i s t T 0002360 o C l u s t e r ! i = A r c 0002400 L e n g t h ( 1 , i ) \r \t \t i 0002420 f ( N e a r e s t O u t s i d 0002440 e E l t e q 0 ) % \r \t \t \t 0002460 ( D i s t T o C l u s t e r ! 0002500 i l s S h o r t e s t D i s 0002520 t T o C l u s t e r ) \r \t \t \t t 0002540 h e n \r \t \t \t [ N e a r e s t 0002560 O u t s i d e E l t = i \r \t 0002600 \t \t S h o r t e s t D i s t T o 0002620 C l u s t e r = D i s t T o 0002640 C l u s t e r ! i \r \t \t \t ] \r \t 0002660 \t ] \r \r \r \t w h i l e N e a r 0002700 e s t O u t s i d e E l t n e 0002720 0 d o \r \r \t \t [ B U S p a 0002740 n D e s t ! N e a r e s t O u t 0002760 s i d e E l t = N e a r e s 0003000 t E l t I n C l u s t e r ! N e 0003020 a r e s t O u t s i d e E l t \r 0003040 \t \t I n C l u s t e r ! N e a r 0003060 e s t O u t s i d e E l t = 0003100 t r u e \r \r \t \t l e t N e w C 0003120 l u s t e r E l t = N e a r 0003140 e s t O u t s i d e E l t \r \t \t 0003160 N e a r e s t O u t s i d e E l 0003200 t = 0 \r \r \t \t f o r i = 1 0003220 t o n d o \r \t \t \t [ i f 0003240 I n C l u s t e r ! i t h e 0003260 n l o o p \r \t \t \t l e t D i 0003300 s t T o N e w C l u s t e r E l 0003320 t = A r c L e n g t h ( i , 0003340 N e w C l u s t e r E l t ) \r 0003360 \t \t \t i f D i s t T o N e w C 0003400 l u s t e r E l t l s D i s 0003420 t T o C l u s t e r ! i t h e 0003440 n \r \t \t \t \t [ D i s t T o C l 0003460 u s t e r ! i = D i s t T o 0003500 N e w C l u s t e r E l t \r \t \t 0003520 \t \t N e a r e s t E l t I n C l 0003540 u s t e r ! i = N e w C l u 0003560 s t e r E l t \r \t \t \t \t ] \r \r \t 0003600 \t \t i f ( N e a r e s t O u t 0003620 s i d e E l t e q 0 ) % \r 0003640 \t \t \t \t ( D i s t T o C l u s 0003660 t e r ! i l s S h o r t e s 0003700 t D i s t T o C l u s t e r ) \r 0003720 \t \t \t \t t h e n \r \t \t \t \t [ N 0003740 e a r e s t O u t s i d e E l t 0003760 = i \r \t \t \t \t S h o r t e s 0004000 t D i s t T o C l u s t e r = 0004020 D i s t T o C l u s t e r ! i 0004040 \r \t \t \t \t ] \r \t \t \t ] \r \t \t ] \r 0004060 \t ] \r \r \r \r a n d R e R o o t 0004100 ( B U D e s t ) = v a l o f 0004120 \r \r \t [ l e t R o o t = 0004140 1 \t / / r e - r o o t t h e 0004160 s p a n n i n g t r e e a 0004200 t a u n a r y n o d e \r \t 0004220 u n l e s s f o r c e F i r s 0004240 t N o d e T o E n d d o \r \t \t 0004260 [ l e t I n t o = v e c 0004300 2 0 0 \r \t \t Z e r o ( I n t o 0004320 + 1 , n ) \r \t \t f o r i = 1 0004340 t o n d o \r \t \t \t I n t o 0004360 ! ( B U D e s t ! i ) = I n t o 0004400 ! ( B U D e s t ! i ) + 1 \r \t \t 0004420 f o r i = 1 t o n d o \r 0004440 \t \t \t i f I n t o ! i e q 0004460 0 t h e n \r \t \t \t \t [ R o o 0004500 t = i \r \t \t \t \t b r e a k \r 0004520 \t \t \t \t ] \r \t \t ] \r \r \t l e t 0004540 F a t h e r = v e c 2 0 0 0004560 \r \t l e t C u r N o d e = 0004600 R o o t \r \t l e t C u r A l t 0004620 = 0 \r \t w h i l e B U D e 0004640 s t ! C u r N o d e n e 0 0004660 d o \r \t \t [ F a t h e r ! C u 0004700 r A l t = C u r N o d e \r \t 0004720 \t C u r A l t = C u r A l t 0004740 + 1 \r \t \t C u r N o d e = B 0004760 U D e s t ! C u r N o d e \r \t \t 0005000 ] \r \r \t w h i l e C u r A l t 0005020 g r 0 d o \r \t \t [ C u r 0005040 A l t = C u r A l t - 1 \r \t 0005060 \t B U D e s t ! C u r N o d e 0005100 = F a t h e r ! C u r A l t \r 0005120 \t \t C u r N o d e = F a t h 0005140 e r ! C u r A l t \r \t \t ] \r \r \t 0005160 B U D e s t ! R o o t = 0 \r 0005200 \t r e s u l t i s R o o t \r \t 0005220 ] \r \r \r a n d R e R e p r e s 0005240 e n t ( B U D e s t , T D S o 0005260 n s , T D B r o s ) b e \r \r 0005300 \t [ Z e r o ( T D S o n s + 1 0005320 , n ) \r \t Z e r o ( T D B r o 0005340 s + 1 , n ) \r \r \t f o r i = 0005360 1 t o n d o \r \t \t [ l e 0005400 t F a t h e r = B U D e s 0005420 t ! i \r \t \t i f F a t h e r 0005440 e q 0 t h e n l o o p \t / 0005460 / t h i s i s t h e r o 0005500 o t \r \r \t \t T D B r o s ! i = 0005520 T D S o n s ! F a t h e r \r \t 0005540 \t T D S o n s ! F a t h e r = 0005560 i \r \t \t ] \r \t ] \r \r \r a n d 0005600 T r e e W a l k ( R o o t , T 0005620 D S o n s , T D B r o s , P 0005640 e r m ) b e \r \r \t [ l e t 0005660 B r o S t a c k = v e c 2 0005700 0 0 \r \t l e t D e p t h = 0005720 0 \r \t l e t N o d e s I n P e 0005740 r m = 0 \r \r \t w h i l e D 0005760 e p t h g e 0 d o \r \t \t [ 0006000 N o d e s I n P e r m = N 0006020 o d e s I n P e r m + 1 \r \t \t P 0006040 e r m ! N o d e s I n P e r m 0006060 = R o o t \r \r \t \t l e t S o 0006100 n = T D S o n s ! R o o t \r 0006120 \t \t i f S o n n e 0 t h 0006140 e n \r \t \t \t [ B r o S t a c k 0006160 ! D e p t h = T D B r o s ! 0006200 R o o t \r \t \t \t i f B r o S t 0006220 a c k ! D e p t h n e 0 t 0006240 h e n D e p t h = D e p t 0006260 h + 1 \r \t \t \t R o o t = S o 0006300 n \r \t \t \t l o o p \r \t \t \t ] \r \r 0006320 \t \t R o o t = T D B r o s ! 0006340 R o o t \r \t \t i f R o o t n 0006360 e 0 t h e n l o o p \r \r \t 0006400 \t D e p t h = D e p t h - 1 0006420 \r \t \t R o o t = B r o S t a 0006440 c k ! D e p t h \r \t \t ] \r \t ] \r 0006460 \r \r a n d C y c l e T o R e m 0006500 o v e L o n g e s t ( P e r m ) 0006520 b e \r \r \t [ l e t N e w P 0006540 e r m = v e c 2 0 0 \r \t l 0006560 e t L o n g e s t A r c P o s 0006600 = n i l \r \t l e t L o n g 0006620 e s t A r c L e n = - 1 \r \r 0006640 \t t e s t f o r c e F i r s t 0006660 N o d e T o E n d \r \r \t i f n o 0006700 t \t [ f o r i = 1 t o n 0006720 d o \r \t \t \t [ l e t T h i 0006740 s A r c L e n = A r c L e n 0006760 g t h ( P e r m ! i , \r \t \t \t \t 0007000 \t P e r m ! ( ( i r e m n ) 0007020 + 1 ) ) \r \t \t \t i f T h i s A 0007040 r c L e n g r L o n g e s t 0007060 A r c L e n t h e n \r \t \t \t \t 0007100 [ L o n g e s t A r c L e n 0007120 = T h i s A r c L e n \r \t \t \t 0007140 \t L o n g e s t A r c P o s = 0007160 i \r \t \t \t \t ] \r \t \t \t ] \r \r \t 0007200 \t M o v e B l o c k ( l v ( N 0007220 e w P e r m ! 1 ) , l v ( P 0007240 e r m ! ( L o n g e s t A r c P 0007260 o s + 1 ) ) , \r \t \t \t n - L o n 0007300 g e s t A r c P o s ) \r \t \t M o 0007320 v e B l o c k ( l v ( N e w P 0007340 e r m ! ( ( n - L o n g e s t A 0007360 r c P o s ) + 1 ) ) , l v ( 0007400 P e r m ! 1 ) , \r \t \t \t L o n g 0007420 e s t A r c P o s ) \r \t \t M o v 0007440 e B l o c k ( l v ( P e r m ! 0007460 1 ) , l v ( N e w P e r m ! 0007500 1 ) , n ) \r \t \t ] \r \r \t i f s 0007520 o i f A r c L e n g t h ( P 0007540 e r m ! 1 , P e r m ! 2 ) g 0007560 r \r \t \t A r c L e n g t h ( P e 0007600 r m ! n , P e r m ! 1 ) t h 0007620 e n / / r e v e r s e P e 0007640 r m ! 2 . . P e r m ! n \r \t \t f 0007660 o r i = 1 t o ( n - 1 ) / 0007700 2 d o \r \t \t \t [ l e t T 0007720 = P e r m ! ( i + 1 ) \r \t \t \t 0007740 P e r m ! ( i + 1 ) = P e r 0007760 m ! ( n + 1 - i ) \r \t \t \t P e r 0010000 m ! ( n + 1 - i ) = T \r \t \t 0010020 \t ] \r \t ] \r \r \r a n d H e u r 0010040 i s t i c I m p r o v e ( ) b 0010060 e \r \r \t [ l e t O r i g F i 0010100 r s t N o d e = P e r m ! 1 0010120 \r \r \t l e t a L = v e c 0010140 2 0 0 \r \t a r c L e n s = a 0010160 L \r \r \t l e t t e m p A r c L 0010200 e n = n i l \r \t t o t a l C 0010220 i r c u i t L e n g t h = 0 0010240 \r \r \t l e t t r i e s S i n c 0010260 e I m p r o v e m e n t = 0 0010300 \r \t l e t c r i t e r i o n 0010320 = h e u r i s t i c W o r k * 0010340 n \r \t l o n g e s t A r c L e n 0010360 = - 1 \r \r \t f o r i = 1 0010400 t o n d o \r \t \t [ t e m p 0010420 A r c L e n = A r c L e n g 0010440 t h ( P e r m ! i , P e r m ! 0010460 ( ( i r e m n ) + 1 ) ) \r \t 0010500 \t t o t a l C i r c u i t L e n 0010520 g t h = t o t a l C i r c u 0010540 i t L e n g t h + t e m p A r c 0010560 L e n \r \t \t a r c L e n s ! i 0010600 = t e m p A r c L e n \r \t \t i 0010620 f t e m p A r c L e n g r 0010640 l o n g e s t A r c L e n t h 0010660 e n \r \t \t \t [ l o n g e s t A 0010700 r c = P e r m ! i \r \t \t \t l 0010720 o n g e s t A r c L e n = t 0010740 e m p A r c L e n \r \t \t \t ] \r \t 0010760 \t ] \r \r \t i f f o r c e F i r 0011000 s t N o d e T o E n d t h e n 0011020 \r \t \t t e s t a r c L e n s ! 0011040 n g r a r c L e n s ! 1 \r \t 0011060 \t i f s o \t [ l o n g e s t A 0011100 r c = P e r m ! n \r \t \t \t l 0011120 o n g e s t A r c L e n = a 0011140 r c L e n s ! n \r \t \t \t ] \r \t \t 0011160 i f n o t \t [ l o n g e s t A 0011200 r c = P e r m ! 1 \r \t \t \t l 0011220 o n g e s t A r c L e n = a 0011240 r c L e n s ! 1 \r \t \t \t ] \r \r \t 0011260 b e s t T o t a l N e t L e n g 0011300 t h = t o t a l C i r c u i 0011320 t L e n g t h - l o n g e s t A 0011340 r c L e n \r \t h e u r i s t i c 0011360 I m p r o v e m e n t s = 0 0011400 \r \r \t w h i l e t r i e s S i 0011420 n c e I m p r o v e m e n t l 0011440 s c r i t e r i o n d o \r \t 0011460 \t [ t r i e s S i n c e I m p 0011500 r o v e m e n t = t r i e s 0011520 S i n c e I m p r o v e m e n t 0011540 + 1 \r \r \t \t i f f o r c e F i 0011560 r s t N o d e T o E n d & ( 0011600 l o n g e s t A r c n e P e 0011620 r m ! 1 ) & \r \t \t \t ( l o n g 0011640 e s t A r c n e P e r m ! n 0011660 ) t h e n \r \t \t \t [ C a l l 0011700 S w a t ( " H e u r i s t i c 0011720 b u g 1 " ) \r \t \t \t ] \r \r \t \t 0011740 l e t s e g m e n t L a s t s 0011760 = v e c 4 \r \t \t G e t O r 0012000 d e r e d R a n d o m S e t ( 3 0012020 , s e g m e n t L a s t s , 0012040 1 , n ) \r \r \t \t l e t s e g 0012060 m e n t F i r s t s = v e c 0012100 4 \r \t \t s e g m e n t F i r s 0012120 t s ! 1 = ( s e g m e n t L 0012140 a s t s ! 3 g e n ) ? 1 , 0012160 \r \t \t \t \t \t s e g m e n t L a s 0012200 t s ! 3 + 1 \r \t \t f o r i = 2 0012220 t o 3 d o \r \t \t \t s e g m 0012240 e n t F i r s t s ! i = ( s 0012260 e g m e n t L a s t s ! ( i - 1 0012300 ) ) + 1 \r \r \t \t i f T h i s A 0012320 r r a n g e m e n t B e t t e r 0012340 ( s e g m e n t F i r s t s , 0012360 s e g m e n t L a s t s , \r \t \t 0012400 \t \t 1 , 3 , 2 ) % \r \t \t T 0012420 h i s A r r a n g e m e n t B e 0012440 t t e r ( s e g m e n t F i r s 0012460 t s , s e g m e n t L a s t s 0012500 , \r \t \t \t \t 1 , - 3 , - 2 ) 0012520 % \r \t \t T h i s A r r a n g e 0012540 m e n t B e t t e r ( s e g m e 0012560 n t F i r s t s , s e g m e n 0012600 t L a s t s , \r \t \t \t \t 1 , - 0012620 3 , 2 ) % \r \t \t T h i s A r 0012640 r a n g e m e n t B e t t e r ( 0012660 s e g m e n t F i r s t s , s 0012700 e g m e n t L a s t s , \r \t \t \t 0012720 \t 1 , 3 , - 2 ) \r \t \t \t t h 0012740 e n \r \t \t \t [ h e u r i s t i 0012760 c I m p r o v e m e n t s = \r 0013000 \t \t \t \t h e u r i s t i c I m p 0013020 r o v e m e n t s + 1 \r \t \t \t i 0013040 f h e u r i s t i c I m p r o 0013060 v e m e n t s e q i m p r o 0013100 v e m e n t B r e a k \r \t \t \t \t 0013120 t h e n \r \t \t \t \t C a l l S w a 0013140 t ( " I m p r o v e m e n t b 0013160 r e a k " ) \r \r \t \t \t t r i e s 0013200 S i n c e I m p r o v e m e n t 0013220 = 0 \r \t \t \t ] \r \t \t ] \r \r \t 0013240 M o v e L o n g e s t A r c T o 0013260 E n d : \r \r \t C y c l e T o R e 0013300 m o v e L o n g e s t ( P e r m 0013320 ) \r \r \t i f f o r c e F i r s 0013340 t N o d e T o E n d t h e n \r 0013360 \t \t f o r i = 1 t o n / 2 0013400 d o \r \t \t \t [ l e t T = 0013420 P e r m ! ( n + 1 - i ) \t / / 0013440 r e v e r s e i t t o g 0013460 e t f i r s t \r \t \t \t P e r m 0013500 ! ( n + 1 - i ) = P e r m ! 0013520 i \t / / n o d e a t e n d 0013540 \r \t \t \t P e r m ! i = T \r \t 0013560 \t \t ] \r \r \t i f f o r c e F i 0013600 r s t N o d e T o E n d & ( 0013620 P e r m ! n n e O r i g F i 0013640 r s t N o d e ) t h e n \r \t \t 0013660 C a l l S w a t ( " H e u r i s 0013700 t i c b u g 2 " ) \r \t ] \r \r 0013720 \r \r a n d T h i s A r r a n g 0013740 e m e n t B e t t e r ( o r i g 0013760 F , o r i g L , s e g 1 , 0014000 s e g 2 , s e g 3 ) = v a 0014020 l o f \r \t \t \t \t \r \t [ / / T 0014040 h i s w h o l e p i e c e 0014060 o f c o d e w i l l f a l 0014100 l a p a r t o n \r \t / / t 0014120 h e f l o o r u n l e s s 0014140 s e g 1 e q 1 . O K ? \r \r 0014160 \t l e t s e g = ( l v s 0014200 e g 1 ) - 1 \r \t l e t f = 0014220 v e c 4 \r \t l e t l = v 0014240 e c 4 \r \t f o r i = 1 t o 0014260 3 d o \r \t \t [ f ! i = 0014300 ( s e g ! i l s 0 ) ? o r 0014320 i g L ! ( - ( s e g ! i ) ) , 0014340 o r i g F ! ( s e g ! i ) \r \t \t 0014360 l ! i = ( s e g ! i l s 0014400 0 ) ? o r i g F ! ( - ( s e g 0014420 ! i ) ) , o r i g L ! ( s e g 0014440 ! i ) \r \t \t ] \r \r \t l e t n e 0014460 w A r c L e n s = v e c 4 0014500 \r \r \t f o r i = 1 t o 2 0014520 d o \r \t \t n e w A r c L e n s ! 0014540 i = A r c L e n g t h ( P e 0014560 r m ! ( l ! i ) , P e r m ! ( 0014600 f ! ( i + 1 ) ) ) \r \t n e w A r 0014620 c L e n s ! 3 = A r c L e n 0014640 g t h ( P e r m ! ( l ! 3 ) , 0014660 P e r m ! ( f ! 1 ) ) \r \r \t l e 0014700 t t e m p L o n g e s t A r c 0014720 = l o n g e s t A r c \r \t l 0014740 e t t e m p L o n g e s t A r 0014760 c L e n = l o n g e s t A r 0015000 c L e n \r \r \t i f v a l o f \r 0015020 \t \t [ f o r j = 1 t o 3 0015040 d o \r \t \t \t i f P e r m ! ( 0015060 o r i g L ! j ) e q l o n g 0015100 e s t A r c t h e n \r \t \t \t \t 0015120 r e s u l t i s t r u e \r \t \t 0015140 r e s u l t i s f a l s e \r \t 0015160 \t ] \r \t \t t h e n \r \r \t \t [ t 0015200 e m p L o n g e s t A r c L e n 0015220 = 0 \r \t \t f o r i = 1 t 0015240 o n d o \r \t \t \t i f ( a r 0015260 c L e n s ! i g r t e m p L 0015300 o n g e s t A r c L e n ) & \r 0015320 \t \t \t v a l o f \r \t \t \t \t [ f 0015340 o r j = 1 t o 3 d o \r \t 0015360 \t \t \t \t i f o r i g L ! j e 0015400 q i t h e n \r \t \t \t \t \t \t r 0015420 e s u l t i s f a l s e \r \t \t 0015440 \t \t r e s u l t i s t r u e \r 0015460 \t \t \t \t ] \r \t \t \t t h e n \r \t \t 0015500 \t \t [ t e m p L o n g e s t A 0015520 r c = P e r m ! i \r \t \t \t \t 0015540 t e m p L o n g e s t A r c L e 0015560 n = a r c L e n s ! i \r \t \t 0015600 \t \t ] \r \t \t ] \r \r \t f o r j = 0015620 1 t o 3 d o \r \t \t i f n 0015640 e w A r c L e n s ! j g r t 0015660 e m p L o n g e s t A r c L e n 0015700 t h e n \r \t \t \t [ t e m p L 0015720 o n g e s t A r c = - ( P e 0015740 r m ! ( l ! j ) ) \r \t \t \t t e m 0015760 p L o n g e s t A r c L e n = 0016000 n e w A r c L e n s ! j \r \t \t 0016020 \t ] \r \r \t i f f o r c e F i r 0016040 s t N o d e T o E n d t h e n 0016060 \r \t \t [ l e t f i r s t A r 0016100 c = P e r m ! 1 \r \t \t l e t 0016120 f i r s t A r c L e n = a 0016140 r c L e n s ! 1 \r \t \t i f o r 0016160 i g L ! 1 e q 1 t h e n \r 0016200 \t \t \t f i r s t A r c L e n = 0016220 n e w A r c L e n s ! 1 \r \r 0016240 \t \t l e t l a s t A r c = 0016260 P e r m ! n \r \t \t l e t l a s 0016300 t A r c L e n = a r c L e n 0016320 s ! n \r \r \t \t i f o r i g L ! 0016340 3 e q n \r \t \t t h e n \t [ 0016360 l a s t A r c = P e r m ! ( 0016400 l ! 3 ) \r \t \t \t l a s t A r c L 0016420 e n = n e w A r c L e n s ! 0016440 3 \r \t \t \t ] \r \r \t \t t e s t f 0016460 i r s t A r c L e n g e l a 0016500 s t A r c L e n \r \r \t \t i f s o 0016520 \t [ t e m p L o n g e s t A r 0016540 c = - f i r s t A r c \r \t \t 0016560 \t t e m p L o n g e s t A r c L 0016600 e n = f i r s t A r c L e n 0016620 \r \t \t \t ] \r \r \t \t i f n o t \t [ 0016640 t e m p L o n g e s t A r c 0016660 = - l a s t A r c \r \t \t \t t e 0016700 m p L o n g e s t A r c L e n 0016720 = l a s t A r c L e n \r \t \t \t 0016740 ] \r \t \t ] \r \r \t l e t n e w N 0016760 e t L e n = t o t a l C i r 0017000 c u i t L e n g t h + v a l o f 0017020 \r \t \t \t [ l e t s u m = 0 \r 0017040 \t \t \t f o r j = 1 t o 3 0017060 d o \r \t \t \t \t s u m = s u m 0017100 + n e w A r c L e n s ! j - \r \t 0017120 \t \t \t \t a r c L e n s ! ( o r i 0017140 g L ! j ) \r \t \t \t r e s u l t i 0017160 s s u m \r \t \t \t ] - \r \t \t \t t 0017200 e m p L o n g e s t A r c L e n 0017220 \r \r \t u n l e s s n e w N e t 0017240 L e n l s b e s t T o t a l 0017260 N e t L e n g t h d o r e s 0017300 u l t i s f a l s e \r \r \t H B 0017320 e t t e r N e t : \r \t b e s t T 0017340 o t a l N e t L e n g t h = 0017360 n e w N e t L e n \r \r \t t o t a 0017400 l C i r c u i t L e n g t h = 0017420 n e w N e t L e n + t e m p L 0017440 o n g e s t A r c L e n \r \r \t l 0017460 e t t e m p V e c = v e c 0017500 2 0 0 \r \t l e t t e m p L e 0017520 n s = v e c 2 0 0 \r \r \t l 0017540 e t n e x t W o r d = 1 \r 0017560 \t f o r j = 2 t o 3 d o 0017600 \r \t \t [ t e s t s e g ! j 0017620 g e 0 \r \t \t i f s o \t [ M o 0017640 v e B l o c k ( t e m p V e c + 0017660 n e x t W o r d , \r \t \t \t \t l v 0017700 ( P e r m ! ( f ! j ) ) , \r \t 0017720 \t \t \t ( l ! j - f ! j + 1 ) ) \r 0017740 \t \t \t M o v e B l o c k ( t e m 0017760 p L e n s + n e x t W o r d , \r 0020000 \t \t \t \t l v ( a r c L e n s ! 0020020 ( f ! j ) ) , \r \t \t \t \t ( l ! j 0020040 - f ! j + 1 ) ) \r \t \t \t n e x t 0020060 W o r d = n e x t W o r d + 0020100 ( l ! j - f ! j + 1 ) \r \t \t \t ] 0020120 \r \r \t \t i f n o t \t [ l e t 0020140 c u r = f ! j \r \t \t \t w h i 0020160 l e c u r g e l ! j d o 0020200 \r \t \t \t \t [ t e m p V e c ! n 0020220 e x t W o r d = P e r m ! c 0020240 u r \r \t \t \t \t t e m p L e n s ! 0020260 n e x t W o r d = a r c L e 0020300 n s ! ( c u r - 1 ) \r \t \t \t \t i 0020320 f c u r g r l ! j & \r \t 0020340 \t \t \t \t t e m p L o n g e s t A 0020360 r c e q \r \t \t \t \t \t \t P e r m 0020400 ! ( c u r - 1 ) \r \t \t \t \t \t t h 0020420 e n \r \t \t \t \t \t t e m p L o n g 0020440 e s t A r c = P e r m ! c u 0020460 r \r \t \t \t \t c u r = c u r - 0020500 1 \r \t \t \t \t n e x t W o r d = 0020520 n e x t W o r d + 1 \r \t \t \t \t 0020540 ] \r \t \t \t ] \r \t \t t e m p L e n 0020560 s ! ( n e x t W o r d - 1 ) = 0020600 n e w A r c L e n s ! j \r \t \t 0020620 ] \r \r \t a r c L e n s ! ( o r i 0020640 g L ! 1 ) = n e w A r c L e 0020660 n s ! 1 \r \r \t l o n g e s t A r 0020700 c = ( t e m p L o n g e s t 0020720 A r c g e 0 ) ? t e m p L 0020740 o n g e s t A r c , \r \t \t \t - t 0020760 e m p L o n g e s t A r c \r \t l 0021000 o n g e s t A r c L e n = t 0021020 e m p L o n g e s t A r c L e n 0021040 \r \r \t M o v e B l o c k ( l v 0021060 ( P e r m ! ( o r i g F ! 2 ) ) 0021100 , l v ( t e m p V e c ! 1 ) 0021120 , n e x t W o r d - 1 ) \r \t M 0021140 o v e B l o c k ( l v ( a r c 0021160 L e n s ! ( o r i g F ! 2 ) ) , 0021200 l v ( t e m p L e n s ! 1 ) 0021220 , \r \t \t \t n e x t W o r d - 1 ) 0021240 \r \t r e s u l t i s t r u e \r 0021260 \t ] \r \r \r 032 ( 6 3 5 ) \ f 1 9 0021300 6 f 0 2 3 f 1 5 0 f 0 2 0 0021320 f 1 4 5 9 5 f 0 1 8 f 1 3 0021340 0 4 5 f 0 1 8 f 1 3 4 f 0 0021360 1 8 f 1 \r \0 0021366