这是我的代码,如果它是 3 或 5 的乘积,则应将 0 和“number”之间的所有数字相加,但始终返回 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
这是测试:
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
在 Elixir 中,变量是不可变的,因此您无法像示例中那样真正更改结果变量,它保留在
for do
代码块内。您的示例在 OOPS 语言中可以正常工作,但 Elixir 功能正常,您需要稍微改变一下方法。 Elixir 提供了一个 Enum 模块来以更有效的方式迭代列表,并且您的解决方案可以轻松地用 Enum 模块替换。
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