2017-07-29 19 views
0

我認爲我對這個codewars挑戰有一個很酷的解決方案,但是我沒有通過最後的測試,因爲它在我的數組的開頭添加了一個額外的1,我不知道爲什麼!在IRB中,我的代碼似乎工作正常。Codewars蝸牛測試錯誤或代碼錯誤?

@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]

回答

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 
+0

啊,是由於這是有道理的!我一直認爲我會保持@arr每次遞歸,並沒有這樣想。學習這麼多... :) – pyan

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] 
+1

不錯。用array.any替換'array [0]?'可能會更好一些? ?'或'array.empty? ?(對於後者,反過來)。 –