From bce8297fb8b62833304b80da242a6d37444351d8 Mon Sep 17 00:00:00 2001 From: "exercism-solutions-syncer[bot]" <211797793+exercism-solutions-syncer[bot]@users.noreply.github.com> Date: Wed, 13 Aug 2025 10:32:38 +0000 Subject: [PATCH] [Sync Iteration] elixir/sum-of-multiples/1 --- .../sum-of-multiples/1/lib/sum_of_multiples.ex | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 solutions/elixir/sum-of-multiples/1/lib/sum_of_multiples.ex diff --git a/solutions/elixir/sum-of-multiples/1/lib/sum_of_multiples.ex b/solutions/elixir/sum-of-multiples/1/lib/sum_of_multiples.ex new file mode 100644 index 0000000..0d82106 --- /dev/null +++ b/solutions/elixir/sum-of-multiples/1/lib/sum_of_multiples.ex @@ -0,0 +1,18 @@ +defmodule SumOfMultiples do + @doc """ + Adds up all numbers from 1 to a given end number that are multiples of the factors provided. + """ + @spec to(non_neg_integer, [non_neg_integer]) :: non_neg_integer + def to(limit, factors), do: gen_score(factors, limit - 1) + + defp gen_score(scores \\ [], factors, limit) + defp gen_score(scores, [], _), do: scores |> MapSet.new() |> Enum.sum() + defp gen_score(scores, [0 | tail], max), do: gen_score([0 | scores], tail, max) + defp gen_score(scores, [factor | tail], max) do + factor + |> Range.new(max, factor) + |> Range.to_list() + |> Kernel.++(scores) + |> gen_score(tail, max) + end +end