# @param {Integer[]} nums
# @return {Integer}
def wiggle_max_length(nums)
  return nums.size if nums.size < 2
  up = nil
  i = 1; res = 0
  while i < nums.size
    while i < nums.size and (
      (up == nil and nums[i] == nums[i-1]) or
      (up == true && nums[i] >= nums[i-1]) or
      (up == false && nums[i] <= nums[i-1]))
      i += 1
    end
    up = (up == nil and i < nums.size) ? nums[i] > nums[i-1] : !up
    res += 1
  end

  return res
end

p wiggle_max_length([1,17,5,10,13,15,10,5,16,8]) # => 7