DECLARE SUB rndNumbers () DIM SHARED cellStatus(1000) DIM SHARED newCellStatus(1000) RANDOMIZE TIMER OPEN "c:\rndBits.txt" FOR OUTPUT AS #1 SCREEN 8 WINDOW (-133, 0)-(133, 100) INPUT "number of rule: ", ruleNbr nbr = ruleNbr FOR i = 1 TO 8 remainder = INT(2 * (nbr / 2 - INT(nbr / 2) + .001)) nbr = INT((nbr + .001) / 2) rule(i) = remainder NEXT FOR i = 8 TO 1 STEP -1: PRINT rule(i); : NEXT FOR i = 1 TO 1000 cellStatus(i) = 0: IF RND > .5 THEN cellStatus(i) = 1 NEXT FOR stepNumber = 1 TO 1000000 LOCATE 1, 1: PRINT stepNumber FOR cellNumber = 2 TO 999 configuration = cellStatus(cellNumber - 1) * 2 ^ 2 + cellStatus(cellNumber) * 2 ^ 1 + cellStatus(cellNumber + 1) * 2 ^ 0 newCellStatus(cellNumber) = rule(configuration) 'PRINT "cells"; : FOR i = -1 TO 1: PRINT cellStatus(cellNumber + i); : NEXT 'PRINT "config, rule gives"; configuration, rule(configuration) 'INPUT xq 'LINE (cellNumber - 500, stepNumber)-(cellNumber - 500 + 1, stepNumber + 1), newCellStatus(cellNumber), BF rndCount = rndCount + 1 'IF stepNumber > 100 THEN CALL randomNumbers CALL rndNumbers NEXT FOR cellNumber = 1 TO 1000: cellStatus(cellNumber) = newCellStatus(cellNumber): NEXT NEXT SUB rndNumbers SHARED rndCount, cellNumber, firstDigit, secondDigit PRINT #1, newCellStatus(cellNumber) SELECT CASE rndCount CASE IS < 4: firstDigit = firstDigit + newCellStatus(cellNumber) * 2 ^ (rndCount MOD 3) CASE ELSE: secondDigit = secondDigit + newCellStatus(cellNumber) * 2 ^ (rndCount MOD 3) END SELECT IF rndCount = 6 THEN PSET (-133 + 29 * (firstDigit + RND), 10 * (secondDigit + RND)) rndCount = 0 firstDigit = 0: secondDigt = 0 END IF END SUB