Powered by AppSignal & Oban Pro
Would you like to see your link here? Contact us

Day 20: Infinite Elves and Infinite Houses

day_20_infinite_elves_and_infinite_houses.livemd

Day 20: Infinite Elves and Infinite Houses

Section

defmodule SumDivisible do
  def sum_multiplied(n) do
    divisors = for i <- 1..trunc(:math.sqrt(n)), rem(n, i) == 0, do: [i, div(n, i)]

    divisors
    |> List.flatten()
    |> Enum.sum()
    |> Kernel.*(10)
  end

  def find_greater_than_limit(limit) do
    Stream.iterate(1, &amp;(&amp;1 + 1))
    |> Enum.find(fn n -> sum_multiplied(n) > limit end)
  end

  def sum_multiplied2(n) do
    divisors = for i <- 1..trunc(:math.sqrt(n)), rem(n, i) == 0, do: [i, div(n, i)]

    filtered_divisors =
      divisors
      |> List.flatten()
      |> Enum.filter(&amp;(&amp;1 * 50 >= n))

    filtered_divisors
    |> Enum.sum()
    |> Kernel.*(11)
  end

  def find_greater_than_limit2(limit) do
    Stream.iterate(1, &amp;(&amp;1 + 1))
    |> Enum.find(fn n -> sum_multiplied2(n) > limit end)
  end
end

SumDivisible.find_greater_than_limit(36_000_000)
831600
SumDivisible.find_greater_than_limit2(36_000_000)
884520