使用来自 GOL LifeWiki 的 RLE 文件,我想将此文件的内容转换为一个列表列表,然后注入另一个列表列表

问题描述 投票:0回答:0
def insertFromRLE(self, rleString, pad=0):

---
        a = 0
        while True:
            if rleString.split('\n')[a][0] == 'x':
                break
            a += 1
        length = int(rleString.split('\n')[a].split(',')[0][4:])
        height = int(rleString.split('\n')[a].split(',')[1][5:])
        number = ''
        rleGrid = []
        row = []
        encoder = ''
        for line in rleString.split('\n')[(a + 1):]:
            encoder += line
        for char in encoder:
            if char.isdigit():
                number += char
            elif char == 'b':
                if number == '':
                    number = 1
                for _ in range(int(number)):
                    row.append(0)
                number = ''
            elif char == 'o':
                if number == '':
                    number = 1
                for _ in range(int(number)):
                    row.append(1)
                number = ''
            elif char in '$!':
                if len(row) < length:
                    for _ in range(length - len(row)):
                        row.append(0)             
                rleGrid.append(row)
                row = []
                number = ''
                if char == '!':
                    break

        for i in range(height):
            for j in range(length):
                self.grid[i + pad][j + pad] = rleGrid[i][j]

此代码不正确。出于某种原因,“for char in encoder”循环没有迭代足够的次数,导致 rleGrid 太短,在尝试将其内容插入 self.grid 时导致索引错误(这是一个 NxN列表列表,其中 N > 长度或高度)

最奇怪的是,它适用于较小的图案,如 gosper 滑翔机枪124P21,但不适用于稍大的图案,如 Cord Puller 或更大的图案,如 Breeder 1

我已经问过 ChatGPT,但我无法解决它的“变通办法”以实际正常工作而不抛出另一个错误。

python conways-game-of-life rle
© www.soinside.com 2019 - 2024. All rights reserved.