美文网首页
2020-05-15 5kyu Car Park Escape

2020-05-15 5kyu Car Park Escape

作者: 苦庭 | 来源:发表于2020-05-15 22:07 被阅读0次

https://www.codewars.com/kata/591eab1d192fe0435e000014/javascript

My answer

function escape(arr){
  var res = [];
  var curPos, next, diff, dCount = 0, dFlag=false, startFlag=true;
  for(let level=0; level<arr.length; level++){
    if(!arr[level].includes(2) && startFlag) continue;
    if(startFlag) curPos = arr[level].indexOf(2);
    startFlag = false;
    diff = 0;
    
    if(curPos == arr[level].length-1 && level == arr.length-1) return res;

    if(arr[level].reduce((a,b)=>a+b) == 0 || level == arr.length-1){
      next = arr[level].length-1;
      diff = curPos - next;
    }else{
      next = arr[level].indexOf(1);
      diff = curPos - next;
    } 
    
    if(diff>0) {
      res.push("L"+diff);
      curPos = curPos - diff;
      dFlag = false;
    } else if(diff<0) {
      res.push("R"+(-diff));
      curPos = curPos - diff;
      dFlag = false;
    }
    let dCount = 0;
    if(arr[level][curPos]===1 && dFlag) continue;
    for(let l=level; arr[l][curPos]===1;  ++dCount, ++l) ;
    if(dCount!=0) res.push("D"+(dCount));
    dFlag = true;
  }
  return res;
}

哪里要改进?

  • 使用了很多中间变量,有的可以通过思路转换来优化(比如学BA那样,最后一行的时候单独处理再拼接到原数组后面)
  • 比较这里while循环比for循环的好处?使用for循环的时候思维总是比较线性,针对原停车场是一层一层来处理;while循环只要满足“没超过最低层数”就一直往下走(在连续下楼的问题上思维更加不受index的制约)。anyway只要能完成题目,都是好循环。

Best Answer

function escape(carpark){
  var seq = [], i=carpark.findIndex(r=>r.includes(2)), x=carpark[i].indexOf(2);
  while(i<carpark.length-1) {
    let idx = carpark[i].indexOf(1), down = 0,
        dist = idx-x;
    seq.push(dist<0?`L${-dist}`:`R${dist}`);
    for(;carpark[i][idx]===1; down++,i++);
    seq.push(`D${down}`);
    x = idx;
  }
  return x===carpark[0].length-1?seq:seq.concat(`R${carpark[0].length-1-x}`);
}

哪里好?

  • 大量使用三元表达式、模板字符串简洁语句
  • findIndex()参数为回调函数能够在数组里面找到满足该回调函数的元素
  • 这里的i是指针,表明当前处理位置。因此最后一行需要单独处理。

Recap

  • 熟悉了Array.prototype.findIndex(callbackFn)的新用法
  • 多考虑使用模板语法、三元表达式
  • 这题很有趣,我也做得很棒。

相关文章

网友评论

      本文标题:2020-05-15 5kyu Car Park Escape

      本文链接:https://www.haomeiwen.com/subject/cfahohtx.html