Skip to content

Instantly share code, notes, and snippets.

@joebew42
Created April 30, 2013 15:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save joebew42/5489610 to your computer and use it in GitHub Desktop.
Save joebew42/5489610 to your computer and use it in GitHub Desktop.
class StringCalculator
attr_reader :array_numbers
def add(string)
return 0 if string == ''
@array_numbers = extract_array_of_numbers_from string
raise "negative not allowed #{negative_numbers.to_s}" if negative_numbers.size > 0
@array_numbers.size == 1 ? string.to_i : sum_array_of_numbers
end
private
def extract_delimiter(string)
delimiter = /^\/\/(.)\n/.match string
return delimiter[1] if delimiter != nil
delimiters = extract_delimiters_with_arbitrary_length(string)
return delimiters.join('|') unless delimiters.size == 0
return ','
end
def extract_delimiters_with_arbitrary_length(string)
string.scan(/\[(\w+)\]/)
end
def extract_array_of_numbers_from(string)
string.split(/(#{extract_delimiter(string)}|\n)/).map {|num| num.to_i}
end
def negative_numbers
@array_numbers.select {|num| num < 0}
end
def sum_array_of_numbers
@array_numbers.select{|num| num < 1000}.reduce(:+)
end
end
@xpepper
Copy link

xpepper commented Apr 30, 2013

FYI, here's my (old) take on this kata: https://github.com/xpepper/string_calculator

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment