$\huge{元氣ですかーーーーッ!!!}$
$\huge{元氣があればなんでもできる!}$
$\huge{闘魂とは己に打ち克つこと。}$
$\huge{そして闘いを通じて己の魂を磨いていく}$
$\huge{ことだと思います}$
はじめに
AtCoder Beginner Contest 343をElixirで解いてみます。
AtCoderを解くのが趣味で、休憩時間に解いているという若い人がいて、それってすごい意識の高い休憩時間の過ごし方だと思って、私も真似してみることにしました。
AtCoderをElixirでやってみる
入力の読み取り方や解答の作り方は、別の記事にまとめています。
ご参照くださいませ。
ElixirでAtCoderを楽しむためには、エントリポイントをMain.main/0
にする必要があります。つまりMain
モジュールを作って、その中にmain/0
関数を定義するわけです。
B - Adjacency Matrix
問題はリンク先をご参照くださいませ。
私の解答を貼っておきます。
私の解答
問題文を読んでいることを前提にひとこと解説をしておきます。
私にとっては、問題文の意味を理解するのに一苦労でした。実はけっこう単純で、1が立っているところのインデックス(左端が1)を行ごとに出力しなさいというものです。解法の骨格にはおなじみの専門家の間では畳み込みと呼ばれているEnum.reduce/3関数を使いました。
defmodule Main do
def main do
n = IO.read(:line) |> String.trim() |> String.to_integer()
list_of_lists = for _i <- 1..n do
IO.read(:line) |> String.trim() |> String.split(" ") |> Enum.map(&String.to_integer/1)
end
solve(list_of_lists)
|> IO.puts()
end
def solve(list_of_lists) do
list_of_lists
|> Enum.reduce([], fn list, acc ->
Enum.with_index(list, 1)
|> Enum.reduce([], fn
{0, _}, acc -> acc
{1, index}, acc -> [index | acc]
end)
|> Enum.reverse()
|> Enum.join(" ")
|> List.wrap()
|> Kernel.++(acc)
end)
|> Enum.reverse()
|> Enum.join("\n")
end
end
さいごに
AtCoder Beginner Contest 343をElixirで解くことを楽しみました。
あなたのお好きなプログラミング言語でお楽しみください。
闘魂とは、 「己に打ち克つこと。そして闘いを通じて己の魂を磨いていくことである」 との猪木さんの言葉をそのまま胸に刻み込んでいます。
知っているだけで終わらせることなく、実行する、断行する、一歩を踏み出すことを自らの行動で示していきたいとおもいます。
アントニオ猪木さんのメッセージから元氣をもらったものとして、それを次代に語り継ぎ、自分自身が「闘魂」を体現するものでありたいとおもいます。
$\huge{元氣ですかーーーーッ!!!}$
$\huge{元氣があればなんでもできる!}$
$\huge{1、2、3 ぁっダァー!}$