=begin Reducer 配列等のイテレータから適切な値をスキャンして抜き出すクラス。O(n)である。 Reducer#reduce(iter) iterはempty?とeachメソッドを実装している必要がある。 Reducer#update?(left, right) 抽象メソッドである。 サブクラスでオーバーライドして使用する。 値を更新する場合にtrueを返し更新しない場合はfalseを返す。 =end class Reducer def reduce(iter) return nil if iter.empty? cur = nil iter.each.with_index {|value, index| if index.zero? cur = value else cur = value if update?(value, cur) end } return cur end