[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
回复 8# 普大喜奔


    不一样啊,num 变量不包括 dict[cells[y][x]],所以当周围的格子都是空的时候 elif num: 将不成立,cells[x][y] 的内容会维持上一轮循环的状态,所以会出现独立的细胞永垂不朽的现象
1

评分人数

TOP

回复 18# 普大喜奔


    也搞一个读入矩阵的函数嘛,我在wiki挖了好多经典的模型。

TOP

Perl版,轰炸机模型

  1. use strict;
  2. use Term::ReadKey;
  3. use Win32::Console;
  4. use Time::HiRes 'sleep';
  5. use IO::Handle;
  6. STDOUT->autoflush(1);
  7. system("mode con lines=40 cols=200");
  8. our $OUT=Win32::Console->new(STD_OUTPUT_HANDLE);
  9. $OUT->Cursor(20, 20, 99, 0);  #hide cursor
  10. my ($i, $j);
  11. our ($rows, $cols) = (40, 90);
  12. our ($mxrow, $mxcol) = ($rows-1, $cols-1);
  13. # init
  14. our @coord;
  15. my (@h, @n);
  16. my $y = 0;
  17. foreach (<DATA>) {
  18.     s/\r?\n$//;
  19.     tr/\*\./10/;
  20.     @{$h[$y++]} = ( split("", $_) );
  21. }
  22. foreach $i (0 .. $mxrow) {
  23.     foreach $j (0 .. $mxcol) {
  24.         $coord[$i][$j]{'x'} = $j*2;
  25.         $coord[$i][$j]{'y'} = $i;
  26.         $h[$i][$j] = 0 unless (defined $h[$i][$j]);
  27.         $n[$i][$j] = 0;
  28.     }
  29. }
  30. &Draw(\@n, \@h);
  31. while (1) {
  32.     sleep 0.02;
  33.     @n = ();
  34.     &NextBuffer(\@h, \@n);
  35.     &Draw(\@h, \@n);
  36.     @h = (@n);
  37.     &KeyFunc();
  38. }
  39. sub NextBuffer {
  40.     my ($ra, $rb) = (shift, shift);
  41.     my ($i, $j, $sum);
  42.     my ($L, $R, $U, $D);
  43.     foreach $i (0 .. $mxrow) {
  44.         $U = ($i-1) < 0 ? $mxrow : ($i-1);
  45.         $D = ($i+1) > $mxrow ? 0 : ($i+1);
  46.         foreach $j (0 .. $mxcol) {
  47.             $L = ($j-1) < 0 ? $mxcol : ($j-1);
  48.             $R = ($j+1) > $mxcol ? 0 : ($j+1);
  49.             $sum = $ra->[$U][$L] + $ra->[$U][$j] + $ra->[$U][$R] +
  50.                    $ra->[$i][$L] +        0      + $ra->[$i][$R] +
  51.                    $ra->[$D][$L] + $ra->[$D][$j] + $ra->[$D][$R];
  52.             if ($sum == 3) {
  53.                 $rb->[$i][$j] = 1;
  54.             } elsif ($sum == 2) {
  55.                 $rb->[$i][$j] = $ra->[$i][$j];
  56.             } else {
  57.                 $rb->[$i][$j] = 0;
  58.             }
  59.         }
  60.     }
  61. }
  62. sub Draw {
  63.     my ($ra, $rb) = (shift, shift);
  64.     foreach $i (0 .. $mxrow) {
  65.         foreach $j (0 .. $mxcol) {
  66.             if ($rb->[$i][$j] != $ra->[$i][$j]) {
  67.                 &Point(
  68.                     $coord[$i][$j]{'x'},
  69.                     $coord[$i][$j]{'y'},
  70.                     $rb->[$i][$j],
  71.                 );
  72.             }
  73.         }
  74.     }
  75. }
  76. sub Point {
  77.     my ($mx, $my, $light) = (shift, shift, shift);
  78.     my $color;
  79.     if ($light == 1) {
  80.         $color = $FG_WHITE|$BG_GRAY;
  81.     } else {
  82.         $color = $FG_WHITE|$BG_BLACK;
  83.     }
  84.     $OUT->Cursor($mx, $my);
  85.     $OUT->FillAttr($color, 2, $mx, $my);
  86. }
  87. sub KeyFunc {
  88.     my $key;
  89.     $key = ReadKey(-1);
  90.     return if (not defined $key);
  91.     if ( ord($key) == 27 ) {
  92.         exit;
  93.     }
  94. }
  95. __DATA__
  96. .........................**.....**
  97. .........................**.....**
  98. ..................................
  99. ..................................
  100. ..................................
  101. ..................................
  102. ..................................
  103. ..................................
  104. ..................................
  105. ..................................
  106. ..................................
  107. ..................................
  108. ..................................
  109. ...........................**.**..
  110. ..........................*.....*.
  111. ..................................
  112. .........................*.......*
  113. .........................*..*.*..*
  114. .........................***...***
  115. ..................................
  116. ..................................
  117. ..................................
  118. ..................................
  119. .................*................
  120. **...............**...............
  121. **................**..............
  122. .............**..**...............
  123. ..................................
  124. ..................................
  125. ..................................
  126. .............**..**...............
  127. **................**.......**.....
  128. **...............**........**.....
  129. .................*................
复制代码

TOP

回复 17# 523066680
版主好人!
只是输入矩阵麻烦些 我试试吧
!scripting!

TOP

RE: 细胞自动机脚本运行到最后都稳定在一个状态不变了,高手给看看算法对不对

本帖最后由 523066680 于 2014-9-27 23:04 编辑

回复 16# 普大喜奔

前面发的一个矩阵是无限循环的。
    再发一个典型的刷了很久的轰炸模型, 挺精彩的,运行好一段时间才进入稳定状态,当然,还要看你的空间设置为多大。
  1. .........................**.....**
  2. .........................**.....**
  3. ..................................
  4. ..................................
  5. ..................................
  6. ..................................
  7. ..................................
  8. ..................................
  9. ..................................
  10. ..................................
  11. ..................................
  12. ..................................
  13. ..................................
  14. ...........................**.**..
  15. ..........................*.....*.
  16. ..................................
  17. .........................*.......*
  18. .........................*..*.*..*
  19. .........................***...***
  20. ..................................
  21. ..................................
  22. ..................................
  23. ..................................
  24. .................*................
  25. **...............**...............
  26. **................**..............
  27. .............**..**...............
  28. ..................................
  29. ..................................
  30. ..................................
  31. .............**..**...............
  32. **................**.......**.....
  33. **...............**........**.....
  34. .................*................
复制代码

TOP

回复 14# 523066680
谢啦版主 看来细胞自动机最后都要稳定啊
!scripting!

TOP

如果要验证显示结果对不对,可以把典型的生命矩阵代入
  1. ......................**...............
  2. ......................**...............
  3. .......................................
  4. .......................................
  5. .......................................
  6. .......................................
  7. .......................................
  8. .......................................
  9. .......................................
  10. .......................................
  11. .......................................
  12. .......................................
  13. .........*..........**...**............
  14. .......*.*............***..............
  15. ......*.*............*...*.............
  16. **...*..*.............*.*..............
  17. **....*.*..............*...............
  18. .......*.*......*.*....................
  19. .........*......**.....................
  20. .................*...*.................
  21. .....................**......*.........
  22. ....................*.*......*.*.......
  23. ...............*..............*.*....**
  24. ..............*.*.............*..*...**
  25. .............*...*............*.*......
  26. ..............***............*.*.......
  27. ............**...**..........*.........
  28. .......................................
  29. .......................................
  30. .......................................
  31. .......................................
  32. .......................................
  33. .......................................
  34. .......................................
  35. .......................................
  36. .......................................
  37. .......................................
  38. ...............**......................
  39. ...............**......................
复制代码

TOP

回复 13# 普大喜奔


    恩 我就是说要避免引用。

TOP

回复 11# 523066680
改成引用后明显运动没规律了 细胞较多时好像不像能稳定的样子 我原先改过的应该是对的 都稳定了 形态也符合算法
!scripting!

TOP

回复 11# 523066680

很有可能啊 我试试看直接引用是什么效果 然后对比一下
!scripting!

TOP

本帖最后由 523066680 于 2014-9-27 22:42 编辑

我在写perl版本细胞自动机的时候遇到这样的问题:数组赋值变成了引用。
修改赋值方式后得以解决,会不会是相同的问题?

现在不搞python了,没心思细看。

TOP

改制后基本各种概率下基本都在200次以内稳定了
!scripting!

TOP

回复 5# CrLf
改了37行以后应该对了运行了几次都类似这种

我还奇怪呢 10%的概率那么小怎么变化那么久 你不说我都想不起来孤立这回事
!scripting!

TOP

回复 5# CrLf
在第37行那 可是逻辑上这两者没什么不同啊
!scripting!

TOP

回复 5# CrLf
有一行我写错了 elif:num 应该改成else:
1

评分人数

    • CrLf: 卧槽,没发现技术 + 1
!scripting!

TOP

返回列表