为了账号安全,请及时绑定邮箱和手机立即绑定

我的代码战脚本未通过测试 ..?(系列中最大的 5 位数字)

我的代码战脚本未通过测试 ..?(系列中最大的 5 位数字)

ibeautiful 2022-09-23 09:17:38

这里的脚本初学者。我正在尝试代码战(挑战)卡塔。它一直告诉我,我的解决方案不起作用,我想知道为什么。如何修复代码以使其正常工作?以下是问题的内容。


"Complete the solution so that it returns the greatest 

sequence of five consecutive digits found within the number given."


"1234567890" - 67890 is the greatest sequence of 5 consecutive digits.

链接到卡塔:https://www.codewars.com/kata/51675d17e0c1bed195000001/train/javascript


我的代码:


function solution(digits){

  digits = +digits.split('');

  let solution = 0;

  for (let i = 0; i < digits.length; i++) {

    let pending = digits[i] + digits[i+1] + digits[i+2] + digits[i+3] + digits[i+4];

    if (pending > solution) {

      solution = pending;

    }

  }

  return solution;

}

最佳/最解释的答案将获得绿色复选标记。让我知道我的解决方案有点多余也不会有什么坏处 谢谢!


查看完整描述

1 回答

?
万千封印

TA贡献1576条经验 获得超1个赞

你误解了“最伟大的”。您不必添加数字,而是将所有5个连续的数字作为数字。你可以这样写:


let pending = digits[i]*10000 + digits[i+1]*1000 + digits[i+2]*100 + digits[i+3]*10 + digits[i+4];

事实上,如果你不乘以,12345会给你1 + 2 + 3 + 4 + 5 = 15,但你必须得到12345,而不是15。


另外,您必须在结束前5位数字停止循环:


for (let i = 0; i < digits.length-4; i++) {

另一个错误是您转换为数字的数组:


digits = digits.split('').map(x=>+x);

您的解决方案如下所示:


function solution(digits){

  digits = digits.split('').map(x=>+x);

  let solution = 0;

  for (let i = 0; i < digits.length -4 ; i++) {

    let pending = digits[i]*10000 + digits[i+1]*1000 + digits[i+2]*100 + digits[i+3]*10 + digits[i+4];

    if (pending > solution) {

      solution = pending;

    }

  }

  return solution;

}

这就是我本来会做的:


function solution(digits){

  return Math.max(...digits.split('').map((x,i,a)=>+(a.slice(i, i+5).join(''))))

}

你拿“数字”,然后创建一个数组,其中包含所有分隔的数字:


digits.split('')

使用此数组,对于每个索引 (i),您将 5 个连续数字的序列放入另一个数组中:


.map((x,i,a)=>a.slice(i, i+5)

您加入以下数字:


.join()

你把它转换成一个数字:


+

您最多服用:


Math.max(...)


查看完整回答
反对 回复 5天前
  • 1 回答
  • 0 关注
  • 8 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信