You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Ben Harris 908a4abb0e 3 years ago
.. some more ruby exercisms 3 years ago
accumulate.rb some more ruby exercisms 3 years ago
accumulate_test.rb some more ruby exercisms 3 years ago


Implement the accumulate operation, which, given a collection and an operation to perform on each element of the collection, returns a new collection containing the result of applying that operation to each element of the input collection.

Given the collection of numbers:

  • 1, 2, 3, 4, 5

And the operation:

  • square a number (x => x * x)

Your code should be able to produce the collection of squares:

  • 1, 4, 9, 16, 25

Check out the test suite to see the expected function signature.


Keep your hands off that collect/map/fmap/whatchamacallit functionality provided by your standard library! Solve this one yourself using other basic tools instead.


It is typical to call #to_enum when defining methods for a generic Enumerable, in case no block is passed.

Here is an additional test you could add:

def test_accumulate_when_block_is_deferred
  accumulate_enumerator = [1, 2, 3].accumulate
  accumulated_result = accumulate_enumerator.each do |number|
    number * number
  assert_equal [1, 4, 9], accumulated_result

For installation and learning resources, refer to the exercism help page.

For running the tests provided, you will need the Minitest gem. Open a terminal window and run the following command to install minitest:

gem install minitest

If you would like color output, you can require 'minitest/pride' in the test file, or note the alternative instruction, below, for running the test file.

Run the tests from the exercise directory using the following command:

ruby accumulate_test.rb

To include color from the command line:

ruby -r minitest/pride accumulate_test.rb


Conversation with James Edward Gray II

Submitting Incomplete Solutions

It's possible to submit an incomplete solution so you can see how others have completed the exercise.