日曜日, 7月 6, 2025
日曜日, 7月 6, 2025
- Advertisment -
ホームニューステックニュース闘魂Elixir ーー AtCoder Beginner Contest 390(A)をElixirとRustで楽しむ #猪木

闘魂Elixir ーー AtCoder Beginner Contest 390(A)をElixirとRustで楽しむ #猪木



闘魂Elixir ーー AtCoder Beginner Contest 390(A)をElixirとRustで楽しむ #猪木

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

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

ChatGPT Image 2025年6月25日 11_32_51.png

AtCoder Beginner Contest 390ElixirRustで解いてみます。

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

プログラミングという名の藝術活動をより楽しむための鍛錬です。

自信というのは、一にも二にもトレーニングから生まれる

(アントニオ猪木『最後の闘魂』)

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

ご参照くださいませ。

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

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

プログラミングの基本である「順次」「分岐」「繰り返し」をすべて理解できているのかが問われる問題です。

Elixir

Elixirを使った私の解答です。

私の解答(Elixir)

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

先頭からみていって、大小比較してみて、いれかえが一箇所だけなのかどうかを調べる実装を採りました。

defmodule Main do
  def main do
    a_list = IO.read(:line) |> String.trim() |> String.split(" ") |> Enum.map(&String.to_integer/1)

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

  def solve(a_list) do
    Enum.reduce_while(a_list, {0, nil}, fn
      a, {0, nil} -> {:cont, {0, a}}
      a, {0, before} when a  before -> {:cont, {1, before}}
      a, {1, before} when a  before -> {:halt, {2, before}}
      a, {acc, _} -> {:cont, {acc, a}}
    end)
    |> elem(0)
    |> Kernel.==(1)
    |> if(do: "Yes", else: "No")
  end
end

Rust

RustはAI先生のお力をお借りして、Elixirのコードを置き換えてもらいました。
私は、Rustを勉強中です。万年勉強中です。闘魂にゴールはない。いつまでも挑戦中です。

私の解答(Rust)
use std::io::{self, BufRead};

fn main() {
    let stdin = io::stdin();
    let mut input = String::new();

    stdin.lock().read_line(&mut input).unwrap();

    let a_list: Veci32> = input
        .trim()
        .split_whitespace()
        .map(|s| s.parse().unwrap())
        .collect();

    let result = solve(&a_list);
    println!("{}", result);
}

fn solve(a_list: &[i32]) -> &'static str {
    let mut state = 0;
    let mut before: Optioni32> = None;

    for &a in a_list {
        match (state, before) {
            (0, None) => before = Some(a),
            (0, Some(prev)) if a  prev => {
                state = 1;
                before = Some(prev);
            }
            (1, Some(prev)) if a  prev => {
                state = 2;
                break;
            }
            (_, _) => before = Some(a),
        }
    }

    if state == 1 {
        "Yes"
    } else {
        "No"
    }
}

AtCoderElixirとRustで解くことを楽しみました。

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


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


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





Source link

Views: 0

RELATED ARTICLES

返事を書く

あなたのコメントを入力してください。
ここにあなたの名前を入力してください

- Advertisment -