Skip to content

Instantly share code, notes, and snippets.

@revdan
Last active September 2, 2015 20:41
Show Gist options
  • Save revdan/675ec64e638bf2244ecc to your computer and use it in GitHub Desktop.
Save revdan/675ec64e638bf2244ecc to your computer and use it in GitHub Desktop.
defmodule Divisible do
def sum_reversed(number, target) do
enumerate(number, target)
|> Stream.filter(&(is_divisible_reversed(&1, number)))
|> Enum.sum
end
def enumerate(number, target) do
Stream.iterate(number, &(&1 + number))
|> Stream.take_while(&(&1 <= target))
end
def is_divisible_reversed(number, divisor) do
number
|> to_char_list
|> Enum.reverse
|> List.to_integer
|> rem(divisor) === 0
end
end
defmodule DivisibleTest do
use ExUnit.Case
test "sum multiples of 7, up to 100" do
assert Divisible.sum_reversed(7, 100) == 154
end
test "sum multiples of 7, up to 1000" do
assert Divisible.sum_reversed(7, 1000) == 10787
end
test "enumeration of multiples of 7, up to 100" do
assert Divisible.enumerate(7, 100) |> Enum.take(15) == [7, 14, 21, 28, 35, 42, 49, 56, 63, 70, 77, 84, 91, 98]
end
test "reversed numbers divisible by the multiplier" do
assert Divisible.is_divisible_reversed(7, 7)
assert Divisible.is_divisible_reversed(161, 7)
refute Divisible.is_divisiible_reversed(49, 7)
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment