再帰で書けそうだったので書いた
# 配列のデータに対して # * 符号がプラスの値が最大何回連続したか # * マイナスの値が最大何回連続したか # を計算したい def max_continuous_element_count(data, count_element, count = 1, max = 0) return max if data.size.zero? previous, current, = data if [previous, current].all?(count_element) max = count + 1 > max ? count + 1 : max else count = 0 end data.shift max_continuous_element_count(data, count_element, count + 1, max) end def solver(data) { positive: max_continuous_element_count(data.map(&:positive?), true), negative: max_continuous_element_count(data.map(&:negative?), true) } end pp solver([0.1, 0.5, 0.03, -19, -0.05, 0.1, 0.5, -0.2]) # => {:positive=>3, :negative=>2}