# -*- coding: utf-8 -*- # http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%2049 # # 4桁の3つの素数について以下の条件が成立するものを探す. # 1. 等差数列である. # 2. 各項は他の項の置換で表される. # require 'prime' # 素数候補 primes = Prime.each(10000).map{|prime| prime < 1000 ? nil : prime}.reject{|v| v.nil?} puts primes.each_index.reduce([]) {|ret1, i| ret1 + (i + 1 ... primes.size).reduce([]) {|ret2, j| a = primes[i] b = primes[j] c = b + (b - a) ret2 + if (c.prime?) # a, b, cが等差数列の素数であるなら # 各項は他の項の置換で表されるか判定する. aa = a.to_s.chars.to_a.sort bb = b.to_s.chars.to_a.sort cc = c.to_s.chars.to_a.sort if (aa == bb && bb == cc) [[a,b,c]] else [] end else [] end } }.pop.join("")