はじめに
この記事は、初期研修を終えて現場に配属された新人たちに課している練習問題を紹介するものです。
主に研修で学んだプログラミング言語への理解度の確認とそれに伴うフォローや、プログラミングへの取組み姿勢、クセの把握等を目的に行っているものですが、毎年なかなか好評なのでおすすめしても良いかなと思いました。
各問題の出題意図、回答例(C#)を別記事に起こしました。
問題自体は特定のプログラミング言語に限定したものではありませんが、私が主にC#の開発に携わっていますので回答例はC#のみのご紹介となります。
想定回答者
- プログラミング研修を修了した新人プログラマ
- 新しい言語を学ぶプログラミング経験者
問題
以下の課題を指定のプログラミング言語を用いて回答せよ。
記載が無い事項は自由に判断して良い(ただし、意図を問われた場合に説明できること)。
注意)全体を通して4時間程度で終了するように着手すること(時間をかけすぎない)
1. Fizz Buzz 問題
1 から 100 までの数について、Fizz Buzz 問題 を解くプログラムを作成せよ。
ただし、以下の2通りの方針でそれぞれ作成すること。
(1) 可能な限り、少ない行数となるように工夫すること。
(2) 可能な限り、操作ごとにメソッドを分割し、適切な名称を付与すること。
※ Fizz Buzz 問題 : 以下の通り
- 1 から順に番号を出力する
- ただし、3 の倍数 の場合は "Fizz"、5 の倍数 の場合は "Buzz"、両者の公倍数の場合は "Fizz Buzz" を数字の代わりに出力する
2. 選択問題
(1) ~ (4) のうち、2つ以上作成せよ。
(1) 1 から 100 までの数のうち、素数のみ出力するプログラムを作成せよ。
※ 素数 : 1 より大きく、正の約数が 1 と 自身 のみである 自然数
(2) 引数で与えられた 年 が うるう年 であるか判定するプログラムを作成せよ。
ただし、引数に 負数 を与えた場合はエラーとする。
※ うるう年 : 以下の通り判定すること
- 西暦年 が 4 で割り切れる場合、うるう年とする
- ただし、西暦年が 100 で割り切れる場合、うるう年では無い
- ただし、西暦年が 400 で割り切れる場合、うるう年とする
(3) 以下の要件を満たすプログラムを作成せよ。
- 01 ~ 43 までの 43個の数字 から 異なる6個 を選択し、出力する
(4) 引数で与えられた 元金、年数、年利率 を元に 支払総額、月ごとの支払額 を出力するプログラムを作成せよ。
ただし、以下の条件に従うこと(簡単にするため、支払による元金の減少は考慮しない)。
- 1年ごとに 元金 に 年利率 をかけた金額を 利息 として算出し、元金 と 利息 の合計を 1円単位に四捨五入した金額 を 翌年の元金 とする(複利法)
- 最終的な元金と利息の合計を 年数 × 12ヶ月 で割り、1円単位に四捨五入した金額 を 月ごとの支払額 とする
- 月ごとの支払額 を 年数 × 12ヶ月 でかけた金額を 支払総額 とする
- 全ての計算は10進数で行い、不要な丸め誤差が発生しないようにすること
3. 一行掲示板
以下の要件を満たす「一行掲示板」を作成せよ。
- コマンドラインアプリとする。
- 実行時に引数を与えなかった場合、投稿された書き込みを全てコンソールに出力する。
- 実行時に引数を 1つ 与えた場合、その内容を 投稿文 として登録する。
登録後、投稿された書き込みを全て出力する。 - 実行時に引数を 2つ以上 与えた場合、エラーとする。
- 投稿された書き込みは、以下の書式でコンソールに出力する("△" は半角スペース)。
投稿日時("YYYY/MM/DD HH:MM:SS"形式)△投稿文
- 投稿された書き込みは、投稿日時の降順でコンソールに出力する(新しい書き込みが上にくるようにする)。
- 投稿された書き込みは、投稿日時 と 投稿文 をCSVファイルとして保存する。
- 投稿された書き込みは、投稿の都度CSVファイルの末尾に追記する。
- プログラムは適宜クラス、メソッドの分割を行い、それぞれに適切な名称を付与すること。
以上