阿龙的自留地

兼济天下则达 独善其身则穷

标签归档: manufactoria

manufactoria通关攻略


《空闲时玩的游戏manufactoria》《通关manufactoria》说过在manufactoria上花了很多时间,并借助外力的帮助下通关了,但是一直没有将它记录下来,现在记下通关方法,以免以后又忘记了。这个游戏对于我对程序设计的理解有很大帮助,给了我许多兴趣。本来给出解答是不应该的,这样会剥夺了别人思考的权力,就像以前的《吉米多维奇》习题集,本来非常火爆的,结果有好事者搞出了习题解答,之后这套习题集就冷下来了。可是每个人都有局限性的,看过《三体》之后,让我知道技术爆炸这个词,也就是徒弟本来不会一项技术,师傅教他之后,他比师傅做的还好,并有了创新。秉着这个观点,把解答贴在这里,让更多的人体验技术爆炸。

关卡按照从左到右,从上到下计数。

  1. Move robots from the entrance(top) to the exit (bottom)! 将机器从入口(顶部)移到出口(底部)! 简单,不多说
  2. If a robot's string starts with blue, accept. Otherwise, reject!  如果机器以蓝色字符开头,则接受。否则,丢弃。
  3. ACCEPT:if there are three or more blues! 如果有三个或三个以上的蓝色的,则接受
  4. ACCEPT: if a robot contains NO red! 如果机器不包含红色的,则接受。
  5. OUTPUT:The input,but with the first symbol at the end!  对于输入的字符,将第一个字符移到末尾作为输出
  6. ACCEPT: if the tape has only alternating colors! 如果只存在交替字符,则接受。 意思就是字符如果是交替出现的则接受,如蓝红蓝红蓝,红蓝红蓝等等,而蓝蓝红,红蓝蓝等出现连续相同的字符,所以不接受
  7. OUTPUT:Replace blue with green, and red with yellow! 输出:将蓝色换成绿色,将红色换成黄色。
  8. ACCEPT: if the tape ends with two blues!  如果末尾是两个蓝色,则接受。
  9. OUTPUT: Put a green at the begining,  and a yellow at the end! 输出: 对于输入的字符,在开头中添加一个绿色字符,在末尾中添加一个黄色字符。
  10. ACCEPT: Strings that begin and end with the same color! 如果开始字符和结束字符时相同,则接受。
  11. ACCEPT: With blue as 1 and red as 0, accept odd binary string! 把蓝色当做1,红色当做0, 接受奇数二进制数。 其实就是接受蓝色结尾的字符。
  12. ACCEPT: Some number of blue, then the same number of red! 接受: 一些蓝色的,然后相同数量的红色的。 也就是接受诸如蓝蓝红红,蓝蓝蓝红红红等,当然空字符也要接受,因为空字符代表0个蓝色,0个红色。
  13. OUTPUT: Swap blue for red, and red for blue! 输出: 将蓝色换成红色,红色换成蓝色。 也就是将字符串中的颜色互换。
  14. OUTPUT: All of the blue, but none of the red! 输出字符串中的所有蓝色字符,不输出红色字符。 也就是将字符串中的所有红色字符去掉,留下蓝色的。
  15. OUTPUT: The input, but with the last symbol moved to the front! 输出: 对于输入的字符,将最后一个字符移动最前面。
  16. OUTPUT: With blue as 1 and red as 0, multiply by 8! 输出:把蓝色当做1,红色当做0,将二进制字符串乘以8. 其实也就是在字符串末尾添加3个0,也就是添加三个红色
  17. ACCEPT: With blue as 1 and red as 0, accept binary strings > 15! 接受:把蓝色当做1,红色当做0,接受大于15的字符串。
  18. An equal number of blue and red, in any order! 只要字符串中包含相同个数的蓝色和红色,则接受。
  19. OUTPUT:Put a yellow in the middle of the (even-lenght) string! 输出: 在字符串(偶数个字符串)的中间放置一个黄色字符。
  20. ACCEPT: X blue, then X red, then X more blue, for any X! 接受: X个蓝色,然后X个红色,接着X个蓝色,对于X没有限制。 也就是接受蓝红蓝,蓝蓝红红蓝蓝等字符串,对于空字符也接受,因为它代表0个蓝色,然后0个红色,接着0个蓝色。
  21. OUTPUT: The input, but with all blues moved to the front! 输出:对于输入,将字符串中所有的蓝色移到前面。
  22. OUTPUT: With blue as 1 and red as 0, add 1 to the binary string! 输出: 将蓝色当做1,红色当做0,将二进制字符串加上1.
  23. ACCEPT: With blue as 1 and red as 0,  accept natural powers of four! 接受:把蓝色当做1,红色当做0,接受四的开方
  24. ACCEPT: (Even-length) strings that repeat midway through! 接受:(偶数长度)接受从中间开始重复的字符串 意思就是接受的字符串是偶数长度,前半段和后半段是一样的,如蓝红红蓝红红,
  25. ACCEPT: If there are exactly twice as many blues as red! 接受:如果蓝色的个数是红色个数的两倍,则接受。
  26. OUTPUT: Reverse the input string! 输出:将输入的字符串逆转输出
  27. OUTPUT: Subtract 1 from the binary string!(Input >= 1) 输出:从二进制字符串中减去1(输入字符串>=1)
  28. ACCEPT: Perfectly symmetrical strings! 接受:完美对称字符串!意思就是回文串,也就是从左读到右和从右读到左是一样的。
  29. ACCEPT: Two identical strings, separated by a green! 接受:两个相同的字符串,由绿色隔开。
  30. ACCEPT: Read the tape as two numbers, A and B, split by a green: accept if A > B! 接受:读入的字符串当做两个二进制数,A和B,由一个绿色隔开,如果A>B则接受。
  31. OUTPUT: Read the tape as two numbers, A and B, split by a green: output A + B! 输出:读入的字符串当做两个二进制数,A和B,由一个绿色隔开,输出A+B的和!

通关manufactoria


《空闲时玩的游戏manufactoria》中说过,没能通关manufactoria游戏,一直有些遗憾,今天豁出去了,想把它解决。结果之前的记录已经被删除了,所以得从第一关开始玩,但是遇到了很多困难。因为隔了这么久,已经忘记了以前的解法。现在的心态已经大不如前,所以求助于Roy(姜子麟)的解法。他的解法跟我的很相似,所以很快就到了最后一关。

最后一关就是二进制的加法,一直是想从低位开始相加,这样就有保留进制的问题,很快我就无解了。纠结了很久,看还是不看解答呢?傍晚跑步回来,吃过晚饭后,决定看解答。意外的是,竟看不懂解答,于是单步跟踪,渐渐明白了用意。

其实这题如果换个角度思考就好了,可惜陷入思维定势了,看来还要仔细看看《怎样解题》。不得不说,姜子麟是神牛,神牛曾说过他去教奥数的经历,以接近一毛钱每秒,每天教六小时,连续教了六天,可以算算这六天来他的所得,所以知识就是力量。有兴趣的可以看看老鼠毒药问题的升级版,仓鼠毒药问题,你会感慨,数学,又见数学。

这样,这个遗憾就一直存在了,因为是借助别人的解答,不想留有遗憾的还是不要看解答。现在还可以考虑matrix67的猜英文句子,决定不看解答。

空闲时玩的游戏manufactoria


在matrix67的博客上看到这个游戏,于是玩这个游戏,确实有难度。翻开日志,看了一下玩游戏的整个过程。

2011年1月2日,20:36通过任晓祎的博客访问到matrix67的博客。花费40分钟。

1月3日,15:26玩游戏“manufactoria" 花费3小时。

1月5日 10:30 去实验室,玩manufactoria。花费30分钟,11:16玩manufactoria 花费40分钟。

1月7日 11:30 玩manufactoria。花费30分钟   18:15 回实验室,玩manufactoria花费 40分钟。   21:27 玩manufactoria 花费30分钟。

1月9日,被有一关卡住了,没办法通过,于是叫同学玩,希望他们能解决。 18:00教杨俊玩manufactoria。花费1小时。  21:42 教陈海龙玩manufactoria。花费44分钟。后来发现是由于对题意理解错误,之后这关很快解决。

3月18日  18:26 去实验室,玩manufactoria,花费2小时。

3月20日,9:30 又被一关卡住了,教黎扬玩manufactoria,他解决了这关。花费2小时20分

3月26日, 14:20 玩manufactoria 花费2小时10分。

5月25日 15:23 玩manufactoria 花费2小时

7月25日 至 8月1 晚上睡觉是考虑manufactoria,试着像特斯拉一样在大脑中想象机器的运转过程,但终究比不上特斯拉,没有那么精确,但想通了加一,减一,逆序输出字符。

8月11日   20:30 玩manfactoria 解决加减,逆序输出字符 花费2小时。 23:30 玩manufactoria 花费1小时10分

8月12日, 9:40 玩manufactoria 解决对称 花费1小时20分。

总游戏时间为22小时14分钟。当然还没有加上吃饭时考虑这个游戏,睡觉时考虑这个游戏的时间。总游戏时间相当长,而且很遗憾的是,现在还没有将游戏通关。想想matrix67花费一个下午加晚上的时间就把游戏通关了。但我想他之所以能做到这样,此前必定付出很多努力。于是在他的网站中寻找证据,果然被我找到一条,在他的博客中《我中学时代的作文一:换一个角度思考问题》。matrix67考虑的是这样一个问题:22, 2, 53, 10, 19, 0, 53, 7, 0, 79, 28, 8, 69, 1, 100, 104, 0, 74, 18, 39。每一个数字代表一个字母,合起来组成一个简单的英文句子,用通常的方法无法的到答案,需要换一个角度思考。读者会在某特定的场合下想出答案。为了这个问题,读初三的他竟会探索半年之久。这也证实了我的想法。

希望有哪位空闲的能人异士将游戏通关,然后告诉我最后一关的算法。