117 lines
1.7 KiB
Batchfile
117 lines
1.7 KiB
Batchfile
@echo off
|
|
setlocal enabledelayedexpansion
|
|
|
|
if "%1"=="" (
|
|
call:default
|
|
) else (
|
|
call:setargs %*
|
|
)
|
|
|
|
call:createarray
|
|
call:fillarray
|
|
call:display
|
|
echo.
|
|
echo -------------------
|
|
echo.
|
|
|
|
for /l %%i in (1,1,%i%) do (
|
|
echo.
|
|
echo -------------------
|
|
echo.
|
|
call:evolve
|
|
call:display
|
|
)
|
|
pause>nul
|
|
|
|
:default
|
|
set m=10
|
|
set n=11
|
|
set p=50
|
|
set f=5
|
|
set i=5
|
|
exit /b
|
|
|
|
:setargs
|
|
set m=%1
|
|
set n=%m%+1
|
|
set p=%2
|
|
set f=%3
|
|
set i=%4
|
|
exit /b
|
|
|
|
:createarray
|
|
for /l %%m in (0,1,%n%) do (
|
|
for /l %%n in (0,1,%n%) do (
|
|
set a%%m%%n=0
|
|
)
|
|
)
|
|
exit /b
|
|
|
|
:fillarray
|
|
for /l %%m in (1,1,%m%) do (
|
|
for /l %%n in (1,1,%m%) do (
|
|
set /a treerandom=!random! %% 101
|
|
if !treerandom! leq %p% set a%%m%%n=T
|
|
)
|
|
)
|
|
exit /b
|
|
|
|
:display
|
|
for /l %%m in (1,1,%m%) do (
|
|
set "line%%m="
|
|
for /l %%n in (1,1,%m%) do (
|
|
set line%%m=!line%%m! !a%%m%%n!
|
|
)
|
|
set line%%m=!line%%m:0= !
|
|
echo.!line%%m!
|
|
)
|
|
exit /b
|
|
|
|
:evolve
|
|
for /l %%m in (1,1,%m%) do (
|
|
for /l %%n in (1,1,%m%) do (
|
|
call:nexttick !a%%m%%n! %%m %%n
|
|
set newa%%m%%n=!errorlevel!
|
|
)
|
|
)
|
|
call:update
|
|
exit /b
|
|
|
|
:nexttick
|
|
|
|
if %1==0 (
|
|
set /a treerandom=!random! %% 101
|
|
if !treerandom! leq %p% exit /b 1
|
|
exit /b 0
|
|
)
|
|
|
|
if %1==T (
|
|
set /a lowerm=%2-1
|
|
set /a upperm=%2+1
|
|
set /a lowern=%3-1
|
|
set /a uppern=%3+1
|
|
set burn=0
|
|
for /l %%m in (!lowerm!,1,!upperm!) do (
|
|
for /l %%n in (!lowern!,1,!uppern!) do (
|
|
if !a%%m%%n!==# set burn=1
|
|
)
|
|
)
|
|
if !burn!==1 exit /b 2
|
|
|
|
set /a burnrandom=!random! %% 101
|
|
if !burnrandom! leq %f% exit /b 2
|
|
exit /b 1
|
|
)
|
|
|
|
if %1==# exit /b 0
|
|
|
|
:update
|
|
for /l %%m in (1,1,%m%) do (
|
|
for /l %%n in (1,1,%m%) do (
|
|
if !newa%%m%%n!==1 set newa%%m%%n=T
|
|
if !newa%%m%%n!==2 set newa%%m%%n=#
|
|
set a%%m%%n=!newa%%m%%n!
|
|
)
|
|
)
|
|
exit /b
|