将两个范围相互乘以 - Elixir

时间:2017-06-24 17:03:26

标签: elixir

我试图解决Project Euler中的第4个问题,但我遇到了问题。我需要将两个范围相互增加,但我不确定如何使用Elixir。以下是我与之合作的内容:

  def is_palindrome?(n) do
    Integer.to_string(n) == Integer.to_string(n)|> String.reverse
  end

  def multiply do
    range_1 = 100..999
    range_2 = 100..999

    for n <- range_1, n * range_2, do: n |> is_palindrome? |> Enum.max
  end

我收到此错误

(ArithmeticError) bad argument in arithmetic expression

如何将两个范围相乘?

1 个答案:

答案 0 :(得分:1)

如果要将每个元素与每个其他元素相乘,则需要从列表中选取元素(<-)两次。 is_palindrome?应在for中用作过滤器。最后,Enum.max应该在for之外。

defmodule A do
  def is_palindrome?(n) do
    Integer.to_string(n) == Integer.to_string(n)|> String.reverse
  end

  def multiply do
    range_1 = 100..999
    range_2 = 100..999

    Enum.max for n <- range_1, m <- range_2, is_palindrome?(n * m), do: n * m
  end
end
iex(1)> A.multiply
906609