私のコードは正しいと思いますが、N = 200に間に合うように配列を返しません。エラーは「タイムアウトのため終了しました」です。 このコードのパフォーマンスを向上させるにはどうすればよいでしょうか?
def is_palindrome? (n)
n.to_s==n.to_s.reverse
end
def is_prime? (n)
return false if n< 2
(2..Math.sqrt(n)).none? {|f| n % f == 0}
end
prime_palindrome =-> (n) do
1.upto(Float::INFINITY).lazy.select { |n| is_prime?(n) && is_palindrome(n) }.first(n)
end
n = gets.to_i
p prime_palindrome.call(n)
Ruby はこれをより速く行う方法を知っています。
require 'prime'
Prime.each.lazy.
select { |p| p.to_s.then { |s| s == s.reverse } }.
take(200).to_a