Compulsory Office Romance
工作第46年,我终于要结婚了。
我已经拥有了记忆,这样的经历绝对是真实的。但是我和她都没有表达爱意的功能,不能体会到什么是浪漫。
还好公司了解到这个情况后为我们两个准备了培养感情的机会。
主管把我们叫去Love楼层,第一件事是教会我们两个相互传递信息。
Automated Pleasantries
Community Training Day
- 区分谁是instructor,谁是普通员工
- 在instructor做完后向所有人发Go!,其他人要一直竖着耳朵听着直到听见Go!
Double Shred Destruction
这个地方的问题是如何让在左右的人听到消息后按顺序取粉碎方块。
左边第一个→右边第一个→左边第一个…
但是,最好的解法并不是通知另一端的worker,而是通知身边的。
这里利用了,左边的人到粉碎机的距离比右边的短。这样就达成了,先左后右。
Cubical Communication
左下角方块的数字表示粉碎方块的顺序,从左到右循环。
- 第一轮粉碎后,每个worker的mem1应该为自己方块的数字
- 另外用一个mem4来恢复mem1
也可以不用tell,listen,不用更改mem1,只需要用nearst比照最近的方块就行了。
第一轮粉碎后,只需等待两轮就行,即在第4个丢方块的时候,第一个刚把方块捡起来。
Identify yourselves
确认自己站在第几个,然后重写面前的方块。
也可以使用tell,listen。
下面这种不使用其的方法是利用了判断的时间差。
The Mode Code
这关需要统计0~5每个数字方块出现的次数。
可以横着遍历所有方块来统计,也可以竖着遍历所有方块来统计。
我是用的竖着上去的方法,每一列都是回到下面再竖着上去统计。这是为了减少相同代码,但循环就多、复杂了起来。
Terrain Leveler
求出所有方块的平均值并把所有方块重写为这个平均值。
思路是
- 一路上去求每一列的和
- 从右到左把值加给左边的
- 最左边的把总和除49一路赋给右边
- 都向下重写平均数
100 Cubes on the Floor
这关需要把地板上100个方块赋值上0~99的数字。
其中一种方法是先让10个worker都到方块右端排成一列,然后依次从上至下向左移动去赋值。
下面介绍另一种更快的方法。每个worker向左向上走,直到在上面一行排着,然后处理完第一行的数据后,每下一行加10.
Data Flowers
按照现在的机器人生命的平均岁数,我已经到了快要退休的红色时期了。公司为了照顾老员工,给我们又增加了新功能。其实是想在我们退休前,压榨出最后的价值。
新的功能不甚有趣,forEachDir可以判断8个方向的内容。
拿起下面的方块,向前走,走到方块组的*,用forEachDir扫描8个方向的方块,每次扫描都会把结果放在一个内存里。计算完,把总和写入手上拿着的方块。
Local Maximums
扫描一圈,记录最大值的方块是哪个。
现在我明白了,方块被使用时除了数值信息还有位置信息。在一系列自动操作中,都是当做对象用的
Neighborly Sweeper
左边的向右走,右边的向左走。遇到脚下有方块时,用**forEachDir*识别周围有几个方块,把邻近方块数写入脚下的方块。