一次元セルオートマトンをやってみるテスト。へぼいミスで動かなかったけど、うちに帰る間に考えてたら分かった。アホすぐる。
#!/usr/bin/perl use strict; use warnings; my @list = ( 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0 ); my @newlist = &convert_for_all_cell(@list); for ( 1 .. 30 ) { print_array(@newlist); @newlist = &convert_for_all_cell(@newlist); } sub calc_three_cells { my ( $one, $two, $three ) = @_; my $count = 10 * $one + 11 * $two + 12 * $three; if ( $count == 0 or $count == 22 or $count == 21 or $count == 33 ) { $one = 0; $two = 0; $three = 0; } elsif ( $count == 12 or $count == 11 or $count == 23 or $count == 10 ) { $one = 0; $two = 1; $three = 0; } return ($two); } sub convert_for_all_cell { my @old = @_; my @newlist; my $value; for ( 1 .. $#old - 1 ) { push( @newlist, &calc_three_cells( @old[ ( $_ - 1 ), $_, ( $_ + 1 ) ] ) ); } unshift( @newlist, 0 ); push( @newlist, 0 ); return (@newlist); } sub print_array { my @array = @_; foreach (@array) { if ( $_ == 0 ) { print "○"; } else { print "●"; } } print "\n"; }
できたのはこれ。
○●●○●●●○●●○●○●○●○●○●○○●○●○●●○●●○●●○●●○●○ ○●○○●○○○●○○●○●○●○●○●●●●○●○●○○●○○●○○●○○●○ ○●●●●●○●●●●●○●○●○●○●○○○○●○●●●●●●●●●●●●●○ ○●○○○○○●○○○○○●○●○●○●●○○●●○●○○○○○○○○○○○○○ ○●●○○○●●●○○○●●○●○●○●○●●●○○●●○○○○○○○○○○○○ ○●○●○●●○○●○●●○○●○●○●○●○○●●●○●○○○○○○○○○○○ ○●○●○●○●●●○●○●●●○●○●○●●●●○○○●●○○○○○○○○○○ ○●○●○●○●○○○●○●○○○●○●○●○○○●○●●○●○○○○○○○○○ ○●○●○●○●●○●●○●●○●●○●○●●○●●○●○○●●○○○○○○○○ ○●○●○●○●○○●○○●○○●○○●○●○○●○○●●●●○●○○○○○○○ ○●○●○●○●●●●●●●●●●●●●○●●●●●●●○○○○●●○○○○○○ ○●○●○●○●○○○○○○○○○○○○○●○○○○○○●○○●●○●○○○○○ ○●○●○●○●●○○○○○○○○○○○●●●○○○○●●●●●○○●●○○○○ ○●○●○●○●○●○○○○○○○○○●●○○●○○●●○○○○●●●○●○○○ ○●○●○●○●○●●○○○○○○○●●○●●●●●●○●○○●●○○○●●○○ ○●○●○●○●○●○●○○○○○●●○○●○○○○○○●●●●○●○●●○●○ ○●○●○●○●○●○●●○○○●●○●●●●○○○○●●○○○○●○●○○●○ ○●○●○●○●○●○●○●○●●○○●○○○●○○●●○●○○●●○●●●●○ ○●○●○●○●○●○●○●○●○●●●●○●●●●●○○●●●●○○●○○○○ ○●○●○●○●○●○●○●○●○●○○○○●○○○○●●●○○○●●●●○○○ ○●○●○●○●○●○●○●○●○●●○○●●●○○●●○○●○●●○○○●○○ ○●○●○●○●○●○●○●○●○●○●●●○○●●●○●●●○●○●○●●●○ ○●○●○●○●○●○●○●○●○●○●○○●●●○○○●○○○●○●○●○○○ ○●○●○●○●○●○●○●○●○●○●●●●○○●○●●●○●●○●○●●○○ ○●○●○●○●○●○●○●○●○●○●○○○●●●○●○○○●○○●○●○●○ ○●○●○●○●○●○●○●○●○●○●●○●●○○○●●○●●●●●○●○●○ ○●○●○●○●○●○●○●○●○●○●○○●○●○●●○○●○○○○○●○●○ ○●○●○●○●○●○●○●○●○●○●●●●○●○●○●●●●○○○●●○●○ ○●○●○●○●○●○●○●○●○●○●○○○○●○●○●○○○●○●●○○●○ ○●○●○●○●○●○●○●○●○●○●●○○●●○●○●●○●●○●○●●●○
何か続けていくと収束してしまう感じなんだけど、ルールとか、初期値を変えると変わってくるんかね。めんどくてやってないけど。