離散的計算モデルElementary Cellular Automaton(ECA)の計算

注意事項

このサイト内で公開していることがらについて
使用や利用によるいかなる損失に対しても責任を負いませんのでご了承ください。
著作物に関する著作権について
原則としてすべて運営者(EponaLab)にあります。

概要

  • 離散的計算モデルであるElementary Cellular Automaton(ECA)の計算を行います。

ソースコード


program ECA(input, output);
{Elementary Cellular Automaton}
const len = 25;

procedure main;
var seed, i, j, k : integer;
    tr : array [0..1, 0..1, 0..1] of integer;
    w, tmp : array [-len*2 .. len*2] of integer;
begin
    {パターンの種を読み込む}
    writeln('Input Seed number (0 - 256)');
    write('Seed = ');
    readln(seed);

    {変換パターンの作成}
    {seedを2進数展開する}
    for i := 0 to 1 do
        for j := 0 to 1 do
            for k := 0 to 1 do
            begin
                tr[i,j,k] := seed mod 2;
                seed := seed div 2
            end;

    {変換パターンの出力}
    for i := 0 to 1 do
        for j := 0 to 1 do
            for k := 0 to 1 do
                writeln('tr[', i, ',', j, ',', k, '] = ', tr[i,j,k]);

    {列の初期化}
    for i := -len*2 to len*2 do
        w[i] := 0;
    w[0] := 1;

    {初期列の書き出し}
    for k := -len to len do
        if w[k] = 1 then
            write('#')
        else
            write(' ');
    writeln;

    {パターンによる変換と書き出し}
    for i:= 1 to len do
    begin
        {変換}
        for j := -len*2+i to len*2-i do
            tmp[j] := tr[w[j-1], w[j], w[j+1]];
        w := tmp;

        {出力}
        for k := -len to len do
        if w[k] = 1 then
            write('#')
        else
            write(' ');
        writeln
    end
end;

begin
    main
end.
                

実行結果1(ルール30)


$ CalcECA
Input Seed number (0 - 256)
Seed = 30
tr[0,0,0] = 0
tr[0,0,1] = 1
tr[0,1,0] = 1
tr[0,1,1] = 1
tr[1,0,0] = 1
tr[1,0,1] = 0
tr[1,1,0] = 0
tr[1,1,1] = 0
                         #                         
                        ###                        
                       ##  #                       
                      ## ####                      
                     ##  #   #                     
                    ## #### ###                    
                   ##  #    #  #                   
                  ## ####  ######                  
                 ##  #   ###     #                 
                ## #### ##  #   ###                
               ##  #    # #### ##  #               
              ## ####  ## #    # ####              
             ##  #   ###  ##  ## #   #             
            ## #### ##  ### ###  ## ###            
           ##  #    # ###   #  ###  #  #           
          ## ####  ## #  # #####  #######          
         ##  #   ###  #### #    ###      #         
        ## #### ##  ###    ##  ##  #    ###        
       ##  #    # ###  #  ## ### ####  ##  #       
      ## ####  ## #  ######  #   #   ### ####      
     ##  #   ###  ####     #### ### ##   #   #     
    ## #### ##  ###   #   ##    #   # # ### ###    
   ##  #    # ###  # ### ## #  ### ## # #   #  #   
  ## ####  ## #  ### #   #  ####   #  # ## ######  
 ##  #   ###  ####   ## #####   # ##### #  #     # 
## #### ##  ###   # ##  #    # ## #     #####   ###
                

実行結果2(ルール50)


$ CalcECA
Input Seed number (0 - 256)
Seed = 50
tr[0,0,0] = 0
tr[0,0,1] = 1
tr[0,1,0] = 0
tr[0,1,1] = 0
tr[1,0,0] = 1
tr[1,0,1] = 1
tr[1,1,0] = 0
tr[1,1,1] = 0
                         #                         
                        # #                        
                       # # #                       
                      # # # #                      
                     # # # # #                     
                    # # # # # #                    
                   # # # # # # #                   
                  # # # # # # # #                  
                 # # # # # # # # #                 
                # # # # # # # # # #                
               # # # # # # # # # # #               
              # # # # # # # # # # # #              
             # # # # # # # # # # # # #             
            # # # # # # # # # # # # # #            
           # # # # # # # # # # # # # # #           
          # # # # # # # # # # # # # # # #          
         # # # # # # # # # # # # # # # # #         
        # # # # # # # # # # # # # # # # # #        
       # # # # # # # # # # # # # # # # # # #       
      # # # # # # # # # # # # # # # # # # # #      
     # # # # # # # # # # # # # # # # # # # # #     
    # # # # # # # # # # # # # # # # # # # # # #    
   # # # # # # # # # # # # # # # # # # # # # # #   
  # # # # # # # # # # # # # # # # # # # # # # # #  
 # # # # # # # # # # # # # # # # # # # # # # # # # 
# # # # # # # # # # # # # # # # # # # # # # # # # #
                

実行結果3(ルール90)


$ CalcECA
Input Seed number (0 - 256)
Seed = 90
tr[0,0,0] = 0
tr[0,0,1] = 1
tr[0,1,0] = 0
tr[0,1,1] = 1
tr[1,0,0] = 1
tr[1,0,1] = 0
tr[1,1,0] = 1
tr[1,1,1] = 0
                         #                         
                        # #                        
                       #   #                       
                      # # # #                      
                     #       #                     
                    # #     # #                    
                   #   #   #   #                   
                  # # # # # # # #                  
                 #               #                 
                # #             # #                
               #   #           #   #               
              # # # #         # # # #              
             #       #       #       #             
            # #     # #     # #     # #            
           #   #   #   #   #   #   #   #           
          # # # # # # # # # # # # # # # #          
         #                               #         
        # #                             # #        
       #   #                           #   #       
      # # # #                         # # # #      
     #       #                       #       #     
    # #     # #                     # #     # #    
   #   #   #   #                   #   #   #   #   
  # # # # # # # #                 # # # # # # # #  
 #               #               #               # 
# #             # #             # #             # #
                

実行結果4(ルール110)


$ CalcECA
Input Seed number (0 - 256)
Seed = 110
tr[0,0,0] = 0
tr[0,0,1] = 1
tr[0,1,0] = 1
tr[0,1,1] = 1
tr[1,0,0] = 0
tr[1,0,1] = 1
tr[1,1,0] = 1
tr[1,1,1] = 0
                         #                         
                        ##                         
                       ###                         
                      ## #                         
                     #####                         
                    ##   #                         
                   ###  ##                         
                  ## # ###                         
                 ####### #                         
                ##     ###                         
               ###    ## #                         
              ## #   #####                         
             #####  ##   #                         
            ##   # ###  ##                         
           ###  #### # ###                         
          ## # ##  ##### #                         
         ######## ##   ###                         
        ##      ####  ## #                         
       ###     ##  # #####                         
      ## #    ### ####   #                         
     #####   ## ###  #  ##                         
    ##   #  ##### # ## ###                         
   ###  ## ##   ######## #                         
  ## # ######  ##      ###                         
 #######    # ###     ## #                         
##     #   #### #    #####