《程序员模拟器》生涯入门1~18关攻略

修改于昨天 01:0472 浏览攻略
写在攻略前面
这是一份写给新人的攻略,不是标准答案,只是我在游戏里找到的或者是收集于各处的解法。本人非专业人士,如果有不对的地方,欢迎大家指正!
[表情_比心]如果你是刚接触这个游戏,建议先别急着查攻略。自己点一点界面,翻一翻内置教程,卡关再来看也不迟。游戏有自己的规则,哪怕你写过 JavaScript,也得重新适应——比如游戏键盘里打不出冒号、分号和问号等,常见的 for 循环、对象字面量还有简洁的判断也就用不上。推荐优先用游戏内置函数来搭积木解谜,偶尔偷懒用点别的或者干脆复制冒号也行,但只是“偶尔”啦[表情_狗头]
论坛里大家分享了很多完全不同的思路:有人用公式直接秒杀,有人走邪修路线撞库,还有人面向结果硬编码。没有哪种是“错的”,重要的是你享受了琢磨的过程。一道题能自己想出解法、能看懂别人的思路,再举一反三——这种快乐,才是编程解谜真正好玩的地方。
PS如果想单独复制某一关的代码,建议用手机浏览器打开此攻略,而不是客户端
horizontal linehorizontal line
生涯模式攻略导航:
horizontal linehorizontal line
1. 输出1
第一关只让你习惯两件事:输出靠 return,不是print或者console.log;游戏键盘里没有分号,别找了。
return 1
2. 加一
记住:需要用什么,先去键盘上找
return 输入+1
3. 相反数
数学运算符都是积木在键盘上摆着,加减乘除、负号就是减号、甚至后面会出现的取整、求余,都不用自己敲,点就行
return -输入
4. 判断正数
比较运算符也是积木,>、<、==、!= 键盘上都能点出来,比较的结果直接就是 true 或 false
return 输入>0
5. 绝对值
这一关其实是给你两条路:自己搭逻辑,或者直接用现成的积木。后面很多题都是这样,没有唯一解,只有你的解法[表情_歪嘴笑]
解法一(if-else判断。多次用到的值可以存成变量)
变量a=输入
if ( 变量a>=0 ){
    return 变量a
} else {
    return -变量a
}
解法二(键盘上的...点开,里面有abs绝对值函数)
return Math.abs(输入)
6. 二倍
你不是在敲代码,你只是在选积木、搭积木
return 输入*2
7. 偶数
%是取余运算符,偶数能被2整除,也就是除以2余数为0。==上面提到过了,比较运算符,比较的结果就是true或false
return  输入%2==0
8. 计算正方形面积
教程里有提到的,幂是用两个乘号**表示的
return 输入**2
9. 计算总价
数组来了,取第一个元素(下标0)和第二个元素(下标1)相乘
return 输入[0]*输入[1]
10. 数字位数反转
注意这里输入是正数,不止是明面上的两位数,有隐藏的测试用例是三位数。从这关开始,你就要考虑到通用解法了,当然,你也可以偷懒手敲reverse反转
解法一(用数学思路,每次循环都会把个位数往前挪。注意变量a/10不一定会得到整数,必须用取整函数处理一下)
变量a=输入
变量b=0
while ( 变量a>0 ){
    变量b=变量b*10+变量a%10
    变量a=Math.floor(变量a/10)
}
return 变量b
解法二(这里有个小技巧,数字转字符串用+'',不嫌麻烦可以手敲输入.toString(),字符串转数字用-0,...是数组扩展运算符,可以把字符串转数组,split('')效果一样)
return [...(输入+'')].reverse().join('')-0
11. 平均分
return (输入[0]+输入[1])/2
12. 两数相加
return 输入[0]+输入[1]
13. 阶乘
注意0的阶乘是1。这里首次用到while循环了。*=和-=分别是累乘和累减的简写。新手也可以拆开来写变量a=变量a-1
变量a=输入
变量b=1
while ( 变量a>1 ){
    变量b*=变量a
    变量a-=1
}
return 变量b
14. 数字之和
每次取个位,加进总和,再砍掉个位。
变量a=输入
变量b=0
while ( 变量a>0 ){
    变量b+=变量a%10
    变量a=Math.floor(变量a/10)
}
return 变量b
15. 长度
前面处理数字、数组,现在轮到字符串了。.length 不用手打,点就完事
return 输入.length
16. 变成零
把自然语言翻译成代码:循环里套条件,记录步数,变量/=2也就是变量=变量/2的简写
变量a=输入
变量b=0
while ( 变量a>0 ){
    if ( 变量a%2==0 ){
        变量a/=2
    } else {
        变量a-=1
    }
    变量b+=1
}   
return 变量b
17. 不要零
数值要先转成字符串再操作。这里循环条件可以写成 while (变量a[变量b]),字符串越界访问不会报错,返回 undefined,转成布尔值是 false,循环自然结束。这样就不用单独算长度了。但要注意一点的是,如果变量a[变量b]会等于数值0(0就是false)就别用这种写法,这里因为已经转成字符了就没问题。
解法一
变量a=输入+''
变量b=0
变量c=''
while ( 变量a[变量b] ){
    if ( 变量a[变量b]!='0' ){
        变量c+=变量a[变量b]
    }
    变量b+=1
}
return 变量c-0
解法二(提前了解一下正则,/g表示匹配全部。一行代码能搞定的就是优雅)
return (输入+'').replace(/0/g,'')-0
18. 连招
这关的描述有点绕,简单来说就是找到字符串中,第一个只出现一次的字母。这里用indexOf来查找字符外字符串中的索引位置,如果没找到,就返回-1。indexOf可以传第二个参数,表示起始寻找的位置。没找到重复的就输出。
变量a=输入
变量b=0
while ( 变量a[变量b] ){
    变量c=变量a[变量b]
    变量d=变量a.indexOf(变量c)
    变量e=变量a.indexOf(变量c,变量d+1)
    if ( 变量e==-1 ){
        return 变量c
    }
    变量b+=1
}
return ' '
好了,到此你已经学会了这些连3~5岁小孩都会做的谜题了![表情_送花]
5
2
2