[5 kyu]Simple digit code breaker
我偷了一个会说话的行李箱⌚️2016.03.15
怪兽的属性:
&
怪兽的技能:
大木博士的图鉴:
你今天照常在火车站偷东西,这次的收获是一个行李箱。正打算依具《偷术大全》里面的建议,强行把她拆开。但却在拍干净手掌,蹲下身子,准备把她举到头上的时候,你突然听到有人在说话。
“喂”
环顾四周却又没有看到什么人。
“把我放下来!”
声音又响起来,你感觉声音是从上方传来的,不禁抬头看了看手上的行李箱。
你赶紧把箱子放了下了,这个过程中,箱子里还有隐约有“哎飒哟飒”的嘟囔。“里面难道有人?”你心里突然冒出这样一个奇怪而可怕的猜测,那么为什么有个人呢?
...具体情节请看《箱之少女》...
最后,你了解到,这个箱子的密码会在每十次尝试之后再自动随机生成一个新密码。
- 一开始他回返回个‘空(null)’给你,你得处理这个‘空(null)’,再返回给他一个由0~9三个正整数组成的数组。
这个数组将会和密码匹配后再返回一个数组(我们唤其为 差距数组)。差距数组表示输入数与密码数之间的差距:
- 输入数 < 密码数 --> +1
- 输入数 > 密码数 --> -1
- 输入数 = 密码数 --> 0
- 10次尝试不成功之后,旧密码失效,新密码将重新生成。
快快想出办法来,拯救箱中的少女,然后做些♨️羞羞的事情吧!
战斗记录仪回放:
var guess = [5, 5, 5];①
function tryCode(indications) {
if (indications != null) {
for (var i = 0; i <= 2; i++) {
guess[i] += indications[i];
}
}
return guess;②
}
?竹节:
这个应当可以放入 tryCode 方法中去,单独放置在外面,略微不合适。
- 实现单一出口。
✨两处都可以简化,因为 差距数组 的值,就是 猜测数组 要进行的调整。
var guess = [5, 5, 5]; function tryCode(indications) { if (indications != null) { for (var i = 0; i <= 2; i++) { if (indications[i] == 1)✨ ++guess[i]; if (indications[i] == -1)✨ --guess[i]; } } return guess; }
- 失误,‘=’ 和 ‘==’ 。
var guess = [5, 5, 5];
function tryCode(indications) {
if (indications != null) {
for (var i = 0; i <= 2; i++) {
if (indications[i] = 1)✨
++guess[i];
if (indications[i] = -1)✨
--guess[i];
}
}
return guess;
}
- 一开始只把 差距数组 看成表达 大小关系。于是想着用 二分法 来进行调整,最后发现比较复杂,需要考虑的太多。
国际战场的经典录像
zarjay
var tryCode = (function() {
var guess = [5, 5, 5];
②return function(indication) {
guess = indication ?③ guess.map④(function(d, i) { return d + indication[i]; }):guess;
return guess;
}
})();①
?竹节:
(function(){})();
?- 创建并立即执行函数 js中(function(){…})()
- 使用
(function(){}())
也可实现相同的效果 知乎-(function(){}())和(fucntion(){})()
function(){return funciton(){}}
??
&:
?- 条件(三元[目])运算符----(condition)? expr1 : expr2
- 是 JavaScript 仅有的使用三个操作数的运算符。本运算符经常作为 if 语句的简短形式来使用。
- 如果条件值为真值(true),运算符就会返回 expr1 的值;否则, 就会返回 expr2 的值。
map()
?
adolfo7x, chunghanliou
var digits = [5, 5, 5];
function tryCode(indications) {
if (!①indications){
digits = [5, 5, 5];
return digits;
}
return digits = digits.map(function(value, index){
return value + indications[index];
});
}
竹节:
!
?!
:逻辑非* `!(expr)`
- 如果单个表达式能转换为
true
的话返回false
,否则返回true
. - 能够转换为
false
的表达式有:null
,0
,""
和undefined
.
- 如果单个表达式能转换为
- ∴ 原表达式 =
if(indications == false)
map()
?- JQ的一个遍历方法。
- 《串串香》中的 map 的笔记
- 如果调用该方法的数据是数组A则 从数组A吃一个数,进行加工并把加工的结果吐出到一个新数组B中去,待吐完最后一个数后把数组B返回去。
MaximeDesRoches
function tryCode(indications) {
if(indications == null) {
tryCode.test = [5,5,5];①
return tryCode.test;
}
return tryCode.test = tryCode.test.map(function(c, i){
if (indications[i] === 0) return c;
return (indications[i] === 1) ? ++c : --c;
});
}
竹节:
为什么tryCode.test在运行结束之后没有被回收呢?
- 感觉和闭包有关系。
- 等待回答
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。