Skip to content

Instantly share code, notes, and snippets.

@jacegu
Created April 17, 2013 14:32
Show Gist options
  • Save jacegu/5404786 to your computer and use it in GitHub Desktop.
Save jacegu/5404786 to your computer and use it in GitHub Desktop.
My erlang practice of the day.
-module(kata).
-import(lists, [map/2, foldl/3]).
-include_lib("eunit/include/eunit.hrl").
add("") -> 0;
add(Operators) ->
lists:foldl(fun(Number, Acumulator) -> Number + Acumulator end, 0, extractNumbers(Operators, ",\n")).
extractNumbers(String, Separator) ->
map(fun erlang:list_to_integer/1, string:tokens(String, Separator)).
it_returns_0_for_an_empty_string_test() ->
?assertEqual(0, add("")).
it_returns_the_number_for_a_single_number_test() ->
?assertEqual(1, add("1")).
it_returns_the_sum_of_two_numbers_for_two_numbers_test() ->
?assertEqual(3, add("1,2")).
it_can_sum_more_than_two_numbers_test() ->
?assertEqual(6, add("1,2,3")).
it_can_handle_new_line_as_separator_test() ->
?assertEqual(6, add("1,2\n3")).
@jacegu
Copy link
Author

jacegu commented Apr 18, 2013

Second take on the problem. I think it reads better:

-module(kata).
-import(string, [tokens/2]).
-import(lists, [map/2, sum/1]).
-include_lib("eunit/include/eunit.hrl").

add("")     -> 0;
add(String) -> sum(extract_numbers(String)).

extract_numbers(String) ->
  Separators = ",\n",
  map(fun list_to_integer/1 , tokens(String, Separators)).

it_returns_0_for_an_empty_string_test() ->
  ?assertEqual(0, add("")).

it_returns_the_number_for_a_single_number_test() ->
  ?assertEqual(1, add("1")).

it_returns_the_sum_for_two_numbers_test() ->
  ?assertEqual(3, add("1,2")).

it_returns_the_sum_for_n_numbers_test() ->
  ?assertEqual(110, add("1,2,3,4,15,35,50")).

it_can_handle_both_comma_and_new_line_as_separators_test() ->
  ?assertEqual(6, add("1,2\n3")).

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