忍者ブログ
バイオインフォマティックス技術者試験、情報処理試験など、IT系の試験を基礎から勉強します。また、Javaなどプログラミングを勉強します。

【Java】競技プログラミングの最高峰「AtCoder(アットコーダー)」参戦 #1

AtCoderのアカウント作成から、プロジェクト生成、Mavenを用いたローカル環境での実行、提出までの手順をまとめる。環境は最新のJava 24に準拠する。


1. 練習問題「practice contest」の確認

提出テスト用のコンテストとして、常設されている「practice contest」を使用する。問題一覧から「A - Welcome to AtCoder」を選択し、入力形式を確認する。


2. 作業ディレクトリの作成とプロジェクト生成

ターミナル(zsh)を開き、作業用の親ディレクトリを作成した上でMavenプロジェクトを生成する。

# 1. 競プロ用の親ディレクトリを作成して移動
mkdir atcoder && cd atcoder

# 2. Mavenプロジェクトを生成
mvn archetype:generate \
  -DgroupId=jp.atcoder \
  -DartifactId=practice-contest \
  -DarchetypeArtifactId=maven-archetype-quickstart \
  -DinteractiveMode=false

# 3. 生成されたプロジェクトディレクトリへ移動
cd practice-contest

3. 解答コードの実装

src/main/java/jp/atcoder/App.javaMain.java にリネーム。以下のJava 24対応コードを記述する。

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        // 整数の入力
        int a = sc.nextInt();
        // スペース区切りの整数の入力
        int b = sc.nextInt();
        int c = sc.nextInt();
        // 文字列の入力
        String s = sc.next();
        // 出力
        System.out.println((a + b + c) + " " + s);
    }
}

4. ローカルでのコンパイルと実行

practice-contest/(pom.xmlが存在するディレクトリ)で実行確認を行う。

# コンパイル
mvn compile

# 実行
mvn exec:java -Dexec.mainClass="jp.atcoder.Main"

5. 提出と結果の確認

提出欄のプルダウンから「Java 24 (OpenJDK 24)」を選択して提出。
結果、ステータスが「AC」となり、無事に正解(OK)となったことを確認した。




PR

【Java】ビルドツール「Apache Maven(メイヴン)」の利用

Javaエンジニアへの登竜門、ビルドツール「Apache Maven(メイヴン)」に挑戦しました。最新のmacOS Sequoia環境で、インストールからエラーを乗り越えて「Hello World!」を拝むまでのプロセスを全公開します。

1. Mavenとは何か?

Mavenは、Javaプロジェクトの「ビルド(コンパイルなど)」や「ライブラリ管理」を自動化するツールです。これを使えるようになると、複雑な外部ライブラリの導入も pom.xml という設定ファイル一つで完結するようになります。

2. Mavenのインストール(Mac / Homebrew)

Macではパッケージ管理ツール Homebrew を使うのが最もスマートです。ターミナルで以下のコマンドを実行してインストールとバージョン確認を行います。

# Mavenをインストール
brew install maven

# 正常にインストールされたか確認
mvn -version
[ 今回の検証環境 ]
・OS:macOS Sequoia 15.6.1 (Apple Silicon)
・Java:25.0.1 (Homebrew経由)
・Maven:3.9.12

[ 実際の出力結果 ]
Apache Maven 3.9.12 (848fbb4bf2d427b72bdb2471c22fced7ebd9a7a1)
Java version: 25.0.1, vendor: Homebrew
OS name: "mac os x", version: "15.6.1", arch: "aarch64", family: "mac"

3. アーキタイプ(Archetype)でプロジェクトを作る

Mavenには「アーキタイプ(Archetype)」という強力な機能があります。これは一言でいうと「プロジェクトの金型(設計図)」です。コマンド一行で、Javaの標準的なフォルダ構成を自動生成できます。

mvn archetype:generate \
  -DgroupId=com.example \
  -DartifactId=my-app \
  -DarchetypeArtifactId=maven-archetype-quickstart \
  -DarchetypeVersion=1.4 \
  -DinteractiveMode=false

実行後、インターネットから必要な部品が次々とダウンロードされ、最後に BUILD SUCCESS と表示されれば my-app フォルダ内にプロジェクトが完成します。

4. 【要注意】コンパイルエラーの壁と解決策

プロジェクト作成後、mvn compile を実行したところ、以下のエラーに遭遇しました。

[ERROR] ソース・オプション7は現在サポートされていません。8以降を使用してください。

最新のJava 25を使っているにもかかわらず、アーキタイプがデフォルトで「Java 7」という古い設定を書き込んでしまったことが原因です。プロジェクト直下の pom.xml を開き、<properties> セクションを以下のように修正します。

<properties>
  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  <maven.compiler.source>1.8</maven.compiler.source>
  <maven.compiler.target>1.8</maven.compiler.target>
</properties>

5. 運命の実行:Hello World!

設定を修正したら、改めてコンパイルと実行を行います。Maven経由でJavaプログラムを起動できる exec:java コマンドが非常に便利です。

# ① コンパイル
mvn compile

# ② 実行
mvn exec:java -Dexec.mainClass="com.example.App"

ついにターミナル上に "Hello World!" の文字が表示されました。Mavenの「お作法」に則ってプログラムを動かすことができた瞬間です。


6. まとめ

・アーキタイプは「標準構成」を自動で提供してくれる便利な設計図。
・最新OSでのインストールはHomebrewを活用するのがベスト。
・Javaバージョンの不一致エラーは pom.xml の書き換えで解決可能。

ビルドツールの基礎を固めることで、今後のより複雑な開発にも「納得感」を持って取り組むことができそうです!


【VBAスタンダード対策】処理を繋ぐ「プロシージャ呼び出し」を攻略!

一つの大きな処理(Main)から、特定の役割を持つ別の処理(Sub)を実行することを「呼び出し」と言います。VBAでは、Callキーワードを使う方法と、省略する方法の2通りがありますが、それぞれ記述の「構造」が異なります。

1. 問題:他のSubプロシージャを呼び出す正確な記述

【 問題 】 引数 val を受け取るSubプロシージャ Update を呼び出す際、VBAの構文(フォーマット)として不適切なものはどれでしょうか?

Sub Main()
    Dim val As Integer : val = 100
    ' --- ここで Update を呼び出す ---
End Sub

Sub Update(n As Integer)
    MsgBox n
End Sub

① Call Update(val)
② Update val
③ Call Update val
④ Update(val) (※引数が1つの場合、動作はするが非推奨の構造)

2. 正解:呼び出しの構造(Callとカッコの有無)に関する正解

正解: ③ Call Update val

3. 解説:呼び出しによって「制御」が移る構造

VBAでは、別のSubを呼ぶ際に「Callを使うならカッコで囲む」「Callを使わないならスペースで繋ぐ」という鉄則があります。どちらの方法でも正しく呼び出せますが、記述を混ぜることはできません。

[ プロシージャ呼び出しの構造図 ]

Mainプロシージャ              Updateプロシージャ
+-------------------+          +-------------------+
| Sub Main()        |          | Sub Update(n)    |
|  [処理1]          |          |                  |
|  Call Update(v) --|---(呼出)--->  [引数nの処理]    |
|  [処理2] <--------|---(復帰)---  End Sub          |
| End Sub           |          +-------------------+
+-------------------+

[ 2通りの正しいフォーマット ]
パターA(Callあり):Call Update(val)
パターB(Callなし):Update val
※ Callを使うと「今から別のSubを呼び出す」という意図が明確になり、構造が分かりやすくなります。

1. ここが試験に出る!: 試験では「Callを書かずにカッコを付ける」という誤用が狙われます。特に引数が2つ以上ある場合(例:Call Calc(a, b))において、Callを抜いて Calc(a, b) と書くと構文エラーになります。この「連動性」を正確に把握しましょう。
2. エンジニアの視点: Java 17などモダンな言語では常にカッコが必要ですが、VBAは「文(Statement)」として呼び出す形式を継承しています。大規模な開発では、後から見た人が「どこで外部Subへ飛んでいるか」を一目で判断できるよう、Callを明示的に付ける構造が推奨されることが多いです。


4. まとめ

「Callを使うならカッコ、使わないならスペース」。この呼び出し構造をマスターすることで、複雑に絡み合うマクロの動きを正確に制御できるようになります。減数分裂において情報がリレーされるように、VBAも正確な呼び出しによって、一つの大きな目的(業務自動化)を達成するのです。



【VBAスタンダード対策】マクロの絶対終端「End Sub」の構造を攻略!

VBAのプロシージャは、Sub 名前 で始まり、必ず End Sub で終わるという一対の構造(ペア)で成立します。この「終わり」を示す記述が正確でないと、プログラムの範囲が確定できず、構造エラーとなります。

1. 問題:プロシージャを完結させる正確な記述

【 問題 】 以下のSubプロシージャにおいて、プロシージャの範囲を適切に終了させ、一つの構造として完結させるために ( A ) に入る正確な記述はどれでしょうか?

Sub Sample()
    MsgBox "処理を実行します"
( A )

① EndSub   ② Exit Sub   ③ End Sub   ④ End

2. 正解:プロシージャの終端フォーマットに関する正解

正解: ③ End Sub

3. 解説:なぜ「End Sub」という構造が必要なのか?

VBAにおいて、Sub(開始)に対応する終端は、End(キーワード)+ 半角スペース + Sub(キーワード)という特定の単語の組み合わせでなければなりません。この物理的な「閉じ」があることで、初めて一つの独立したプログラムとして認識されます。

[ End Sub の構造的絶対ルール ]
一対の原則:Sub で開始したプロシージャは、必ず End Sub で閉じなければなりません。
スペースの重要性:EndSub のようにスペースを抜かすと、コンパイラは終端として認識できず、エラーになります。
メモリの解放:この行に到達した瞬間に、そのプロシージャ内だけで使われていた変数(ローカル変数)はすべて破棄されます。

[ 他の選択肢との構造的な違い ]
Exit Sub:途中で抜ける「動作」であり、プロシージャという建物の「壁(終端)」の役割は持っていません。
End:プログラム全体を強制停止する命令であり、プロシージャを閉じるための構文ではありません。

1. ここが試験に出る!: VBAスタンダード試験では、コードの穴埋め形式でこの「End Sub」を正確に記述させることがあります。特に、Function プロシージャ(End Function)との混同や、単語間のスペースの有無は、構文の正確性を問うスタンダードレベルでは非常に重要なチェックポイントです。
2. エンジニアの視点: VBAでは明示的に「End(終わり) Sub(サブプロシージャ)」と言葉で記述します。この「出口」を明確に定義することが、予期せぬ動作を防ぎ、論理的な構造を持った「いけいけ」なマクロを作成する大前提となります。


4. まとめ

「Sub 名前」で開けたら、最後は「End Sub」で締める。この一対のフォーマットを正確に守ることが、VBAにおける「構造」の正解です。減数分裂が細胞分裂のサイクルを正しく完遂するように、VBAも End Sub という終止符によって、一つの処理を安全に終わらせ、次のステップへと確実に繋いでいくのです。


【BI技術者認定試験対策】生命のバトンを繋ぐ「減数分裂」を攻略!


生物が次世代へ自分の遺伝情報を引き継ぐ際、単なるコピーではなく「半分に分ける」という巧妙な仕組みが働きます。今回は、生殖細胞ができるプロセスである「減数分裂(げんすうぶんれつ)」を正しく理解しましょう。

1. 問題:染色体数が半分になる分裂

【 問題 】 生殖細胞(精子や卵)ができる際、染色体の数がもとの細胞の半分になる分裂のことを何と呼ぶでしょうか?

① 体細胞分裂   ② 減数分裂   ③ 独立の法則   ④ 細胞質分裂

2. 正解:細胞分裂の分類に関する正解

正解: ② 減数分裂

3. 解説:なぜ「半分」にするのか?

もし、染色体数がそのままで受精すると、世代を重ねるごとに染色体が倍々に増えていってしまいます。これを防ぐために、あらかじめ染色体数を半分(n)にする仕組みが「減数分裂」です。

[ 減数分裂の重要ポイント ]
染色体数の変化:2n(複相)からn(単相)に減少します。
第一分裂と第二分裂:DNAの複製は1回ですが、分裂は2回連続して行われます。
多様性の創出:分裂中に染色体が乗り換えることで、親とは異なる遺伝子の組み合わせが作られます。

[ 他の選択肢との違い ]
体細胞分裂:体の成長のために行われ、染色体数は変化しません(2n→2n)。
細胞質分裂:核の分裂に続いて、細胞そのものが2つに分かれるプロセスを指します。

1. ここが試験に出る!: 「体細胞分裂は2nのまま、減数分裂はnになる」という違いは、バイオ情報の基本中の基本です。また、減数分裂は「動物では精巣や卵巣」「植物では花粉母細胞や胚嚢母細胞」で行われることも覚えておきましょう。
2. バイオインフォの視点: ゲノム解析において、この「n(単相)」の状態の全遺伝情報を「ハプロタイプ」と呼びます。減数分裂時の組み換えパターンを解析することは、疾患遺伝子の位置を特定する「連鎖解析」の重要な基礎データとなります。


4. まとめ

「生殖細胞を作る=減数分裂(染色体が減る)」というセットで覚えましょう。このプロセスがあるからこそ、私たちは親から23本ずつ染色体を受け取り、合計46本の安定した設計図を持って生まれてくることができるのです。