def sum(i); @b[i].inject(:+); end max = 0 @b = Array.new(5) [10, 9, 8, 7, 6, 5, 4, 3, 2, 1].permutation(10) do |a| next unless a[0] == 10 or a[1] == 10 or a[2] == 10 or a[3] == 10 or a[4] == 10 @b[0] = [a[0], a[5], a[6]] @b[1] = [a[1], a[6], a[7]] @b[2] = [a[2], a[7], a[8]] @b[3] = [a[3], a[8], a[9]] @b[4] = [a[4], a[9], a[5]] next unless sum(0) == sum(1) and sum(0) == sum(2) and sum(0) == sum(3) and sum(0) == sum(4) i = a[0..4].index(a[0..4].min) @b.rotate!(i) b = @b.map {|x| x.map {|y| y.to_s}}.flatten num = b.inject("") {|r, i| r + i}.to_i max = num if max < num end puts max
Problem 69。野良Gem 'Utilsc' についてはここを参照。
require 'bundler/setup' require 'utilsc' max = [0, 0] 6.step(1_000_000, 6) do |n| a = n / n.totient.to_f p max = [a, n] if max[0] < a end puts max[1]
それにしてもどうしようもないコードで、終わるまでに 4時間45分もかかった…。