10 poke 53280,0: poke 53281,0
20 print chr$(31) chr$(147)
30 dim A(390),Q(390),X(390),Y(390)
40 dim H(4,3,2,2),F(3,3)
50 dim C(999),E(255)
60 dim B(11),G(10),V(3),W(3)
70 dim S(3),D(3),I(3),N(1)
100 for n=0 to 3: read V(n),W(n): next
110 for n=0 to 3: read D(n),S(n): next
120 for n=0 to 10: read G(n): next
130 for v=0 to 4
140 for w=0 to 3: read E$: n=0
150 for y=0 to 2
160 for x=0 to 2: n=n+1
170 H(v,w,y,x)=asc(mid$(E$,n))-48
180 next x,y,w,v
190 F(0,1)=2: F(1,0)=2: F(1,3)=1
200 F(2,1)=3: F(3,0)=3: F(3,2)=1
210 E(29)=1: E(157)=2: E(17)=3: E(145)=4
220 I(0)=1: I(1)=-1: I(2)=40: I(3)=-40
230 B(10)=38: B(11)=-38
300 for y=0 to 24: read E$
310 v=40*y: w=v+39
320 for x=1 to 20
330 a=asc(mid$(E$,x))-49
340 if a<0 then n=224: goto 420
350 c=c+2: n=81
360 C(v)=c-1: C(w)=c
370 a(c-1)=a: A(c)=G(a)
380 X(c-1)=x-1: X(c)=40-x
390 Y(c-1)=y: Y(c)=y
400 Q(c-1)=55296+v: Q(c)=55296+w
410 poke Q(c-1),0: poke Q(c),0
420 poke 1024+v,n: poke 1024+w,n
430 v=v+1: w=w-1
440 next x,y
450 N(1)=29: c=778
500 x=X(C(c)): y=Y(C(c))
510 for n=0 to 3: e=S(n)
520 if e=C goto 520
530 a=A(C(e)): if a>8 goto 600
540 if a<4 then D(n)=F(a,D(n)): goto 600
550 v=sgn(Y(C(e))-y)*V(n)+1
560 w=sgn(X(C(e))-x)*W(n)+1
570 D(n)=H(a-4,D(n),v,w)
600 poke Q(C(e)),0
610 e=e+I(D(n)): e=e+B(A(C(e))): S(n)=e
620 poke Q(C(e)),n+2
630 if e=c goto 630
640 next
700 n=0
710 get E$: if E$<>"" then N(0)=asc(E$): goto 710
720 e=E(N(n)): if e then e=c+I(e-1)
730 if C(e)+n=0 then n=1: goto 720
740 if C(e)=0 goto 500
750 poke Q(C(c)),0
760 c=e+B(A(C(e))): N(1)=N(n)
770 poke Q(C(c)),1
780 goto 500
800 data 1,1,1,-1,-1,1,-1,-1
810 data 0,416,0,418,1,422,1,424
820 data 1,0,3,2,5,4,6,7,8,9,11
900 data "000000000","222222333"
910 data "022022022","033033033"
920 data "222222333","000000000"
930 data "221221221","331331331"
940 data "222000000","222111111"
950 data "000000000","001001001"
960 data "000000333","111111333"
970 data "001001001","000000000"
980 data "222000333","222111333"
990 data "021021021","031031031"
1000 data "00000000000000000000"
1010 data "01::::::7::::::::200"
1020 data "0:000000:00000000:00"
1030 data "0:000000:00000000:00"
1040 data "05::::::9:::7::::8::"
1050 data "0:000000:000:0000000"
1060 data "03::::::60003::::200"
1070 data "00000000:00000000:00"
1080 data "00000000:0001::::8:2"
1090 data "00000000:000:000000:"
1100 data "00000000:000:01::::4"
1110 data ";:::::::9:::60:00000"
1120 data "00000000:000:03:::::"
1130 data "00000000:000:0000000"
1140 data "00000000:0005:::::::"
1150 data "00000000:000:0000000"
1160 data "01::::::9:::8::::200"
1170 data "0:000000:00000000:00"
1180 data "0:000000:00000000:00"
1190 data "03::20005:::7::::8::"
1200 data "0000:000:000:0000000"
1210 data "01::8:::40003::::200"
1220 data "0:000000000000000:00"
1230 data "03:::::::::::::::8::"
1240 data "00000000000000000000"