$\huge{元氣ですかーーーーッ!!!}$
$\huge{元氣があればなんでもできる!}$
$\huge{闘魂とは己に打ち克つこと。}$
$\huge{そして闘いを通じて己の魂を磨いていく}$
$\huge{ことだと思います}$
AtCoder Beginner Contest 395をElixirとRustで解いてみます。
AtCoderを解くのが趣味で、休憩時間に解いているという若い人がいて、それってすごい意識の高い休憩時間の過ごし方だと思って、私も真似してみることにしました。
プログラミングという名の芸術活動をより楽しむための鍛錬です。
自信というのは、一にも二にもトレーニングから生まれる
(アントニオ猪木『最後の闘魂』)
入力の読み取り方や解答の作り方は、別の記事にまとめています。
ご参照くださいませ。
ElixirでAtCoderを楽しむためには、エントリポイントをMain.main/0
にする必要があります。つまりMain
モジュールを作って、その中にmain/0
関数を定義するわけです。
問題はリンク先をご参照くださいませ。
私の解答を貼っておきます。
プログラミングの基本である「順次」「分岐」「繰り返し」の、すべてを理解できているのかを問う問題です。
Elixir
Elixirを使った私の解答です。
私の解答(Elixir)
問題文を読んでいらっしゃることを前提にひとこと解説をしておきます。
指示の通りに実装しました。もしかしたら、計算を省けるところがあるのかもしれません。
defmodule Main do
def main do
n = IO.read(:line) |> String.trim() |> String.to_integer()
solve(n)
|> IO.puts()
end
def solve(n) do
map = (1..n)
|> Enum.reduce(%{}, fn i, acc ->
j = n + 1 - i
do_solve(i, j, acc)
end)
line = for i 1..n, j 1..n, s = Map.get(map, {i, j}), into: [], do: s
Enum.chunk_every(line, n)
|> Enum.join("\n")
end
defp do_solve(i, j, map) when i j and rem(i, 2) == 1 do
color(i, j, map, "#")
end
defp do_solve(i, j, map) when i j and rem(i, 2) == 0 do
color(i, j, map, ".")
end
defp do_solve(i, j, map) when i > j, do: map
defp color(i, j, map, c) do
(i..j)
|> Enum.reduce(map, fn k, acc ->
Map.put(acc, {i, k}, c)
|> Map.put({j, k}, c)
|> Map.put({k, i}, c)
|> Map.put({k, j}, c)
end)
end
end
Rust
RustはAI先生のお力をお借りして、Elixirのコードを置き換えてもらいました。
私は、Rustを勉強中です。万年勉強中です。闘魂にゴールはない。いつまでも挑戦中です。
私の解答(Rust)
use std::io::{self, BufRead};
fn main() {
let stdin = io::stdin();
let n: usize = stdin.lock().lines().next().unwrap().unwrap().trim().parse().unwrap();
let result = solve(n);
println!("{}", result);
}
fn solve(n: usize) -> String {
let mut grid = vec![vec![' '; n]; n];
for i in 1..=n {
let j = n + 1 - i;
if i > j {
continue;
}
let ch = if i % 2 == 1 { '#' } else { '.' };
color(i, j, &mut grid, ch);
}
grid.iter()
.map(|row| row.iter().collect::String>())
.collect::Vec_>>()
.join("\n")
}
fn color(i: usize, j: usize, grid: &mut VecVecchar>>, ch: char) {
let i0 = i - 1;
let j0 = j - 1;
for k in i0..=j0 {
grid[i0][k] = ch;
grid[j0][k] = ch;
grid[k][i0] = ch;
grid[k][j0] = ch;
}
}
AtCoder Beginner Contest 395をElixirとRustで解くことを楽しみました。
あなたのお好きなプログラミング言語でお楽しみください。
闘魂とは、 「己に打ち克つこと。そして闘いを通じて己の魂を磨いていくことである」 との猪木さんの言葉をそのまま胸に刻み込んでいます。
知っているだけで終わらせることなく、実行する、断行する、一歩を踏み出すことを自らの行動で示していきたいとおもいます。
アントニオ猪木さんのメッセージから元氣をもらったものとして、それを次代に語り継ぎ、自分自身が「闘魂」を体現するものでありたいとおもいます。
$\huge{元氣ですかーーーーッ!!!}$
$\huge{元氣があればなんでもできる!}$
$\huge{1、2、3 ぁっダァー!}$
Views: 0