Codewars蜗牛测试错误或代码错误?

时间:2017-07-29 09:34:10

标签: arrays ruby testing recursion

我认为我对这个codewars挑战有一个非常酷的解决方案,但我没有通过最后一次测试,因为它在我的数组的开头添加了额外的1,我不知道为什么!在IRB中,我的代码似乎工作正常。

@arr = []

def snail(array)
  array.to_a.empty? ? (return @arr.flatten) : @arr << array.shift
  snail(array.transpose.reverse)
end

snail([[1, 2, 3], [4, 5, 6], [7, 8, 9]])期待[1, 2, 3, 6, 9, 8, 7, 4, 5][1, 1, 2, 3, 6, 9, 8, 7, 4, 5]

2 个答案:

答案 0 :(得分:1)

这里的问题是@arr在测试之间没有被清除。因此,据推测,失败之前的测试类似于snail([[1]]),这会使@arr = [[1]](在展平时,会在前面添加额外的1

解决方案是在完成特定测试用例时清除@arr,如下所示:

@arr = []

def snail(array)
  if array.to_a.empty?
    output = @arr.flatten
    @arr = []

    return output
  else
    @arr << array.shift
  end
  snail(array.transpose.reverse)
end

答案 1 :(得分:1)

def snail(array)
  head, *tail = array
  head ? head + snail(tail.transpose.reverse) : []
end

arr = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
snail(arr) #=> [1, 2, 3, 6, 9, 8, 7, 4, 5]