Forked from dbc-challenges/phase0_template_gist.rb
Last active
January 2, 2016 13:29
-
-
Save carolineartz/a32374538d4990110ee9 to your computer and use it in GitHub Desktop.
Exercise: Calculating the array total
Write a method total which takes an Array of numbers as its input and returns their total (sum).
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# PSEUDOCODE | |
# INPUT: an array of numbers | |
# OUPUT: sum of all numbers in array | |
# STEPS: start with a total of zero | |
# iterate over each element in the array | |
# for each element, add its value to the total | |
# return the total after there are no more elements | |
# INITIAL CODE: | |
def total(array) | |
total = 0 | |
array.each do | x | | |
total += x | |
end | |
total | |
end | |
# REFACTORED CODE: | |
def total(array) | |
array.reduce(:+) | |
end | |
# REVIEW/REFLECT | |
# My approach has typically been to start with pseudocode. I | |
# solved this challenge to my initial code pretty easily simply by translating | |
# my pseudocode from ~english to code using the most basic of methods. At | |
# times, I think if I know one way to acheieve the goal in Java and how that | |
# could map to Ruby. Here, instead of using a for loop I went for ruby's #each | |
# (knowing Ruby's for loop is less preferable). | |
# Though there isn't much repetition but a good candidate for the refactoring | |
# practice: Replace Loop with Collection Closure Method (because of my | |
# original #each). I remember that #inject and #reduce do something of this | |
# sort and learning more about them was very helpful. I prefer #reduce simply | |
# because its easier for me to conceptualize given the method name vs. | |
# #inject. Using ruby docs via Alfred -> Dash workflow, it was easy to look | |
# them up, but I still find myself working through the shorthand and/or | |
# notation e.g., `:+` ...the use of the symbol passes the #+ method to the | |
# beginning of the array and accumulates across iterations #e.g., | |
# [1,2,3].reduce(:+) => 1.+2.+3 => 3.+3 => 6. I used stackoverflow and some | |
# good blog posts on Enumerables and collections to look into the concepts. | |
# Hopefully I can solidify this by using these and other enumerables | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment