Ethic 和 Hedge 站在巨大塔楼的底层。 能量屏障把他们与第二个目标隔开了: 创造之结。 为了拿到它, Ethic 要用三束能量流爬上塔楼。 一旦她开始前进, 计时器就会启动 60 秒倒计时。 在房间后部, 有个由隐形柱子组成的容器, 可以储存能量。 一分钟后,能量会从上方倾泻而下, 一次填满一个单位, 力场确保它不会向前或向后流动。 在 60 秒的冷却时间里, Ethic 和 Hedge 必须确定 有多少能量会流下来。 对于这三个挑战, 他们必须使能量正好填满底座。 如果他们做对了, 能量会助他们更进一步。 但如果他们弄错了, 能量就会泄漏出来, 落向他们。 墙上的图是一个例子。 这个结构能容纳 2 个单位的能量。 这个可以容纳 4 个单位—— 左边 3 个,右边 1 个。 这个结构也可以容纳 4 个单位的能量, 因为如果右边有能量 ,就会泄漏。 能量落下的方法 让它只会在空间容纳量不够时泄漏。 Hedge 每次能让一个能量柱现形 并数出它的高度, 但他不能一次看全整个结构。 Ethic 要怎样让 Hedge 计算出 这个容器可以容纳多少能量呢? 现在暂停来自己试试。 有一种方法来思考这个问题: 对于一个空的单元格, 当且仅当它左边有墙, 右边也有墙时, 才可以容纳能量。 但 Hedge 一个个检查 这些单元格会耗费很多时间。 如果他一次考虑一整个纵列呢? 比如这个结构可以容纳多少能量? 暂停来自己试试。 我们可以通过这个例子 来分析一下问题。 这里有 5 纵列单元格。 最左边的不能容纳任何能量, 因为没有比它更高的了。 第二列能容纳3个单元格的能量, 这两个四格高的纵列 可以把能量夹在中间。 我们得出 3 格的结论,因为能量 最终会等于最高纵列——4, 再减去这列的高度 —— 就是 4 减 1。 第三列同理——左边 4 格, 右边 4 格,这列高 3 格, 所以 4 减 3 等于 1 个单位。 第四、第五列右边没有更高的, 所以它们无法容纳任何能量。 我们可以把这个方法 转变成一种算法。 每次选择一个纵列作为参考点, Hedge 由此向左一点点检查, 找到最高的纵列, 再检查右边并找出最高的纵列, 两个高度中较小的 就是最终能量可以填满的高度。 如果这个结果高过某列原高度, 那么减去这列的原有高度, 就能得出这个纵列的容纳量。 如果低于某列的原有高度, 能量就会泄漏。 Hedge 可以对整个底座 依次这样操作, 从左到右,一次一列。 对于每一纵列都重复同样的操作—— 向左找到最高的, 右边也是, 取两个高度中较小的一个, 减去原纵列原有的高度, 如果得到正数就算进总容量里。 这一流程的运行次数和纵列数相等。 这样的确可行,但如果底座很大, 这样做会耗费很多时间。 每一步,Hedge 都要反复地左看右看。 如果有 N 个纵列, 他就需要把每个纵列都看 N 遍。 有没有更快的方法呢? 有个节省时间的方法: 首先,Hedge 从左边开始, 并连续记录最高纵列的高度。 这样就是 2,然后还是 2, 因为第一个更高, 然后是 4,4,4。 然后他可以找到最高纵列的右端, 只要同样从右到左再做一遍: 1,3,4,4,4。 最终,他会记下这样一个表格。 现在 Hedge 可以再扫描一次, 按照之前的等式计算每个纵列 可以容纳多少能量: 在存储的左右最高值中选较小的, 再减去当前纵列的高度。 与把 N 个纵列每个看 N 遍相比, 他只需把每个纵列看三遍—— 这就是我们所说的线性时间。 还有很多更优解决方法, 但这个已经够好了。 Ethic 和 Hedge 配合默契。 他们轻而易举地通过了 第一个瀑布,塔楼地板上升了。 第二个难一些。 第三个容器非常大, 每列有数十个单元格。 计时器显示出 0, 但 Ethic 的动作很快。 她在最后时刻找到了正确位置, 能量让他们上升至创造之结。 和第一次一样,它显现出了幻象: 多年前的记忆。 世界机器改变了一切, Ethic 作为首席机器人工程师, 对她目击到的现象感到不安。 当 Brad 障碍升起并围住人群时, 她知道大事不妙了。 于是她造出了三个物品, 它们拥有修复人们的力量、 创造力以及记忆的能力, 并把它们偷运到了三个社区里。 在她告诉人们如何使用之前, 政府发现了她的成果, 并派出机器人 抓捕她以及其他程序员。 Ethic 用世界机器创造的 最后一件物品是个机器人, 它可以把古老的装置 围在大型迷宫中, 使它远离愚昧的力量。 她给这个物品起名叫 Hedge。 在没有任何警告的情况下, 能量电梯开始闪烁,然后消散了。