今天遇到codewars的一道题,这是链接,讲的是关于万圣节的一个题目,简单点说,就是9个包裹,一个天平,两次称的机会,怎么找出9个包裹中唯一一个较重的包裹。
像我这种年轻时候喜欢研究难题获得存在感的蠢材,觉得很开心,因为这是我为数不多还记得答案的小学题。包裹分成三堆,取两个堆一称,可以得到哪个是比较中的一堆,然后再在这个异常的堆里选择两个称,找到嫌疑犯X。
于是我开始码代码
function pick(bags, scale) {
switch(scale.weigh([bags[0],bags[1],bags[2]], [bags[3],bags[4],bags[5]])){
case 0:switch(scale.weigh([bags[6]],[bags[7]])){
case 0:return bags[8];
break;
case 1:return bags[7];
case -1:return bags[6];
}
break;
case 1:switch(scale.weigh([bags[3]],[bags[4]])){
case 0:return bags[5];
case 1:return bags[4];
case -1:return bags[3];
}
break;
case -1:switch(scale.weigh([bags[0]],[bags[1]])){
case 0:return bags[2];
case 1:return bags[1];
case -1:return bags[0];
}
break;
}
}
呵呵呵呵
觉得有点开心啊,写完第一个case,开始复制粘贴,轻松加愉快。为什么只给我了一点KATA!
于是去看best solution。
function pick(bags, scale) {
bags = [bags.slice(0,3), bags.slice(3,6), bags.slice(6)];
var scaleResult = scale.weigh(bags[0], bags[2]); bags = bags[scaleResult+1];
var scaleResult = scale.weigh([bags[0]], [bags[2]]); return bags[scaleResult+1];
}
唉。
何时能长大啊,自然语言和程序语言的差别啊。
P.S.试了一下幼圆字体,着急啊。