ブログ

読んで思い出す。忘れるために書く

配列から条件に合う連続した要素の最大カウント数を計算する

teratail.com

再帰で書けそうだったので書いた

# 配列のデータに対して
# * 符号がプラスの値が最大何回連続したか
# * マイナスの値が最大何回連続したか
# を計算したい

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}

Link