user3344741
user3344741

Reputation: 87

adding 1 to each element of an array

i tred creating a method called "Sum_plus_one" that accepts an array argument containing integers. Themethod should return the sum of the integers in the array after adding one to each of them.

example: sum_plus_one([1,2,3])

result should be: 9

my code looks like this

def sum_plus_one(*nums)

     for num in nums
     num + 1
     end
     total = 0
     for num in nums
     total += num
     end
 return total
end

Upvotes: 1

Views: 1534

Answers (5)

seph
seph

Reputation: 6076

map/reduce is handy here:

def sum_plus_one(nums)
  nums.map(&:succ).reduce(:+)
end

Edit:

here is one way to make your code work:

def sum_plus_one(nums)
  nums.map! do |num|
    num + 1
  end

  total = 0
  for num in nums
    total += num
  end

  return total
end

Upvotes: 1

mu is too short
mu is too short

Reputation: 434865

Why not do a little bit of math beforehand and see that summing the array-elements-plus-one is the same as summing the elements and then adding the array length? For example:

(5+1) + (6+1) + (11+1) = 5 + 6 + 11 + (1 + 1 + 1)
                       = 5 + 6 + 11 + 3

That gives you something nice and simple:

array.inject(:+) + array.length

Upvotes: 5

akonsu
akonsu

Reputation: 29576

your problem is that you need to assign your num + 1 value to the corresponding element of the array that you are enumerating in the first loop.

maybe something like this:

for i in (0...nums.count)
    nums[i] += 1
end

after that your program should work

(yes, you can use fancy libraries or constructs instead of the above loop)

please note that you can eliminate the top loop and just add num + 1 to your total in the second loop.

Upvotes: 0

bjhaid
bjhaid

Reputation: 9782

Use Enumerable#inject

[105] pry(main)> arr
=> [1, 2, 3]
[106] pry(main)> arr.inject(0) { |var, i| var + i + 1 }
=> 9

So the method would look like

def sum_plus_one(*nums)
  nums.inject(0) { |var, num| var + num + 1 }
end

Upvotes: 1

Rafa Paez
Rafa Paez

Reputation: 4860

Functional Style Version

[1, 2, 3].reduce(0) {|acc, n| acc + n + 1}

Upvotes: 1

Related Questions