JavaScript学习 CodeWars 打怪升级日记 你最少需要准备几把伞

CodeWars 是一个在线编程网站,其奖励机制像打怪升级。你不能查看高于你级别的问题的答案。除非自己通过提交测试。通过提交之后可以看到各种解法排行榜 。通过对比自己解法和排行榜对比,可以找到差距,提高能力。

题目意思:

题目地址
我简单的翻译: 一个人每天从家去公司,如果早晨下雨就从家带把伞到公司,如果下午不下雨就不把伞带回家。 如果早晨不下雨,则不带伞去公司,但是下午下雨会从公司带伞回家。 输入为 一个数组值为未来几天的天气预报,一天两次,分别为早上和下午的天气预报。只有"rainy" 和 "thunderstorms" 需要下雨,其他天气不需要。 计算出 为了保证不淋雨至少需要几把伞。
函数名为: minUmbrellas
e.g.
minUmbrellas(["rainy", "clear", "rainy", "cloudy"])
// should return 2
// Because on the first morning, he needs an umbrella to take, and he leaves it at work.
// So on the second morning, he needs a second umbrella.

我的解法

function isRainy(w) {
	if(w === 'rainy'|| w === 'thunderstorms') {
		return true;
	}
	return false;
}

function isHome(day) {
  if(day % 2 === 0) {
    return true; 
  }
  return false;
}
function minUmbrellas(weather) {
  // TODO
  let s = 0,
    h = 0, 
    w = 0,
    ha = [],
    wa = [];
    weather.forEach( (item, index) => {
    	
      if(isRainy(item)) {
        if(isHome(index)) {
          h = h - 1;
          w = w + 1;
        } else {
          w = w -1;
          h = h + 1;
        }
        ha.push(h);
        wa.push(w);
      }
    })
    
    let min = 0;
    ha.forEach( un => {
      if(un < min)  {
        min = un;
      }
    });
    let minW = 0;
    wa.forEach( un => {
    	if( un < minW) {
    		minW = un;
    	}
    })
    return -min - minW;
}

codewars最佳实践

function minUmbrellas(w) {
  var rain="rainy,thunderstorms",home=0,office=0
  for(var i=0;i<w.length;i+=2){
    if(rainingAtMorning()){
      if(noUmbrellaInHome()) buyAnUmbrellaAtHome()
      takeUmbrellaToOffice()
      if(rainingAtAfternoon()) takeUmbrellaToHome()
    }
    else if(rainingAtAfternoon()) {
      if(noUmbrellaInOffice()) buyAnUmbrellaAtOffice()
      takeUmbrellaToHome()
    }
  }
  return home+office
  
  function rainingAtMorning(){return rain.includes(w[i])}
  function rainingAtAfternoon(){return rain.includes(w[i+1]+"")}
  function noUmbrellaInHome(){return home==0}
  function noUmbrellaInOffice(){return office==0}
  function buyAnUmbrellaAtHome(){home++}
  function buyAnUmbrellaAtOffice(){office++}
  function takeUmbrellaToOffice(){home--;office++}
  function takeUmbrellaToHome(){home++;office--}
}

几个测试用例

有几个测试用例,看到这道题目的同学自己试一下吧
minUmbrellas(["sunny", "windy", "sunny", "clear"])
// should return 0
// Because it doesn't rain at all

minUmbrellas(["rainy", "rainy", "rainy", "rainy", "thunderstorms", "rainy"])
// should return 1

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值