Powered by AppSignal & Oban Pro

ABC043D - アンバランス

submit_1.livemd

ABC043D - アンバランス

問題

回答1

defmodule Main do
  def main do
    :stdio
    |> IO.read(:all)
    |> solve()
    |> IO.puts()
  end

  defp renew_table(objects, table_name) do
    if :ets.info(table_name) != :undefined do
      :ets.delete(table_name)
    end

    :ets.new(table_name, [:set, :protected, :named_table])
    :ets.insert(table_name, objects)
  end

  defp lookup(table_name, key) do
    case :ets.lookup(table_name, key) do
      [{_, value}] ->
        value

      _ ->
        ""
    end
  end

  def solve(input) do
    list =
      input
      |> String.trim()
      |> String.codepoints()

    list
    |> Enum.with_index()
    |> Enum.map(fn {char, index} -> {index, char} end)
    |> renew_table(:char_list)

    0..(length(list) - 2)
    |> Enum.map(fn sub_start ->
      char_1 = lookup(:char_list, sub_start)
      char_2 = lookup(:char_list, sub_start + 1)
      char_3 = lookup(:char_list, sub_start + 2)

      case char_1 do
        ^char_2 ->
          [sub_start + 1, sub_start + 2]

        ^char_3 ->
          [sub_start + 1, sub_start + 3]

        _ ->
          []
      end
    end)
    |> Enum.find(
      [-1, -1],
      fn
        [] -> false
        _ -> true
      end
    )
    |> Enum.join(" ")
  end
end
"""
needed
"""
|> Main.solve()
|> then(&(&1 == "2 3"))
"""
atcoder
"""
|> Main.solve()
|> then(&(&1 == "-1 -1"))