2017-07-29 8 views
0

私はこのcodewarsチャレンジにかなりクールな解決策があると思いますが、最後のテストに失敗しました。なぜなら、余分な1を私の配列の先頭に追加していて、なぜそれがわからないのですか? IRBでは、私のコードは正常に動作するようです。 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 = [] 

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

@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 [0]?'を 'array.any? 'に置き換える方が良いかもしれません。 ? 'または' array.empty? ? '(そして、後者の場合は、これを逆にする)。 –

関連する問題