Powered by AppSignal & Oban Pro

ABC081B - Shift only

submit_1.livemd

ABC081B - Shift only

問題

https://atcoder.jp/contests/abs/tasks/abc081_b

回答1

:math.pow(2, 29)
defmodule Main do
  def main do
    :stdio
    |> IO.read(:all)
    |> solve()
    |> IO.puts()
  end

  defp split_lines(lines) do
    lines
    |> String.trim()
    |> String.split("\n")
  end

  defp split_words(words) do
    String.split(words, " ")
  end

  defp num_of_power(input, powers) do
    powers
    |> Enum.map(fn {index, num} ->
      case rem(input, num) do
        0 ->
          index

        _ ->
          0
      end
    end)
    |> Enum.max()
  end

  def solve(input) do
    nums =
      input
      |> split_lines()
      |> Enum.at(1)
      |> split_words()
      |> Enum.map(&String.to_integer/1)

    powers =
      Enum.to_list(1..29)
      |> Enum.map(fn power ->
        {power, 2 |> :math.pow(power) |> round()}
      end)

    nums
    |> Enum.map(&num_of_power(&1, powers))
    |> Enum.min()
  end
end
"""
3
8 12 40
"""
|> Main.solve()
|> then(&(&1 == 2))
"""
4
5 6 8 10
"""
|> Main.solve()
|> then(&(&1 == 0))
"""
6
382253568 723152896 37802240 379425024 404894720 471526144
"""
|> Main.solve()
|> then(&(&1 == 8))