Advertisement
IcarusLives

Scrolling Cellular Automata v2

Mar 25th, 2017
278
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Batch 4.72 KB | None | 0 0
  1. @echo off & setlocal enableDelayedExpansion & color f0
  2.  
  3. call:canvas 100 100
  4. call:rulesets
  5.  
  6. rem Try a random ruleset
  7. REM for /l %%r in (0,1,7) do set /a "rrs=!random! %% 2" & set "ruleset=!ruleset!!rrs!,"
  8.  
  9. rem create array ruleset[]
  10. set "arr=-1" & for %%a in (%ruleset%) do ( set /a "arr+=1" & set "ruleset[!arr!]=%%a" )
  11.  
  12. rem create 2d array for our grid m[][]
  13. for /l %%i in (0,1,%width%) do for /l %%j in (0,1,%height%) do set "m[%%i][%%j]=0"
  14.    
  15.     rem place our "arbitrary" character, Line 0, "center pixel"
  16.     set /a "wd2=width/2"
  17.     set "m[!wd2!][0]=1"
  18.  
  19. rem ----------------------------------------------------------------------------------------------
  20.  
  21. rem %%j = %%jenerations.... lol
  22. for /l %%j in (0,1,%height%) do (
  23.  
  24.     rem loop through the width of the screen (each "pixel") on each line.
  25.     for /l %%i in (0,1,%width%) do (
  26.    
  27.         rem if our m[%%i][%%j] grid is a 1, plot a "#"
  28.         if !m[%%i][%%j]! equ 1 call :plot %%i %%j #
  29.        
  30.         rem Pixel left of me
  31.         set /a "_l=%%i - 1"
  32.         call set "l=%%m[!_l!][%%j]%%"
  33.        rem Pixel right of me
  34.         set /a "_r=%%i + 1"
  35.         call set "r=%%m[!_r!][%%j]%%"
  36.        rem _g = generation (%%j) + 1
  37.         set /a "_g=%%j + 1"
  38.        
  39.         if !l! equ 1 if !m[%%i][%%j]! equ 1 if !r! equ 1 set "m[%%i][!_g!]=%ruleset[0]%"
  40.         if !l! equ 1 if !m[%%i][%%j]! equ 1 if !r! equ 0 set "m[%%i][!_g!]=%ruleset[1]%"
  41.         if !l! equ 1 if !m[%%i][%%j]! equ 0 if !r! equ 1 set "m[%%i][!_g!]=%ruleset[2]%"
  42.         if !l! equ 1 if !m[%%i][%%j]! equ 0 if !r! equ 0 set "m[%%i][!_g!]=%ruleset[3]%"
  43.         if !l! equ 0 if !m[%%i][%%j]! equ 1 if !r! equ 1 set "m[%%i][!_g!]=%ruleset[4]%"
  44.         if !l! equ 0 if !m[%%i][%%j]! equ 1 if !r! equ 0 set "m[%%i][!_g!]=%ruleset[5]%"
  45.         if !l! equ 0 if !m[%%i][%%j]! equ 0 if !r! equ 1 set "m[%%i][!_g!]=%ruleset[6]%"
  46.         if !l! equ 0 if !m[%%i][%%j]! equ 0 if !r! equ 0 set "m[%%i][!_g!]=%ruleset[7]%"
  47.  
  48.     )
  49.     call :showCanvas
  50.     echo ruleset = !ruleset!
  51. )
  52. rem ----------------------------------------------------------------------------------------------!
  53. pause & exit
  54.  
  55.  
  56. :rulesets
  57.    REM set "ruleset=0,0,0,0,0,0,0,1" & rem Rule 1
  58.    REM set "ruleset=0,0,0,1,1,1,1,0" & rem Rule 30
  59.    REM set "ruleset=0,0,1,1,0,1,1,0" & rem Rule 54
  60.    REM set "ruleset=0,0,1,1,1,1,0,0" & rem Rule 60
  61.    REM set "ruleset=0,0,1,1,1,1,1,0" & rem Rule 62
  62.     set "ruleset=0,1,0,1,1,0,1,0" & rem Rule 90
  63.    REM set "ruleset=0,1,0,1,1,1,1,0" & rem Rule 94
  64.    REM set "ruleset=0,1,1,0,0,1,1,0" & rem Rule 102
  65.    REM set "ruleset=0,1,1,0,1,1,1,0" & rem Rule 110
  66.    REM set "ruleset=0,1,1,1,1,0,1,0" & rem Rule 122
  67.    REM set "ruleset=0,1,1,1,1,1,1,0" & rem Rule 126
  68.    REM set "ruleset=1,0,0,1,0,1,1,0" & rem Rule 150
  69.    REM set "ruleset=1,0,0,1,1,1,1,0" & rem Rule 158
  70.    REM set "ruleset=1,0,1,1,0,1,1,0" & rem Rule 182
  71.    REM set "ruleset=1,0,1,1,1,1,1,0" & rem Rule 188
  72.    REM set "ruleset=1,0,1,1,1,1,1,0" & rem Rule 190
  73.    REM set "ruleset=1,1,0,1,1,1,0,0" & rem Rule 220
  74.    REM set "ruleset=1,1,0,1,1,1,1,0" & rem Rule 222
  75.    REM set "ruleset=1,1,1,1,1,0,1,0" & rem Rule 250
  76.    REM set "ruleset=1,1,1,1,1,1,1,1" & rem Rule 256
  77.    REM set "ruleset=1,1,0,1,0,0,1,1" & rem Unknown Rule
  78.    REM set "ruleset=1,0,1,1,1,0,0,1" & rem Unknown Rule
  79.    REM set "ruleset=1,0,0,1,0,0,1,1" & rem Unknown Rule
  80.    REM set "ruleset=0,1,0,1,1,0,1,0" & rem Unknown Rule
  81.    REM set "ruleset=1,0,0,1,0,0,0,1" & rem Unknown Rule
  82.    REM set "ruleset=0,1,0,0,1,1,0,1" & rem Unknown Rule
  83.    REM set "ruleset=0,1,0,0,0,1,0,1" & rem Unknown Rule
  84.    REM set "ruleset=1,0,1,1,0,1,1,1" & rem Unknown Rule
  85.    REM set "ruleset=" & rem Unknown Rule
  86. goto :eof
  87.  
  88.  
  89. :canvas
  90.         set /a "width=%~1 - 1", "height=%~2 - 1", "conWidth=width + 5", "conHeight=height + 6", "_=0"
  91.         for /l %%a in (-2,1,%width%) do set "outerBuffer=!outerBuffer!#"
  92.         for /l %%a in (0,1,%width%)  do set "widthBuffer=!widthBuffer! "
  93.         call :updateCanvas
  94.         call :cursorpos
  95.         if exist "%temp%\cursorpos.exe" ( set "cls="%temp%\cursorpos.exe" 0 1" ) else ( set "cls=cls" )
  96.         mode con: cols=%conWidth% lines=%conHeight%
  97.     goto :eof
  98.    
  99.     :updateCanvas
  100.         for /l %%a in (0,1,%height%) do set "_[%%a]=%widthBuffer%"
  101.     goto :eof
  102.    
  103.     :showCanvas
  104.         %cls%
  105.         echo= %outerBuffer%
  106.         for /l %%a in (0,1,%height%) do echo= #!_[%%a]!#
  107.         echo= %outerBuffer%
  108.         if "%~1" equ "/u" for /l %%a in (0,1,%height%) do set "_[%%a]=%widthBuffer%"
  109.     goto :eof
  110. goto :eof
  111.  
  112. :plot x y
  113.     setlocal
  114.         set "c=%~3"
  115.         set /a "_y=%~2", "_x=%~1", "_x2=%~1 + 1"
  116.         (endlocal
  117.             set "_[%_y%]=!_[%_y%]:~0,%_x%!%c:~0,1%!_[%_y%]:~%_x2%!"
  118.         )
  119. goto :eof
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement