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。
在没有任何警告的情况下,
能量电梯开始闪烁,然后消散了。