素数を計算するオートマトンを実装してみた

先日のWEB+DB PRESS Vol.70で和田先生が紹介されていた素数を計算するオートマトン、面白そうだったので僕も実装してみた。

まずは出力結果から。一番左端が空白(状態0)であるとき、それは素数。最初は0〜Fを使っていたんだけどもアスキーアート的にした方が面白いのでこれでw

   米 1≫                    
 1/: 1\>                   
 2 :ノ2\≫                   
 3 米\3\≫>                  
 4/:ノ② \>                  
 5 米\①  ≫                  
 6/:ノ米\ ≫>                 
 7 米/: ノ≫>                 
 8/米ノ:ノ |>                 
 9/米\米\ |≫                 
10/:ノ: ノ|≫>                
11 米 :ノ ・≫>                
12/:ノ米\ ・\>                
13 米/: ノ・\≫                
14/米ノ:ノ 1\≫>               
15/米\米\ 2\\>               
16/:ノ: ノ3\\≫               
17 米 :ノ ② \≫>              
18/:ノ米\ ①  \>              
19 米/: ノ米\  ≫              
20/米ノ:ノ/: \ ≫>             
21/米\米X :  ノ≫>             
22/:ノ米 ノ: ノ |>             
23 米/:ノ :ノ  |≫             
24/米ノ米\ 米\  |≫>            
25/米/: ノ: \ |≫>            
26/米ノ:ノ :  ノ|≫>            
27/米\米\ : ノ ・≫>            
28/:ノ: ノ:ノ  ・\>            
29 米 :ノ 米\  ・\≫            
30/:ノ米\/: \ ・\≫>           
31 米/:/ノ:  ノ・\\>           
32/米ノ米ノ : ノ 1\\≫           
33/米/米\ :ノ  2\\≫>          
34/米ノ: ノ米\  3\\\>          
35/米\:ノ/: \ 3 \\≫          
36/:ノ米X :  ノ3  \≫>         
37 米/米 ノ: ノ ②   \>         
38/米ノ:ノ :ノ  ①    ≫         
39/米\米\ 米\  米\   ≫>        
40/:ノ: ノ: \/: \  ≫>        
41 米 :ノ : /ノ:  \ ≫>        
42/:ノ米\ :/ノ :   ノ≫>        
43 米/: ノ米ノ  :  ノ |>        
44/米ノ:ノ/米\  : ノ  |≫        
45/米\米X/: \ :ノ   |≫>       
46/:ノ米/ノ:  ノ米\   |≫>       
47 米/米ノ : ノ/: \  |≫>       
48/米ノ米\ :ノ/ :  \ |≫>       
49/米/: ノ米X  :   ノ|≫>       
50/米ノ:ノ/米 \ :  ノ ・≫>       
51/米\米X/:  ノ: ノ  ・\>       
52/:ノ米/ノ: ノ :ノ   ・\≫       
53 米/米ノ :ノ  米\   ・\≫>      
54/米ノ米\ 米\ /: \  ・\\>      
55/米/: ノ: X :  \ ・\\≫      
56/米ノ:ノ :/ ノ:   ノ・\\≫>     
57/米\米\ 米 ノ :  ノ 1\\\>     
58/:ノ: ノ:ノ  : ノ  2\\\≫     
59 米 :ノ 米\  :ノ   3\\\≫>    
60/:ノ米\/: \ 米\   3 \\\>    
61 米/:/ノ:  ノ: \  3  \\≫    
62/米ノ米ノ : ノ :  \ 3   \≫>   
63/米/米\ :ノ  :   ノ3    \>   
64/米ノ: ノ米\  :  ノ ②     ≫   
65/米\:ノ/: \ : ノ  ①     ≫>  
66/:ノ米X :  ノ:ノ   米\    ≫>  
67 米/米 ノ: ノ 米\  /: \   ≫>  
68/米ノ:ノ :ノ /: \/ :  \  ≫>  
69/米\米\ 米\/ : /\ :   \ ≫>  
70/:ノ: ノ:/\ :/  ノ:    ノ≫>  

実装はこんな感じ。 https://github.com/nishio/automaton/blob/master/ca.py