/*
 *                 $B%i%$%U%2!<%`%W%m%0%i%`2r@b(B
 *
 *         $BAa0pEDBg3XBg3X1!(B $BM}9)3X8&5f2J(B $B>eED8&5f<<(B
 *                   $B=$;N#1G/(B   $BLVBe(B $B0iBg(B
 *           e-mail: ajiro@ueda.info.waseda.ac.jp
 *
 *             Copyright (C) 1997 Yasuhiro Ajiro
 */

$B"#=hM}$N35MW(B

$B#1!"(Bencode,  decode

$B$^$:M?$($i$l$?:BI8%G!<%?$O!"(Bencode $B$K$h$C$F!"9T$4$H$K(B Y$B:BI8$,F1$8$b$N$I(B
$B$&$7$,$^$H$a$i$l$k!#Nc$($P(B
[p(18,5),p(15,7),p(19,7),p(16,8),p(17,8),p(19,8)] $B$O!"(B
[e(5,[18]),e(7,[19,15]),e(8,[19,17,16])]$B$K(B encode $B$5$l$k!#$^$?!"(BX$B:BI8$K(B
$B4X$7$F$O5U=g$K%=!<%H$5$l$?>uBV$H$J$C$F$$$k!#(B

$B$=$7$F$3$N8e$N7W;;$OA4$F$3$N%(%s%3!<%I$5$l$?>uBV$KBP$7$F$J$5$l!":G8e$K7k(B
$B2L$rEO$9$H$-$K(B $B85$N:BI8I=8=$K(B decode $B$5$l$k!#(B


$B#2!"(Bcompute_dist

$BIi2YJ,;6$O!"(BY$B:BI8$K$h$C$F?eJ?$KJ,3d$7$F9T$&!#$=$N:]!"=i4|%G!<%?$H7W;;$r(B
$B9T$&@$Be?t$r8+$F!"(B

($B:G>.$N(B Y $B:BI8(B) - $B@$Be?t(B/30 $B$+$i(B ($B:GBg$N(B Y $B:BI8(B) + $B@$Be?t(B/30 

$B$^$G$rJ,3d$9$kHO0O$HDj$a$F$$$k!#(B30$B$H$$$&$N$O$"$^$j:,5r$N$"$k?t;z$G$O$J$$(B
$B$,!"%F%9%H%G!<%?$N<B83$K$h$C$F7hDj$7$?!#(B

$B$=$7$F$3$N;~!"(B

{($B:GBg$N(B Y $B:BI8(B) - ($B:G>.$N(B Y $B:BI8(B) + 2 * $B@$Be?t(B/30} / PE$B?t(B

$B$,!"0l$D$N%W%m%;%C%5$N<u$1;}$D(B Y $B:BI8$NHO0O$NBg$-$5$H$J$k$,!"$3$l$,#0$K(B
$B$J$C$F$7$^$&$H$-$O!"J,;6$r$;$:$K(B 1PE $B$GC`<!<B9T$r9T$&!#$^$?!"J,3d$7$?$H(B
$B$-$K!"C<$NItJ,$r<u$1;}$D%W%m%;%C%5$O!">e5-$NHO0O$K2C$(!"F~NO%G!<%?$NHO0O(B 
-2^20 $B!A(B 2^20 $B$rA4$F%+%P!<$9$k$h$&$K!"C<$NJ}$NNN0h$b<u$1;}$D!#(B

$B%W%m%;%C%5$X$N3d$jEv$F$O!"(BY$B:BI8$N>.$5$$J}$NNN0h$+$i=g$K!"(BP1,2, ...,N-1,0 
$B$,<u$1;}$D$,!"8e$G=R$Y$k<u$1;}$ANN0h$NJQ99$N=hM}$NET9g>e!"$=$l$>$l$N%W%m(B
$B%;%C%5HV9f$r(B P0,1,...,N-1 $B$H$_$J$7$F%W%m%;%9$rEj$2$F$$$k!#(B


$B#3!"(Bcompgen,  init_ng, nextgen, fin_ng

compgen $B$K$h$j(B1$B@$BeJ,$N7W;;$,?J$`!#$^$?!"(B1$B@$Be$N7W;;$O(B nextgen $B$K$h$j9T(B
$B$o$l$k$,!"<u$1;}$A$NNN0h$NC<$NItJ,$OJL=hM}$H$J$k$?$a!"$=$N0Y$N=i4|2=$O!"(B
init_ng $B$K$h$C$F9T$o$l!"(Bfin_ng $B$,=*N;;~$N=hM}$r9T$&!#(B

$B%i%$%U%2!<%`$N7W;;$O!"#1$D$NE@(B p(X,Y) $B$KBP$7$F!"(B

p(X-1,Y-1),p(X,Y-1),p(X+1,Y-1),
p(X-1,Y),           p(X+1,Y),
p(X-1,Y+1),p(X,Y+1),p(X+1,Y+1),

$B$N:BI8$K!VE@?t!W$r(B1$BE@2C;;$7!"A4$F$NE@$K$D$$$F2C;;$,=*N;$7$?$H$-!"(B

  $BE@?t$,(B 2 $B$J$i!"JQ2=$J$7(B
         3 $B$J$i!"%;%k$r(BON
   $B$=$l0J30$J$i!"%;%k$r(BOFF

$B$rD4$Y$k$3$H$K$h$C$F9T$&!#$3$3$G$O!"7W;;$O9T(B(Y$B:BI8(B)$B$4$H$K%(%s%3!<%I$5$l(B
$B$?$b$N$KBP$7$F9T$C$F$$$k$N$G!"2C;;$9$k$?$a$NE@$N<~0O$N:BI8$b9T$4$H$K9T$C(B
$B$F$$$k!#$D$^$j!"(Be(Y,Xs)$B$H$$$&%G!<%?$+$i$O!"(BY-1,Y,Y+1 $B9T$K4X$9$k2C;;%G!<(B
$B%?$,F@$i$l$k!#$3$N2C;;%G!<%?$O(B X$B:BI8$r%j%9%H$K$7$?$b$N$G$"$j!">:=g$K%=!<(B
$B%H$5$l$F$$$k!#6qBNE*$K$O!"(Be(8,[18,17,16])$B$H$$$&%(%s%3!<%I%G!<%?$+$i$O!"(B

Y$B:BI8(B 7$B$H(B9 $B$K4X$7$F(B [15,16,16,17,17,17,18,18,19]
         8 $B$K4X$7$F(B [15,16,17,17,18,19]

$B$H$$$&2C;;%G!<%?$,F@$i$l$k!#$=$7$F!"(BY$B:BI8$N>.$5$$J}$+$i=g$K%(%s%3!<%I$5(B
$B$l$?%G!<%?$r8+$F$$$/$H!"(BC $B9T$K4X$9$k7W;;$,=*$o$C$?$H$-$K!"(B(C-1)$B9T$^$G$N(B
$BE@?t$r7W;;$7$F<!@$Be$N%;%k>uBV$rCN$k$3$H$,$G$-$k!#$h$C$F(B nextgen
(init_ng, fin_ng)$B$O!"#1$D>e$N9T$N2C;;%G!<%?$H!"#2$D>e$N9T$K$h$k#1$D>e$N(B
$B9T$X$N2C;;%G!<%?$rJ];}$7$F$*$-!"8=:_=hM}$7$F$$$k9T$N2C;;%G!<%?$N7W;;$,=*(B
$B$o$C$?$H$3$m$G!"$=$l$i$H#1$D>e$N9T$N@N$N%;%k>uBV$r(B nextrow $B$KEO$7$F!"<!(B
$B@$Be$N%;%k>uBV$r7W;;$9$k!#(B

$B<u$1;}$ANN0h$NN>C<$NItJ,$G$O!"JL$N%W%m%;%C%5$N<u$1;}$D9T$+$i$N2C;;%G!<%?(B
$B$r<u$1<h$C$F$+$i$G$J$$$H7W;;$,9T$($J$$$,!"%W%m%;%C%5F1;N$N%G%C%I%m%C%/$r(B
$BHr$1$k$?$a!"$H$j$"$($:C<$N9T$K4X$7$F$OL$Dj5A$N$^$^(B nextrow $B$KEO$7$F$7$^(B
$B$$!"<+J,$N$b$DC<$N%G!<%?$rNY$j9g$&%W%m%;%C%5$KEO$;$k$h$&$K$7$F$$$k!#(B
$BEO$9$Y$-2C;;%G!<%?$,L5$$>l9g$O6u$N%j%9%H(B(`[]')$B$rAw$k!#(B

$B$^$?!"0lHV$O$8$NItJ,$NNN0h$r<u$1;}$D%W%m%;%C%5$O!"NY@\$9$kNN0h$,JRB&$K$7(B
$B$+B8:_$7$J$$$N$G!"F1$8=R8l$r;H$C$F7W;;$r9T$&$?$a$K!"NN0h$,B8:_$7$J$$B&$+(B
$B$i$O!"%@%_!<$NF~NO$H$7$F6u%j%9%H$,Kh2s(B($BKh@$Be(B)$BF~$C$F$/$k$h$&$K$J$C$F$$$k!#(B


$B#3(B.$B#1(B nextrow

C $B9T$N%;%k>uBV$O!"(BC-1,C,C+1 $B9T$+$i5a$^$k2C;;%G!<%?(B($BK\%W%m%0%i%`$G$O>:=g(B
$B$K%=!<%H$5$l$F$$$k(B)$B$H!"A0$N%;%k>uBV$K$h$C$F7W;;$5$l$k!#$^$:!"(Bnextrow$B$O!"(B
$B$3$N#3$D$N9T$+$i$/$k2C;;%G!<%?$r(B msort3 ($B$H2<@A$1$N(B msort2)$B$K$h$C$F#1$D(B
$B$N9_=g$N%G!<%?$K$^$H$a$k!#$=$7$F=R8l(B row ($B$H(B rule)$B$K$h$j!"%;%k$N(B ON$B!&(B 
OFF$B$N5,B'$K$7$?$,$C$F%;%k$N>uBV$r7W;;$9$k!##3$G=R$Y$?$h$&$K!VE@?t!W$,(B 2
$BE@$N;~$O!"(Brule2 $B$K$h$jA0$N%;%k>uBV$r;2>H$7$F%;%k$N>uBV$r7hDj$9$k!#(B

$B$^$?$3$N7k2L!"(Be(Y,[])$B$N$h$&$J%4%_%G!<%?$,$G$-$F$7$^$&$N$G!"$3$l$r#1@$Be(B
$B7W;;$,=*$o$k$?$S$K!"(Brm_null $B$K$h$C$F<h$j=|$$$F$$$k!#(B


$B#4!"<u$1;}$ANN0h$NF0E*JQ99(B

$B%;%k>uBV$NJQ2=$KBP1~$9$k$?$a!"(B500$B@$Be7W;;$9$k$?$S$K!"<u$1;}$ANN0h$NF0E*(B
$B$JJQ99$r9T$&!#$3$N;~!"$=$l$>$l$NNN0h$r<u$1;}$C$F$$$k%W%m%;%C%5$NHV9f(B($B<B(B
$B:]$N(B current_node $B$J$I$GF@$i$l$kHV9f$H$O0[$J$k(B)$B$r(B Y$B:BI8$N>.$5$$J}$+$i=g(B
$B$K!"(B0,1,...,N-1 $B$H$9$k!#$=$7$F!"(B(500 * $B4q?t(B)$B@$BeL\$K$O!"(B2*n $B$H(B 2*n+1 $BHV(B
$B$N%W%m%;%C%5$,DL?.$r9T$$!"(B(500 * $B6v?t(B)$B@$BeL\$K$O!"(B2*n+1 $B$H(B 2*n+2 $BHV$N%W(B
$B%m%;%C%5$,DL?.$r9T$&!#(B(n = 0,1,...) $B$^$?!"DL?.Aj<j$,$$$J$$$H$-$OEvA3!"2?(B
$B$b9T$o$J$$!#(B

$B$^$:$*8_$$$K!";}$C$F$$$k(B ON $B$N%;%k$N?t$rDL?.$7$"$$!"$h$jB?$/;}$C$F$$$kJ}(B
$B$,!";}$A?t$,F1$8$K$J$k$h$&$K!">/$J$$J}$NAj<j$K<u$1;}$ANN0h$rM?$($F!"<u$1(B
$B;}$ANN0h$rJQ99$9$k!#(B

$B=R8l(B partner $B$,$3$NDL?.Aj<j$r7hDj$7!"Aj<j$,<+J,$h$j2<B&(B(Y$B:BI8$NBg$-$$J}(B)
$B$K$$$k$+>eB&(B(Y$B:BI8$N>.$5$$J}(B)$B$K$$$k$+$G!"$=$l$>$l(B comm_with_low $B$+(B 
comm_with_up $B$r<B9T$9$k!#2<B&$NNN0h$HDL?.$7$?$H$-$O!"<+J,$NNN0h$N2<C<$d(B
$B$=$l$KH<$C$F;}$AJ,$N%;%k$,JQ99$5$l$k!#$^$?>eB&$NNN0h$HDL?.$7$?$H$-$O!">e(B
$BC<$H;}$AJ,$N%;%k$,JQ99$K$J$k2DG=@-$,$"$k!#(B

$B$3$N;~!"$"$k%W%m%;%C%5$N<u$1;}$A$NNN0h$,$"$^$j69$/$J$C$F$7$^$&$H!"5Q$C$F(B
$B8zN($NDc2<$r>7$/$H9M$(!"(Bcheck_height $B$,<+J,$NNN0h$,(B 10$BL$K~$K$J$C$F$7$^$&(B
$B$h$&$J$H$-$O!"Aj<j$KNN0h$rJ,$1M?$($k$N$rCf;_$9$k=hM}$r9T$C$F$$$k!#(B

$B$3$NF0E*JQ99$K$h$C$FNc$($P!"=hM}Cf$K$"$k%W%m%;%C%5$N<u$1;}$ANN0h$KHs>o$K(B
$BBg$-$J(B ON$B$N%;%k$N2t$,7A@.$5$l!"$=$N<~$j$N%W%m%;%C%5$,KX$s$I2K$@!"$H$$$&(B
$B$h$&$J>uBV$K$J$C$?$H$-!"<+J,$N>e2<$NNN0h$r<u$1;}$D%W%m%;%C%5$HDL?.$9$k$@(B
$B$1$G!"0J2<$N$h$&$K>/$7$E$D!"$=$N2t$NItJ,$r%W%m%;%C%5$KJ,3d$9$k$3$H$,$G$-(B
$B$k!#(B

($B%;%k$,KX$s$I0\F0$7$F$$$J$$>l9g(B)
 ---------------------------------------
         $B%W%m%;%C%5(B   $B<u$1;}$A%;%k?t(B
            P0            100
            P1              0
            P2              0
            P3              0
            P4             30
                   $B"-(B            (P0$B$H(BP1$B!"(BP2$B$H(BP3$B$,DL?.(B)

            P0             50
            P1             50
            P2              0
            P3              0
            P4             30
                   $B"-(B            (P1$B$H(BP2$B!"(BP3$B$H(BP4$B$,DL?.(B)

            P0             50
            P1             25
            P2             25
            P3             15
            P4             15
                   $B"-(B            (P0$B$H(BP1$B!"(BP2$B$H(BP3$B$,DL?.(B)

            P0             38
            P1             37
            P2             20
            P3             20
            P4             15


$B$^$?$3$3$G=R$Y$?!"(B500$B@$Be$4$H$H$$$&@_Dj$d!"<u$1;}$ANN0h$NBg$-$5:G>.CM(B($B$3(B
$B$3$G$O(B10)$B$O!"%=!<%9>e$N$A$g$C$H$7$?=q$-49$($GJQ992DG=$G$"$k!#(B


$B"#F0:n3NG'$r9T$C$?%7%9%F%`$N35MW(B

Sun Ultra Enterprise 4000 (10PE)
   +
Solaris 2.5.1
   +
KLIC version 3.002

$B"#%F%9%H%G!<%?$N=hM}$KMW$9$k<B9T;~4V(B

$B0J2<$O(B make test $B$N<B9T7k2L(B($BC`<!(B)

../life glider.life >glider.out
Response time is 15 msec
../life blinker.life >blinker.out
Response time is 13 msec
../life sample1.life >sample1.out
Response time is 180 msec
../life sample2.life >sample2.out
Response time is 39 msec
../life b.life >b.out
Response time is 213 msec
../life pi.life >pi.out
Response time is 199 msec
../life flotilla.life >flotilla.out
Response time is 98 msec
../life r.life >r.out
Response time is 1832 msec


$B"#%"%k%4%j%:%`!"%W%m%0%i%_%s%0>e$GFC$K9)IW$7$?E@(B

$B#1!"%;%k$N7W;;$N%A%e!<%K%s%0(B

compgen $B$G2C;;%G!<%?$r5a$a$k$H$-!"8e$G2~$a$F%=!<%H$9$kI,MW$,$J$$$h$&$K!"(B
X$B:BI8$rC<$+$i=g$K8+$F$$$/:]!"<!$N%;%k$N(B X$B:BI8$r8+$F$+$i2C;;%G!<%?$r:n$C(B
$B$F!">:=g$KJB$V$h$&$K$7$F$$$k!#F1MM$K$=$l$>$l$N9T$r8+$F$$$/:]$b!"$9$02<$K(B
$B$"$k%;%k$,!"8=:_$N9T$H$I$l$/$i$$N%$l$F$$$k$+$r8+$F$+$i=hM}$r9T$C$F!"2~$a(B
$B$F%=!<%H$9$kI,MW$,$J$$$h$&$K$7$F$$$k!#(B

$B$^$?9T$4$H$K%G!<%?$r$^$H$a$k(B encode $B$O!"2C;;%G!<%?$N%W%m%;%C%54V$NDL?.$r(B
[p(15,8),p(16,8),p(17,8),p(17,8),p(18,8),p(19,8)]$B$H$$$&7A<0$G$O$J$/(B
e(8,[15,16,17,17,18,19])$B$H$$$&7A<0$G9T$&$3$H$K$h$C$F!">iD9@-$r8:$i$9$N$K(B
$B$bLrN)$C$F$$$k!#(B


$B#2!"Ii2YJ,;6(B

$B7W;;Cf$K=P8=$9$k$G$"$m$&%G!<%?$NJP$j$r!"$G$-$k$@$16I=jE*$JDL?.$G2r7h$7$h(B
$B$&$H!"35MW$N#4$G=R$Y$?$h$&$J!"<u$1;}$ANN0h$NF0E*$JJQ99$r<B8=$7$?!#$7$+$7!"(B
$B$=$N%;%k$N2t$,>o$K0\F0$7$F$$$k$h$&$J>l9g!"NN0h$NJQ99$KM>7W$JDL?.$,5/$3$k(B
$B$@$1$G5U8z2L$G$"$k$3$H$,$o$+$C$?$N$G!"JQ99$r9T$&@$Be4V3V$rBg$-$/$7$F$"$^(B
$B$jF0$+$J$$Bg$-$J%;%k$@$1$,!"$3$l$NBP>]$H$J$k$h$&$K$7$?!#(B
