Watson1978
2/7/2012 - 12:30 PM

http://d.hatena.ne.jp/takeshinoda/20120207/1328611760

require 'rubygems'
require 'dispatch'

def induceBackwardSlow(nodes, values)
  n = values.length / 2
  nodes.map do |node|
    (node[2] * values[n + node[1]] +
     node[4] * values[n + node[3]] +
     node[6] * values[n + node[5]]) * node[0]
  end
end

ITERATION = 1000

def last_values(i)
  Array.new(201, i.to_f)
end

def test_tree
  99.downto(0).map do |i|
    (-i..i).map do |j|
      [1.0, j - 1, 1.0 / 6.0, j, 2.0 / 3.0, j + 1, 1.0 / 6.0]
    end
  end
end

puts((1..ITERATION).p_map do |i|
  test_tree.
    inject(last_values(i)) {|values, nodes| induceBackwardSlow(nodes, values) }.
    first
end.max)