Rubyのmapは面倒な気が
オイラープロジェクト32問目。a*b=cで、a、b、cをつなげた数字が123456789のすべてを1つずつ含む組み合わせを求める。
def pandigital? (n) n.split(//).sort.join.to_i == 123456789 end result = [] (1..10000).each do |i| (1..10000).each do |j| break if j > i p = i * j next unless [p, i, j].map{|n| n.to_s.size}.inject(:+) == 9 if pandigital?([i, j, p].map{|x| x.to_s}.join) then print "#{i} x #{j} = #{p}\n" result << p end end end print "result: #{result}\n" print "sum: #{result.uniq.inject(:+)}\n"
オブジェクトの間にメソッドを挟みこむinjectのときには、シンボルをメソッドとして渡せるけど、mapのときにはそうはいかない。ん?
[1,2,3].map(:to_s)とか書ければいいのにと思うんだけど、実際には
[1,2,3].map(&method(String::to_s)) => ["1", "2", "3"]
みたいにやるか、
tos = ->(n) {n.to_s} [1,2,3].map &tos => ["1", "2", "3"]
みたいにやるしかない。ような気がする。