This is my code which should sum all numbers between 0 and "number" if it is either multiply of 3 or 5, but always return 0
defmodule Challenge do
def solution(number) do
result = 0
for i <- 0..number-1 do
if rem(i, 5) == 0 || rem(i, 3) == 0 do
result = result + i
end
end
result
end
end
This is test:
defmodule TestSolution do
use ExUnit.Case
import Challenge, only: [solution: 1]
def test_solution(n, expected) do
assert solution(n) == expected
end
test "basic tests" do
test_solution 10, 23
end
end
In Elixir, variables are immutable, so you can't really change result variable as in your example, it stays within for do
code block. Your example would work fine in a OOPS language but Elixir being functional you need to change approach a bit. Elixir provides an Enum module to iterate through a list in much more effective way and your solution can easily be replaced with Enum module.
defmodule Challenge do
def solution(number) do
0..number-1
|> Enum.filter(fn x -> rem(x, 5) == 0 || rem(x, 3) == 0 end)
|> Enum.sum()
end
end