当前位置: 首页 > 知识库问答 >
问题:

为什么在Ruby中触发变量等于触发值之前返回false?almostreadingsequency Codefights

逄烨
2023-03-14

我用来改进编码的工具之一是Codefights。我已经被同一个问题困了好几天了,需要一些帮助来解决它。有人能告诉我我在这里做错了什么吗?

以下是Codefights的说明:

给定一个整数序列作为一个数组,确定是否可以通过从数组中移除不超过一个元素来获得一个严格递增的序列。

[输出]布尔

如果可以从数组中移除一个元素以获得严格递增的序列,则返回true,否则返回false。

下面是我正在尝试的代码。在错误添加了1之后和末尾,我将“#{prev}”放入几次,以查看prev最初设置为什么,因此记录了最后的prev

def almostIncreasingSequence(sequence)
  prev = [sequence[0], sequence[1]].min
  puts "#{prev}"
  wrong = 0
  (sequence.length - 1).times do |num|
    if prev < sequence[num + 1]
      prev = sequence[num + 1]
    else
      wrong += 1
      return false if wrong == 2
      puts "#{prev}"
    end
  end
  puts "#{prev}"
  true
end

这是目前唯一无法通过的测试:

(almostIncreasingSequence([1, 2, 3, 4, 99, 5, 6]) 

这应该是真的,因为可以拉出99并且可以继续递增序列。但是false似乎是在错误只添加一次之后返回的。

代码应该返回false如果put“#{prev}”输出中的错误==2,我可以看到prev起源于1,并且当99大于5时会触发错误,而且由于错误应该只在1111时如果在第一次添加错误后设置prev=sequence[num-1],我就可以通过这个测试,但是其他很多测试都无法通过。下面是我正在尝试的其他测试的列表。大多数是Codefights要求您在进入下一个练习代码之前必须通过的测试。

(almostIncreasingSequence([1, 3, 2])) #true
(almostIncreasingSequence([1, 2, 1, 2])) #false
(almostIncreasingSequence([10, 1, 2, 3, 4, 5])) #true
(almostIncreasingSequence([0, -2, 5, 6]) )#true
(almostIncreasingSequence([1, 2, 3, 4, 5, 3, 5, 6])) #false
(almostIncreasingSequence([40, 50, 60, 10, 20, 30])) #false
(almostIncreasingSequence([1, 2, 3, 4, 3, 6])) #true
(almostIncreasingSequence([100, 200, 300, 400, 99, 500, 600])) #true
(almostIncreasingSequence([1, 3, 2, 1])) #false
(almostIncreasingSequence([1, 4, 10, 4, 2])) #false
(almostIncreasingSequence( [1, 1, 1, 2, 3])) #false
(almostIncreasingSequence([1, 1])) #true
(almostIncreasingSequence([10, 1, 2, 3, 4, 5, 6, 1])) #false

提前感谢你对这个问题的任何看法。


共有1个答案

易书
2023-03-14

看起来错误只添加了一次,因为puts出现在return之后,所以永远不会调用它。在返回之前移动它会发现错误实际上是增加了两倍。

问题的核心是,当您增加错误时,您的prev值将保持设置为99,这使得后续的每个值都是错误的。您确实需要将prev设置为sequence[num-1]以防止发生这种情况,但正如您所说,这会导致错误。这是因为当您从数组中删除一个错误的数字时(例如[1,2,1,2]->[1,1,2]),您需要再次检查这两个现在连续的数字是否一起工作,在本例中它们不工作。

您可以修复这个问题,但是在[10,1,2,3,4,5]这样的情况下,您会遇到另一个错误,其中开始的prev`值实际上不是您的第一个值。

最终,您将会遇到很多bug,因为您的解决方案背后的逻辑复杂且不直观,人类无法遵循。按照这种方法,您最终可以得到您的答案,但您可能希望重新审视问题并从头重新设计代码。

 类似资料:
  • 我是个流口水的新手。我创建了以下对象: 和a*。包含规则的drl文件: 在Postman中,我试图用以下主体调用规则: 我得到了以下答案: 问题是,我的值为空,而不是我期望作为响应的对象。server.log是空的,我看不出有什么问题。请你帮我。 非常感谢你。

  • 问题内容: 我的代码中有一个。我已添加。但是它还是没有被触发。我已经尝试了很多时间,但是没有找到解决方案。 但是控制台中没有任何内容。请建议我我在做什么错。 问题答案: FocusListener不是JComboBox的适当监听器,另外一个监听器可以创建无限循环(尤其是可编辑的JComboBox), 的FocusListener是异步的,有时是太难捕捉事件是正确的订单特别是在案件JComponen

  • 我已经在我的网站上设置了GTM,我有一个在以下条件下触发的触发器 触发器的GTM条件 当我测试标签时,它不会启动。我检查了元素的值为 那么,当我使用regex或contains操作符时,为什么GTM不起作用呢。还有其他人面临过这个问题吗? 此页上几乎没有触发器(https://luminaryproperties.co.uk/venturing-into-your-first-off-plan/?

  • 下面是有问题的代码: 目前,在

  • 问题内容: 来自javascript类型的jQuery文档中的这段代码片段描述了转换为布尔值时字符串的行为(该主题与该问题无关,但这只是我找到代码的地方): 我得到了前三个示例,但没有得到最后一个示例,因为: 所以我假设: 但反而: 我什至不知道这是什么… 是因为: 如果是这样,这有什么目的? 问题答案: 返回一个不为null 的 对象 。非空对象始终是真实的。 结果,任何非null对象将始终为f

  • 问题内容: 它的用途是什么? 问题答案: 它将语句定界符从更改为。这样一来,您就可以在触发器定义中编写代码,而无需MySQL客户端将其误解为已完成操作。 请注意,改回来时是,而不是我见过的人们尝试做的。