返回列表 发帖
zm的果然很快啊
其实也知道25行的数据很多地方都是重复的,可以重复利用的地方非常多,然而想高重复利用起来计算的复杂度又变高,效率不一定更好,一直没有更好的解决办法,就那样了。

TOP

按照料 batcher 所说的方法测试代码,排名并没有变化,

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

获奖名次      选手                大约用时

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



***  顶楼已经更新  ***

TOP

本帖最后由 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




TOP

# coding=utf-8
# 更新窗口
def upWindow():
    global SHEET
    for i in range(1,WIDTH-1):
        for j in range(1,WIDTH-1):
            print(SHEET[i][j], end='', flush=True)
        print()
# 计算
def death(status, res):
    global SHEET
    global DATA
    global WIDTH
    global A
    global B
    for i in range(1,WIDTH-1):
        for j in range(1,WIDTH-1):
            # 检查
            if SHEET[i][j] == status:
                if check(i,j) in res:
                    DATA.append((i,j))
                    
    # 取出数据
    if status == B: status = A
    elif status == A: status = B
    for n in DATA:
        SHEET[n[0]][n[1]] = status
    DATA.clear()
    upSide()
    upWindow()
   
# 检查周围点活着的数量
def check(x, y):
    global SHEET
    global A
    count = 0
    if SHEET[x-1][y] == A:
        count += 1
    if SHEET[x-1][y-1] == A:
        count += 1
    if SHEET[x-1][y+1] == A:
        count += 1
    if SHEET[x][y+1] == A:
        count += 1
    if SHEET[x][y-1] == A:
        count += 1
    if SHEET[x+1][y-1] == A:   
        count += 1
    if SHEET[x+1][y] == A:   
        count += 1
    if SHEET[x+1][y+1] == A:   
        count += 1
    return count
# 更新表格边框
def upSide():
    global SHEET
    global WIDTH
    # 交换‘四边’数据
    for n in range(1,WIDTH-1):
        SHEET[0][n] = SHEET[WIDTH-2][n]
        SHEET[WIDTH-1][n] = SHEET[1][n]
        SHEET[n][0] = SHEET[n][WIDTH-2]
        SHEET[n][WIDTH-1] = SHEET[n][1]
    # 角落
    SHEET[0][0] = SHEET[WIDTH-2][WIDTH-2]
    SHEET[WIDTH-1][WIDTH-1] = SHEET[1][1]
    SHEET[0][WIDTH-1] = SHEET[WIDTH-2][1]
    SHEET[WIDTH-1][0] = SHEET[1][WIDTH-2]
# main
# 生
A = '■'
# 死
B = '▓'
# 表格宽度
WIDTH = 10
# 表格列表
SHEET = []
# 数据暂存队列
DATA = []
# 初始化数据
for n in range(WIDTH):
    if n in [1,5]:
        SHEET.append([B,B,A,A,A,B,B,B,B,B])
    if n in [0,2,3,7,8]:
        SHEET.append([B,B,B,B,B,B,B,B,B,B])
    if n == 4:
        SHEET.append([B,B,B,A,A,B,B,B,B,B])
    if n == 6:
        SHEET.append([B,B,B,A,B,B,B,B,B,B])
    if n == 9:
        SHEET.append([B,B,A,A,A,B,B,B,B,B])
upWindow()
count = 1
while True:
    print(f'第{count}次繁衍')
    death(B, [3])
    print(f'第{count}次死亡')
    death(A, [0,1,4,5,6,7,8])
    if count >= 6:break
    count += 1COPY
这个步骤是先计算生,还是先计算死?
然后当前点 生了(死了)以后,是不是实时更新的呢(会影响下一个点,下一个点将计算前面那个点的状态)?
有些不解!
我计算的结果和给出答案有误!

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

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

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

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

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

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

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

TOP

返回列表