1 を除算したときに、繰り返し数の最長の文字列を生成する 1000 未満の数を見つけようとしています。10 進数のリストがあり、最も長い繰り返しシーケンスを持つものを見つける必要があります。
これが私がこれまでに持っているものです
numbers = [*2..999]
decimal_representations = numbers.map { |number| 1.to_f/number }
decimal_representations.map!(&:to_s)
正規表現を使用して 3 次元配列を生成できます。正規表現/(.+)\1+/
は、繰り返される部分文字列の配列を生成します。最長の部分文字列を見つけたいので、enumerable のmax_by
関数を使用しました。
decimal_representations.map! { |decimal| decimal.scan(/(.+)\1+/).max_by(&:length) }.flatten
nil
要素を削除するには、配列を圧縮する必要があります
decimal_representations.compact!
次に、どれが最も長いかを調べることができます。
decimal_representations.max_by(&:length)
を取得0090009009
しましたが、配列から nil 要素を削除したため、どの数値がその 10 進数の値を持っているかわかりません。
何か案は?