LoginSignup
1
0

More than 3 years have passed since last update.

[Elixir]数字を桁毎に区切ってリスト変換

Last updated at Posted at 2020-07-03

以下の問題を解いているときのことです。
Some Sums
入力された数字について全ての桁の和を求めたい。
ex:入力24に対しては6(2+4),18に対しては9(1+8)を得たい

このために
1.入力を桁毎に区切ってリストに変換
2.リストについてreduce sumで合計値を求める
ことにしました。

1.についてシンプルにやりたいと思っていたところ
Integer.digits(x)というのがちょうどよかったのでメモしておきます。

iex(2)> Integer.digits(24) 
[2, 4]
iex(3)> Integer.digits(18)
[1, 8]

第二引数に基数を指定可能

iex(4)> Integer.digits(18,2) 
[1, 0, 0, 1, 0]
iex(5)> Integer.digits(18,8) 
[2, 2]
iex(6)> Integer.digits(18,16) 
[1, 2]

これを使って解答してみる

defmodule Main do
  def some_sums(n, a, b) do
    (for x <- 1..n, a <= digit_sum(x), digit_sum(x) <= b, do: x)
    |> Enum.sum()
  end

  def digit_sum(x) do
    Integer.digits(x) |> Enum.sum()
  end

  def main do
    [n, a, b] = IO.read(:line) |> String.trim() |> String.split(" ") |> Enum.map(&String.to_integer/1)
    IO.puts some_sums(n, a, b)
  end
end

以下を参考にしました。
https://hexdocs.pm/elixir/Integer.html#digits/2

1
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0