$\huge{元氣ですかーーーーッ!!!}$
$\huge{元氣があればなんでもできる!}$
$\huge{闘魂とは己に打ち克つこと。}$
$\huge{そして闘いを通じて己の魂を磨いていく}$
$\huge{ことだと思います}$
はじめに
AtCoder Beginner Contest 408をElixirとRustで解いてみます。
AtCoderを解くのが趣味で、休憩時間に解いているという若い人がいて、それってすごい意識の高い休憩時間の過ごし方だと思って、私も真似してみることにしました。
AtCoderをElixirでやってみる
入力の読み取り方や解答の作り方は、別の記事にまとめています。
ご参照くださいませ。
ElixirでAtCoderを楽しむためには、エントリポイントをMain.main/0
にする必要があります。つまりMain
モジュールを作って、その中にmain/0
関数を定義するわけです。
A - Timeout
問題はリンク先をご参照くださいませ。
私の解答を貼っておきます。
プログラミングの基本である「順次」「分岐」「繰り返し」のうち、「順次」「分岐」「繰り返し」すべてを理解できているのかを問う問題です。
Elixir
Elixirを使った私の解答です。
私の解答(Elixir)
問題文を読んでいることを前提にひとこと解説をしておきます。
2行の数列の隣どうしの差を取ればよいわけです。
先頭には、念の為、0
を挿入しておいて、肩叩きが最初の人が間に合っているのかをチェックしています。
defmodule Main do
def main do
[_n, s] =
IO.read(:line) |> String.trim() |> String.split(" ") |> Enum.map(&String.to_integer/1)
t_list = IO.read(:line) |> String.trim() |> String.split(" ") |> Enum.map(&String.to_integer/1)
solve(s, t_list)
|> IO.puts()
end
def solve(s, t_list) do
adjacent_diffs([0 | t_list])
|> Enum.all?(fn d -> d <= s end)
|> if(do: "Yes", else: "No")
end
defp adjacent_diffs(list) do
list
|> Enum.chunk_every(2, 1, :discard)
|> Enum.map(fn [x, y] -> y - x end)
end
end
Rust
RustはAI先生のお力をお借りして、Elixirのコードを置き換えてもらいました。
私は、Rustを勉強中です。万年勉強中です。闘魂にゴールはない。いつまでも挑戦中です。
私の解答(Rust)
use std::io::{self, BufRead};
fn main() {
let stdin = io::stdin();
let mut lines = stdin.lock().lines();
// 1行目の読み込み: n(使わない)と s
let line1 = lines.next().unwrap().unwrap();
let parts: Vec<i32> = line1
.split_whitespace()
.map(|x| x.parse().unwrap())
.collect();
let s = parts[1];
// 2行目の読み込み: t_list
let line2 = lines.next().unwrap().unwrap();
let mut t_list: Vec<i32> = line2
.split_whitespace()
.map(|x| x.parse().unwrap())
.collect();
// 先頭に0を追加(Elixirと同じ)
t_list.insert(0, 0);
// 隣接差分をチェック
let ok = t_list
.windows(2)
.all(|w| w[1] - w[0] <= s);
println!("{}", if ok { "Yes" } else { "No" });
}
さいごに
AtCoder Beginner Contest 408をElixirとRustで解くことを楽しみました。
あなたのお好きなプログラミング言語でお楽しみください。
闘魂とは、 「己に打ち克つこと。そして闘いを通じて己の魂を磨いていくことである」 との猪木さんの言葉をそのまま胸に刻み込んでいます。
知っているだけで終わらせることなく、実行する、断行する、一歩を踏み出すことを自らの行動で示していきたいとおもいます。
アントニオ猪木さんのメッセージから元氣をもらったものとして、それを次代に語り継ぎ、自分自身が「闘魂」を体現するものでありたいとおもいます。
$\huge{元氣ですかーーーーッ!!!}$
$\huge{元氣があればなんでもできる!}$
$\huge{1、2、3 ぁっダァー!}$