不敲代码怎么通关编程关卡(仅个人分享,非教程,非最优解)


3楼猫 发布时间:2025-02-28 00:53:24 作者:玩家44529371 Language

    由于操作失误,不知道最后做的计算机去哪了,也没做成压栈弹栈的那一关(我诚实的通过了)。没有办法,最后的几个变成关卡只能每一关做一个特定的硬件来过关。

    下面的图片是所有关卡里使用到的启动硬件的脉冲发生器。

不敲代码怎么通关编程关卡(仅个人分享,非教程,非最优解)-第0张

1. 编程-迷宫

不敲代码怎么通关编程关卡(仅个人分享,非教程,非最优解)-第1张

编程-迷宫

    实现了最简单的摸着一边的墙走就一定能走到迷宫出口,但该装置无法吃掉所有的金币。

2. 汇编挑战-AI打牌

不敲代码怎么通关编程关卡(仅个人分享,非教程,非最优解)-第2张

汇编挑战-AI打牌

    一共有12张牌,AI第一次拿走牌的数量只有三种可能(1-3张)。我只需要在我第1次拿走牌后,还剩下5张;这样AI在第二次拿走(1-3张)牌后,一定能够剩余2-4张牌;所以我第二次只需要拿走1-3张牌后,AI下一次一定会拿取最后一张牌。(下方左半部分是根据AI第一次拿取结果,我进行第一次拿取;右半部分是获得AI第二次拿取结果后,我进行第二次拿取)。

3. 汇编挑战-机器赛跑

不敲代码怎么通关编程关卡(仅个人分享,非教程,非最优解)-第3张

汇编挑战-机器赛跑

    只是很简单的把机器人走的路线压缩了一下放进了program里,顺带调了一下program读取移位的速度。steam社区里面似乎有完全不需要program的更简便的版本。

4. 汇编挑战-新品上市

不敲代码怎么通关编程关卡(仅个人分享,非教程,非最优解)-第4张

汇编挑战-新品上市

    上面是操作机器人走到指定的操作位置,下面是对所有的水果(输入值)进行判断,如果出现第一次,寄存器被会永久置1。这样当同一个数字出现第二回的时候,机器人就会移动到按钮的位置,按下按钮。

5. 汇编挑战-美味排序

不敲代码怎么通关编程关卡(仅个人分享,非教程,非最优解)-第5张

起始,中间,末尾三个模块

不敲代码怎么通关编程关卡(仅个人分享,非教程,非最优解)-第6张

把中间部分多复制几个,连在一起,再连上首尾部分

    原理是使用数组,从最右侧的最大数字开始,在新数据插入的同时进行排序。首先通过<=比较找到插入位置(通过要求上一位<=为真,下一位<=为假,避免多个相同数字)。之后把该位置及所有更低位里的数字左移(同时向左覆盖)1位,空余出该插入位置。最后把这个数字覆盖这一位就完成了一个排序插入。(由于所有寄存器的初始值是0,所以插入第一个数和插入一个最大的数的过程是一样的;而所有数字都是正数(全部大于0),所以不会出现-1插入到最左边,然后被弃置的问题(其实就算是插入0也没有问题,和前面的逻辑一样,会插入到所有0的最右侧))。

6. 汇编挑战-跳舞机器

不敲代码怎么通关编程关卡(仅个人分享,非教程,非最优解)-第7张

汇编挑战-跳舞机器

    题目要求的运算正好是基础运算,所以直接按要求做就行。

7. 汇编挑战-合金汉诺塔

不敲代码怎么通关编程关卡(仅个人分享,非教程,非最优解)-第8张

汇编挑战-合金汉诺塔

    题目中明确表示,合金汉诺塔的层数在3-5层之间(一共就3种可能)。所以直接把三种移动过程写进了program(写入program的没有具体的从哪里移动到哪里,对于三个位置,只是用很简单的0,1,2进行储存。虽然题目中起始位置和要求移动到的位置是随机的,但是只需要按照题目要求映射一下就可以(题目要求会在程序启动后读入到存在右上角的寄存器里,第一个寄存器存储这是几层的汉诺塔(指定program内读取的初始位置),第2-4个寄存器是汉诺塔的初始位置,目标位置,空闲位置))。

8. 汇编挑战-行星之名

不敲代码怎么通关编程关卡(仅个人分享,非教程,非最优解)-第9张

汇编挑战-行星之名

    题目要求让所有首字母大写,所以先强制让第一个字母大写,然后判断是否遇到空格。如果遇到空格,将下一位大写;否则原样输出。(大写对于ascii码来讲,就是单纯的加减法)。

9. 汇编挑战-水世界

不敲代码怎么通关编程关卡(仅个人分享,非教程,非最优解)-第10张

起始部分和基础单元(上半部分存数据,下半部分运算)

不敲代码怎么通关编程关卡(仅个人分享,非教程,非最优解)-第11张

末尾部分

不敲代码怎么通关编程关卡(仅个人分享,非教程,非最优解)-第12张

复制的部分

    基础单元分为2个部分,从上面一半实现了防止覆盖的存储(用于主线输入多个数据),下面一半是数据实际运算部分。整体的执行逻辑如下。

  1. 从输入里把数据读到单元上层

  2. 把单元上层里的数据存入单元下层运算部分

  3. 实际运算是将数据分为两个部分,一部分重新存入单元上层(通过主线的存储方式来防止空位的问题);另一部分进行求和计算,在所有求和都完成后,输出。

  4. 如果计数器里的数字不为1,重复2.和3.,计数器里的数字-1

  5. 输出最后求和的结果

    下面是设计思路:

    从墙的最高6格子开始向下逐一遍历(最低为2)(实际是从5到1,因为使用的是大于进行判断)。先以第1遍的6格高为例,通过计算单元中间部分的双向扫描棍,扫描出左右最靠边的>5格高的墙(只有6格高的墙符合要求):如果没有,数据全部返回到上面的寄存器,进入下一次循环;如果有2个6格高的墙,对这两个墙之间的水位(6-墙高)进行求和(涉及到求和的数字不会存回单元上层寄存器,会被舍去),同时将第一个6以及更左边的数字以及第二个6的更右边的位置,按照原来的顺序存入单元上层的寄存器。(需要保留一个6:如果下一层只有一个5,那么5和6之间的水位,由于所有的6都被舍去,就无法求和;如果下一层有2个5,那么需要求参与和的数字必须是正数:如果是565的结构,中间的6不会求和,并会被同时舍去;如果是556的结构,由于第二回扫描的条件是>4,所以6会被相当于5对待,中间的5是0,不会参与求和,会被同时舍去)。之后按照顺序遍历>4,>3,>2,>1。遍历完成,输出求和结果。


© 2022 3楼猫 下载APP 站点地图 广告合作:asmrly666@gmail.com