LoginSignup
1
0

$\huge{元氣ですかーーーーッ!!!}$
$\huge{元氣があればなんでもできる!}$

$\huge{闘魂とは己に打ち克つこと。}$
$\huge{そして闘いを通じて己の魂を磨いていく}$
$\huge{ことだと思います}$

はじめに

AtCoder Beginner Contest 342Elixirで解いてみます。

AtCoderを解くのが趣味で、休憩時間に解いているという若い人がいて、それってすごい意識の高い休憩時間の過ごし方だと思って、私も真似してみることにしました。

AtCoderをElixirでやってみる

入力の読み取り方や解答の作り方は、別の記事にまとめています。

ご参照くださいませ。

ElixirAtCoderを楽しむためには、エントリポイントをMain.main/0にする必要があります。つまりMainモジュールを作って、その中にmain/0関数を定義するわけです。

A - Yay!

問題はリンク先をご参照くださいませ。
私の解答を貼っておきます。

私の解答

問題文を読んでいることを前提にひとこと解説をしておきます。

文字列中の文字の個数を調べればよいので、文字列をCharlistにして、Enum.frequencies/1関数で出現回数を調べます。得られたマップのキーと値を反転させたマップを作り、キー1に該当する値を取得します。取得した値が文字列中の何番目にあるのかは、https://hexdocs.pm/elixir/Enum.html#find_index/2関数で得られます。0オリジンのため、最後に+1して正解を得るという寸法です。

defmodule Main do
  def main do
    s = IO.read(:line) |> String.trim()

    solve(s)
    |> IO.puts()
  end

  def solve(s) do
    c = s
    |> String.to_charlist()
    |> Enum.frequencies()
    |> Enum.map(fn {c, f} -> {f, c} end)
    |> Map.new()
    |> Map.get(1)

    s |> String.to_charlist() |> Enum.find_index(& &1 == c) |> Kernel.+(1)
  end
end

さいごに

AtCoder Beginner Contest 342Elixirで解くことを楽しみました。

あなたのお好きなプログラミング言語でお楽しみください。


闘魂とは、 「己に打ち克つこと。そして闘いを通じて己の魂を磨いていくことである」 との猪木さんの言葉をそのまま胸に刻み込んでいます。
知っているだけで終わらせることなく、実行する、断行する、一歩を踏み出すことを自らの行動で示していきたいとおもいます。
アントニオ猪木さんのメッセージから元氣をもらったものとして、それを次代に語り継ぎ、自分自身が「闘魂」を体現するものでありたいとおもいます。


$\huge{元氣ですかーーーーッ!!!}$
$\huge{元氣があればなんでもできる!}$
$\huge{1、2、3 ぁっダァー!}$

1
0
0

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