5

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 進数の値を持っているかわかりません。

何か案は?

4

3 に答える 3