私は codewars でトレーニングを始めた初心者ですが、この RLE 問題のどこに間違いがあるのか わかりません。手順は次のとおりです。
あなたの仕事は、そのようなランレングスのエンコーディングを書くことです。与えられた文字列に対して、ペア (または配列) [ (i1, s1), (i2, s2), …, (in, sn) ] のリスト (または配列) を返します。文字 sx を ix 回使用し、それらすべての文字列を連結します。ランレングス エンコーディングは最小限にする必要があります。すべての i について、値 si と si+1 は異なる必要があります。
例
>rle("hello world!")
# => [[1,'h'],[1,'e'],[2,'l'],[1,'o'],[1,' '],[1,'w'],[1,'o'],[1,'r'],[1,'l'],[1,'d'],[1,'!']]
>rle("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbb")
# => [[34,'a'], [3,'b']]
そして、ここに私のコードがあります:
def rle(str)
result=[[]]
str.to_s.split.each do |word| #"Hello World"->["Hello","World!"]-->"Hello", "World!"
new_word_count=[[]]
word.each_char do |char| #"H","e","l"...
new_char=true
new_word_count.map! do |find|
if find[1]==char
find[0]+=1
new_char=false
break
end
end
if new_char==true
new_word_count<<[1,'char']
end
end
result+=new_word_count
end
result
end
次のエラーが表示されます。
`block (3 levels) in rle': undefined method `[]' for nil:NilClass (NoMethodError)
from `map!'
from `block (2 levels) in rle'
from `each_char'
from `block in rle'
from `each'
from `rle'
from `
'
ランレングス エンコーディング (RLE) は、非常に単純な形式のデータ圧縮であり、ラン データ (つまり、同じデータ値が多くの連続するデータ要素で発生するシーケンス) が単一のデータ値として格納され、カウントされるのではなく、オリジナルランとして。ウィキペディア