找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
楼主: netbenton

批处理编程竞赛 第2011-001期[Life 游戏]

[复制链接]
发表于 2011-3-12 15:47:56 | 显示全部楼层
zm的果然很快啊
其实也知道25行的数据很多地方都是重复的,可以重复利用的地方非常多,然而想高重复利用起来计算的复杂度又变高,效率不一定更好,一直没有更好的解决办法,就那样了。
 楼主| 发表于 2011-3-15 19:16:54 | 显示全部楼层
按照料 batcher 所说的方法测试代码,排名并没有变化,

公示三天已过,得出本次竞赛最终结果为:

获奖名次      选手                大约用时

  第1名       zm900612      00:00:09:65
  第2名      
terse              00:00:14:12
  第3名       caruko           00:00:15:43



***  顶楼已经更新  ***
发表于 2020-8-18 13:44:45 | 显示全部楼层
本帖最后由 a20150604 于 2020-8-18 13:52 编辑

John Horton Conway (26 December 1937 – 11 April 2020)
His wife, Diana Conway, said his death, at a nursing home, was caused by Covid-19.


https://www.nytimes.com/2020/04/ ... ad-coronavirus.html

https://en.wikipedia.org/wiki/John_Horton_Conway




发表于 2020-12-23 17:51:25 | 显示全部楼层
  1. # coding=utf-8


  2. # 更新窗口
  3. def upWindow():
  4.     global SHEET
  5.     for i in range(1,WIDTH-1):
  6.         for j in range(1,WIDTH-1):
  7.             print(SHEET[i][j], end='', flush=True)
  8.         print()

  9. # 计算
  10. def death(status, res):
  11.     global SHEET
  12.     global DATA
  13.     global WIDTH
  14.     global A
  15.     global B
  16.     for i in range(1,WIDTH-1):
  17.         for j in range(1,WIDTH-1):
  18.             # 检查
  19.             if SHEET[i][j] == status:
  20.                 if check(i,j) in res:
  21.                     DATA.append((i,j))
  22.                     
  23.     # 取出数据
  24.     if status == B: status = A
  25.     elif status == A: status = B
  26.     for n in DATA:
  27.         SHEET[n[0]][n[1]] = status
  28.     DATA.clear()
  29.     upSide()
  30.     upWindow()

  31.    
  32. # 检查周围点活着的数量
  33. def check(x, y):
  34.     global SHEET
  35.     global A
  36.     count = 0
  37.     if SHEET[x-1][y] == A:
  38.         count += 1
  39.     if SHEET[x-1][y-1] == A:
  40.         count += 1
  41.     if SHEET[x-1][y+1] == A:
  42.         count += 1
  43.     if SHEET[x][y+1] == A:
  44.         count += 1
  45.     if SHEET[x][y-1] == A:
  46.         count += 1
  47.     if SHEET[x+1][y-1] == A:   
  48.         count += 1
  49.     if SHEET[x+1][y] == A:   
  50.         count += 1
  51.     if SHEET[x+1][y+1] == A:   
  52.         count += 1
  53.     return count

  54. # 更新表格边框
  55. def upSide():
  56.     global SHEET
  57.     global WIDTH
  58.     # 交换‘四边’数据
  59.     for n in range(1,WIDTH-1):
  60.         SHEET[0][n] = SHEET[WIDTH-2][n]
  61.         SHEET[WIDTH-1][n] = SHEET[1][n]
  62.         SHEET[n][0] = SHEET[n][WIDTH-2]
  63.         SHEET[n][WIDTH-1] = SHEET[n][1]
  64.     # 角落
  65.     SHEET[0][0] = SHEET[WIDTH-2][WIDTH-2]
  66.     SHEET[WIDTH-1][WIDTH-1] = SHEET[1][1]
  67.     SHEET[0][WIDTH-1] = SHEET[WIDTH-2][1]
  68.     SHEET[WIDTH-1][0] = SHEET[1][WIDTH-2]

  69. # main

  70. # 生
  71. A = '■'
  72. # 死
  73. B = '▓'

  74. # 表格宽度
  75. WIDTH = 10
  76. # 表格列表
  77. SHEET = []
  78. # 数据暂存队列
  79. DATA = []
  80. # 初始化数据
  81. for n in range(WIDTH):
  82.     if n in [1,5]:
  83.         SHEET.append([B,B,A,A,A,B,B,B,B,B])
  84.     if n in [0,2,3,7,8]:
  85.         SHEET.append([B,B,B,B,B,B,B,B,B,B])
  86.     if n == 4:
  87.         SHEET.append([B,B,B,A,A,B,B,B,B,B])
  88.     if n == 6:
  89.         SHEET.append([B,B,B,A,B,B,B,B,B,B])
  90.     if n == 9:
  91.         SHEET.append([B,B,A,A,A,B,B,B,B,B])

  92. upWindow()
  93. count = 1
  94. while True:
  95.     print(f'第{count}次繁衍')
  96.     death(B, [3])
  97.     print(f'第{count}次死亡')
  98.     death(A, [0,1,4,5,6,7,8])
  99.     if count >= 6:break
  100.     count += 1
复制代码
这个步骤是先计算生,还是先计算死?
然后当前点 生了(死了)以后,是不是实时更新的呢(会影响下一个点,下一个点将计算前面那个点的状态)?
有些不解!
我计算的结果和给出答案有误!

# 四边是计算的缓存数据,请忽略

▓▓▓▓▓▓▓▓▓▓
▓▓■■■▓▓▓▓▓
▓▓▓▓▓▓▓▓▓▓
▓▓▓▓▓▓▓▓▓▓
▓▓▓■■▓▓▓▓▓
▓▓■■■▓▓▓▓▓
▓▓▓■▓▓▓▓▓▓
▓▓▓▓▓▓▓▓▓▓
▓▓▓▓▓▓▓▓▓▓
▓▓■■■▓▓▓▓▓

第一次繁衍
▓▓▓■▓▓▓▓▓▓
▓▓■■■▓▓▓▓▓
▓▓▓■▓▓▓▓▓▓
▓▓▓▓▓▓▓▓▓▓
▓▓■■■▓▓▓▓▓
▓▓■■■▓▓▓▓▓
▓▓■■■▓▓▓▓▓
▓▓▓▓▓▓▓▓▓▓
▓▓▓■▓▓▓▓▓▓
▓▓■■■▓▓▓▓▓

第一次死亡
▓▓▓■▓▓▓▓▓▓
▓▓■▓■▓▓▓▓▓
▓▓▓■▓▓▓▓▓▓
▓▓▓▓▓▓▓▓▓▓
▓▓■▓■▓▓▓▓▓
▓▓▓▓▓▓▓▓▓▓
▓▓■▓■▓▓▓▓▓
▓▓▓▓▓▓▓▓▓▓
▓▓▓■▓▓▓▓▓▓
▓▓■▓■▓▓▓▓▓

# 无计算缓存
▓■■■▓▓▓▓
▓▓▓▓▓▓▓▓
▓▓▓▓▓▓▓▓
▓▓■■▓▓▓▓
▓■■■▓▓▓▓
▓▓■▓▓▓▓▓
▓▓▓▓▓▓▓▓
▓▓▓▓▓▓▓▓

第一次繁衍
▓■■■▓▓▓▓
▓▓■▓▓▓▓▓
▓▓▓▓▓▓▓▓
▓■■■▓▓▓▓
▓■■■▓▓▓▓
▓■■■▓▓▓▓
▓▓▓▓▓▓▓▓
▓▓■▓▓▓▓▓

第一次死亡
▓■▓■▓▓▓▓
▓▓■▓▓▓▓▓
▓▓▓▓▓▓▓▓
▓■▓■▓▓▓▓
▓▓▓▓▓▓▓▓
▓■▓■▓▓▓▓
▓▓▓▓▓▓▓▓
▓▓■▓▓▓▓▓
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-16 22:23 , Processed in 0.011390 second(s), 7 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表