A Appendix: PROTOBIO
A.2 English Translation
Dec 16 12:13 1996 exp29.for Page 1
1 C EXPERIMENTO 29
2 INTEGER*2 HAB(30,30),REL(30,30),MOV2(30,30)
3 INTEGER B(8)/'.','-','+', '*',' ',' ',' ','@'/
4 INTEGER ESC(30,30)
5 INTEGER*2 P8X(10),P8Y(10)
6 INTEGER XMAX,YMAX
7 INTEGER*2 DM,VID1,VID2,VID3,VID4,VID8,DT,TMAX,TESC,T
8 INTEGER*2 XHR1,XHR2,YHR1,YHR2,X,Y
9 INTEGER*2 XH1,XH2,YH1,YH2
10 INTEGER*2 X8,Y8,D1,D2,D,X81,X82,X83,Y81,Y82,X8A,Y8A,XPF8,YPF8
11 INTEGER*2 XPF0,YPF0
12 INTEGER*2 X1,Y1,X11,X12,X13,Y11,Y12,X1A,Y1A
13 INTEGER*2 X2,Y2,XD2,YD2,XD21,YD21,XPF2,YPF2,X21,X22,X23,Y21,Y22
14 INTEGER*2 X2A,Y2A,C2,XPFA2,YPFA2,C23,C24
15 INTEGER*2 X3,Y3,C3,X31,X32,X33,Y31,Y32,X3A,Y3A
16 INTEGER*2 X4,Y4,C4,X41,X42,X43,Y41,Y42,X4A,Y4A
17 INTEGER VMIN4,VMAX4
18 XMAX=30
19 YMAX=30
20 VID1=3
21 VID2=60
22 VID3=30
23 VMIN4=5
24 VMAX4=50
25 VID8=300
26 MIDX2=-1
27 MADX2=1
28 MIDY2=-1
29 MADY2=1
30 NMAX2=8
31 MIDX8=-1
32 MADX8=1
33 MIDY8=-1
34 MADY8=1
35 MIX8=8
36 MAX8=23
37 MIY8=8
38 MAY8=23
39 N1=0
40 NUM1=0
41 NUM8=4
42 P8X(1)=20
43 P8Y(1)=10
44 P8X(2)=10
45 P8Y(2)=10
46 P8X(3)=20
47 P8Y(3)=20
48 P8X(4)=10
49 P8Y(4)=20
50 N8=0
Dec 16 12:13 1996 exp29.for Page 2 51 DT=1 52 TESC=DT 53 TMAX=300 54 T=1 55 NIM1=735 56 NAL1=NAL(0,0,NIM1) 57 C 58 C ********************************************************************** 59 C 60 C HACER UNO HAB(X,Y),REL(X,Y) Y MOV2(X,Y) 61 1000 XHR1=1 62 XHR2=XMAX 63 YHR1=1 64 YHR2=YMAX 65 DO 1020 Y=YHR1,YHR2 66 DO 1010 X=XHR1,XHR2 67 HAB(X,Y)=1 68 REL(X,Y)=1 69 MOV2(X,Y)=0 70 1010 CONTINUE 71 1020 CONTINUE 72 C 73 C ********************************************************************** 74 C 75 C UBICAR LOS 8'S 76 DO 1810 I=1,NUM8 77 X=P8X(I) 78 Y=P8Y(I) 79 HAB(X,Y)=8 80 REL(X,Y)=VID8 81 1810 CONTINUE 82 C 83 C ********************************************************************** 84 C 85 C ADVANCE DEL PELOJ 86 1800 CONTINUE 87 DO 1720 Y=1,YMAX 88 DO 1710 X=1,XMAX 89 IF(HAB(X,Y).EQ.1) GO TO 1705 90 IF(HAB(X,Y).EQ.0) GO TO 1703 91 IF(REL(X,Y).NE.0)REL(X,Y)=REL(X,Y)-1 92 C DETECTAR SI HAY ELEMENTOS QUE DEBEN DECAER 0 1'S QUE DEBEN MOVERSE 93 IF(REL(X,Y).GT.0) GO TO 1705 94 IF(HAB(X,Y).EQ.2) NUM1=NUM1+1 95 IF(HAB(X,Y).EQ.3) NUM1=NUM1+1 96 IF(HAB(X,Y).EQ.4) NUM1=NUM1+1 97 HAB(X,Y)=1 98 REL(X,Y)=1 99 GO TO 1705 100 1703 CONTINUE
Dec 16 12:13 1996 exp29.for Page 3 101 C MOVIMIENTO DE LOS 1'S (MEDIANTE MOVIENTO DE LOS 0'S) 102 XPF0=NAL(1,XMAX,0) 103 YPF0=NAL(1,YMAX,0) 104 IF(HAB(XPF0,YPF0).NE.1) GO TO 1710 105 HAB(X,Y)=1 106 REL(X,Y)=1 107 IF(NUM1.GT.0) GO TO 1702 108 HAB(XPF0,YPF0)=0 109 REL(XPF0,YPF0)=0 110 GO TO 1710 111 1702 NUM1=NUM1-1 112 GO TO 1710 113 1705 CONTINUE 114 1710 CONTINUE 115 1720 CONTINUE 116 NUM1A=NUM1 117 1100 CONTINUE 118 C 119 C ********************************************************************** 120 C 121 C MOVIMIENTO DE LOS 8'S 122 1200 CONTINUE 123 DO 1820 I=1,NUM8 124 X=P8X(I) 125 Y=P8Y(I) 126 NAX8=NAL(MIDX8,MADX8,0) 127 NAY8=NAL(MIDY8,MADY8,0) 128 XPF8=X+NAX8 129 YPF8=Y+NAY8 130 IF(HAB(XPF8,YPF8).NE.1) GO TO 1820 131 IF((HAB(XPF8,Y).EQ.4).AND.(HAB(X,YPF8).EQ.4)) GO TO 1820 132 IF((XPF8.LT.MIX8).OR.(XPF8.GT.MAX8)) GO TO 1820 133 IF((YPF8.LT.MIY8).OR.(YPF8.GT.MAY8)) GO TO 1820 134 HAB(X,Y)=1 135 HAB(XPF8,YPF8)=8 136 REL(XPF8,YPF8)=REL(X,Y) 137 REL(X,Y)=1 138 P8X(I)=XPF8 139 P8Y(I)=YPF8 140 1820 CONTINUE 141 C 142 C ********************************************************************** 143 C 144 1821 CONTINUE 145 C RECORRER HAB(X,Y) 146 XH1=1 147 XH2=XMAX 148 YH1=1 149 YH2=YMAX 150 DO 1220 Y=YH1,YH2
Dec 16 12:13 1996 exp29.for Page 4 151 DO 1210 X=XH1,XH2 152 IF(HAB(X,Y).EQ.0) GO TO 1210 153 IF(HAB(X,Y).EQ.1) GO TO 1210 154 IF(HAB(X,Y).EQ.2) GO TO 200 155 IF(HAB(X,Y).EQ.3) GO TO 300 156 IF(HAB(X,Y).EQ.4) GO TO 400 157 IF(HAB(X,Y).EQ.8) GO TO 1 158 GO TO 2990 159 C 160 C ********************************************************************** 161 C 162 C ELEMENTO 8 163 1 X8=X 164 Y8=Y 165 C RECORRER EL ENTORNO DE ESTE 8 166 D=1 167 X81=X8-D 168 X82=X8+D 169 Y81=Y8-D 170 Y82=Y8+D 171 DO 20 Y8A=Y81,Y82 172 X83=2 173 IF((Y8A.EQ.(Y8-D)).OR.(Y8A.EQ.(Y8+D))) X83=1 174 DO 10 X8A=X81,X82,X83 175 IF(HAB(X8A,Y8A).EQ.0) GO TO 10 176 IF(HAB(X8A,Y8A).EQ.1) GO TO 3 177 GO TO 10 178 3 IF((HAB(X8A,Y8).EQ.4).AND.(HAB(X8,Y8A).EQ.4)) GO TO 10 179 GO TO 100 180 C 181 C ********************************************************************** 182 C 183 C ELEMENTO 1 184 100 X1=X8A 185 Y1=Y8A 186 IF(D.NE.1) GO TO 10 187 C RECORRER EL ENTORNO DE ESTE 1 188 X11=X1-1 189 X12=X1+1 190 Y11=Y1-1 191 Y12=Y1+1 192 DO 120 Y1A=Y11,Y12 193 X13=1 194 IF(Y1A.EQ.Y1) X13=2 195 DO 110 X1A=X11,X12,X13 196 IF(HAB(X1A,Y1A).NE.1) GO TO 110 197 IF((HAB(X1A,Y1).EQ.4).AND.(HAB(X1,Y1A).EQ.4)) GO TO 110 198 HAB(X1A,Y1A)=2 199 REL(X1A,Y1A)=VID2 200 HAB(X1,Y1)=0
Dec 16 12:13 1996 exp29.for Page 5 201 REL(X1,Y1)=0 202 GO TO 10 203 110 CONTINUE 204 120 CONTINUE 205 10 CONTINUE 206 20 CONTINUE 207 GO TO 1210 208 C 209 C ********************************************************************** 210 C 211 C ELEMENTO 2 212 200 X2=X 213 Y2=Y 214 C TRANSFORMACION DE ESTE 2 215 208 C2=0 216 C23=0 217 C24=0 218 C RECORRER EL ENTORNO DE ESTE 2 219 X21=X2-1 220 X22=X2+1 221 Y21=Y2-1 222 Y22=Y2+1 223 DO 220 Y2A=Y21,Y22 224 X23=1 225 IF(Y2A.EQ.Y2) X23=2 226 DO 210 X2A=X21,X22,X23 227 IF(HAB(X2A,Y2A).EQ.2) C2=C2+1 228 IF(HAB(X2A,Y2A).EQ.3) C23=1 229 IF(HAB(X2A,Y2A).EQ.4) C24=C24+1 230 210 CONTINUE 231 220 CONTINUE 232 C SI NO HAY MAS DE UN 4 Y HAY UN 2 O UNO O MAS 3'S, ESTE 2 SE TRANSFORMA 233 IF(.NOT.((C24.LE.1).AND.((C2.EQ.1).OR.(C23.EQ.1)))) GO TO 221 234 HAB(X2,Y2)=3 235 REL(X2,Y2)=VID3 236 GO TO 1210 237 C MOVIMIENTO DE ESTE 2 238 221 N2=0 239 IF(MOV2(X2,Y2).NE.1) GO TO 223 240 MOV2(X2,Y2)=0 241 GO TO 1210 242 223 NAX2=NAL(MIDX2,MADX2,0) 243 NAY2=NAL(MIDY2,MADY2,0) 244 XPF2=X2+NAX2 245 YPF2=Y2+NAY2 246 IF((HAB(XPF2,YPF2).EQ.4).OR.(HAB(XPF2,YPF2).EQ.3)) GO TO 223 247 IF((XPF2.LT.2).OR.(XPF2.GT.(XMAX-1))) GO TO 1210 248 IF((YPF2.LT.2).OR.(YPF2.GT.(YMAX-1))) GO TO 1210 249 IF((HAB(XPF2,Y2).EQ.4).AND.(HAB(X2,YPF2).EQ.4)) GO TO 205 250 IF(HAB(XPF2,YPF2).EQ.1) GO TO 203
Dec 16 12:13 1996 exp29.for Page 6 251 205 N2=N2+1 252 IF(N2.GE.NMAX2) GO TO 1210 253 GO TO 223 254 203 HAB(X2,Y2)=1 255 HAB(XPF2,YPF2)=2 256 REL(XPF2,YPF2)=REL(X2,Y2) 257 REL(X2,Y2)=1 258 IF((XPF2.GT.X2).OR.(YPF2.GT.Y2)) MOV2(XPF2,YPF2)=1 259 GO TO 1210 260 C 261 C ********************************************************************** 262 C 263 C ELEMENTO 3 264 300 X3=X 265 Y3=Y 266 C RECORRER EL ENTORNO DE ESTE 3 267 C MOLINETE SINISTROGIRO 268 X31=X3+1 269 Y31=Y3+1 270 C3=0 271 MAR3=0 272 IF((HAB(X31,Y31).EQ.3).OR.(HAB(X31,Y31).EQ.4)) MAR3=1 273 305 CONTINUE 274 X3A=X31 275 Y3A=Y31 276 IF((X31.GE.X3).AND.(Y31.LT.Y3)) X3A=X31-1 277 IF((X31.LE.X3).AND.(Y31.GT.Y3)) X3A=X31+1 278 IF((Y31.LE.Y3).AND.(X31.LT.X3)) Y3A=Y31+1 279 IF((Y31.GE.Y3).AND.(X31.GT.X3)) Y3A=Y31-1 280 X31=X3A 281 Y31=Y3A 282 IF((.NOT.((HAB(X31,Y31).EQ.3).OR.(HAB(X31,Y31).EQ.4))) 283 2.AND.(MAR3.EQ.1)) C3=C3+1 284 IF(((HAB(X31,Y31).EQ.3).OR.(HAB(X31,Y31).EQ.4)).AND.(C3.EQ.0)) 285 2 MAR3=1 286 IF(((HAB(X31,Y31).EQ.3).OR.(HAB(X31,Y31).EQ.4)).AND.(C3.GT.0)) 287 2 MAR3=0 288 IF(.NOT.((C3.GT.0).AND.(C3.LT.6).AND.(MAR3.EQ.0))) GO TO 307 289 C TRANSFORMACION DE ESTE 3 EN 4 290 HAB(X3,Y3)=4 291 REL(X3,Y3)=NAL(VMIN4,VMAX4,0) 292 GO TO 1210 293 307 CONTINUE 294 IF((X31.EQ.X3).AND.(Y31.EQ.(Y3+1))) GO TO 1210 295 GO TO 305 296 C 297 C ********************************************************************** 298 C 299 C ELEMENTO 4 300 400 X4=X
Dec 16 12:13 1996 exp29.for Page 7
301 Y4=Y
302 C RECORRER EL ENTORNO DE ESTE 4
303 C MOLINETE SINISTROGIRO
304 X41=X4+1
305 Y41=Y4+1
306 C4=0
307 MAR4=0
308 IF((HAB(X41,Y41).EQ.4).OR.(HAB(X41,Y41).EQ.3)) MAR4=1
309 405 CONTINUE
310 X4A=X41
311 Y4A=Y41
312 IF((X41.GE.X4).AND.(Y41.LT.Y4)) X4A=X41-1
313 IF((X41.LE.X4).AND.(Y41.GT.Y4)) X4A=X41+1
314 IF((Y41.LE.Y4).AND.(X41.LT.X4)) Y4A=Y41+1
315 IF((Y41.GE.Y4).AND.(X41.GT.X4)) Y4A=Y41-1
316 X41=X4A
317 Y41=Y4A
318 IF((.NOT.((HAB(X41,Y41).EQ.3).OR.(HAB(X41,Y41).EQ.4)))
319 2.AND.(MAR4.EQ.1)) C4=C4+1
320 IF(((HAB(X41,Y41).EQ.3).OR.(HAB(X41,Y41).EQ.4)).AND.(C4.EQ.0))
321 2 MAR4=1
322 IF(((HAB(X41,Y41).EQ.3).OR.(HAB(X41,Y41).EQ.4)).AND.(C4.GT.0))
323 2 MAR4=0
324 IF((C4.GT.0).AND.(C4.LT.6).AND.(MAR4.EQ.0)) GO TO 1210
325 IF((X41.EQ.X4).AND.(Y41.EQ.(Y4+1)))GO TO 408
326 GO TO 405
327 408 CONTINUE
328 C TRANSFORMACION DE ESTE 4 EN 3
329 HAB(X4,Y4)=3
330 REL(X4,Y4)=VID3
331 GO TO 1210
332 C
333 C **********************************************************************
334 C
335 1210 CONTINUE
336 1220 CONTINUE
337 C
338 C **********************************************************************
339 C
340 C ESCRIBIR HAB(X,Y)
341 2000 CONTINUE
342 IF(TESC.LT.DT) GO TO 2100
343 TESC=0
344 WRITE(3,2052) NUM1A,T
345 2052 FORMAT('1',///,15X,'NUM1=',I5,45X,'T=',I5,///)
346 DO 2020 Y=1,YMAX
347 DO 2010 X=1,XMAX
348 NN=HAB(X,Y)
349 IF(NN.NE.0) GO TO 2005
350 ESC(X,Y)=B(7)
Dec 16 12:13 1996 exp29.for Page 8
351 GO TO 2010
352 2005 ESC(X,Y)=B(NN)
353 2010 CONTINUE
354 2020 CONTINUE
355 WRITE(3,2092) ((ESC(X,Y),X=1,XMAX),Y=1,YMAX)
356 2092 FORMAT(' ',50X,30A1)
357 C
358 C **********************************************************************
359 C
360 C AVANCE DEL TIEMPO
361 2100 IF(T.GE.TMAX) GO TO 3000
362 T=T+1
363 TESC=TESC+1
364 GO TO 1800
365 2990 WRITE(3,2992)
366 2992 FORMAT('0',///,3X,'ELEMENTO DESCONOCIDO',//)
367 3000 STOP
368 END
Nov 14 16:15 1996 nal.for Page 1
1 INTEGER FUNCTION NAL (LO, HI, SALT)
2 INTEGER LO, HI, SALT
3 INTEGER SEED
4 IF (SALT.NE.0) SEED=SALT
5 NAL = LO + INT((RAN(SEED) * FLOAT(HI-LO)) + 0.5)
6 RETURN
7 END
A Appendix: PROTOBIO
A.2 English Translation
Copyright © 1997 All Rights Reserved.
Timestamp: Tue Dec 31 18:43:32 GMT 1996