NDKCOM エンジニアブログ

Evolution for 'NDKCOM software Quality improvement'

PG BATTLE にエントリーしました

(社内エンジニアからの寄稿です)

PG BATTLE とは

products.sint.co.jp

3人1組で参加するプログラミングコンテストです。いわゆる競技プログラミングの形式で、出題された問題を時間内に解いて提出します。

  • プログラミングに対する評価向上
  • 陽の当たる機会の提供
  • 自分の実力を知る機会
  • 単純に楽しむ

の4つを柱として掲げており、プログラミングに自信のある方はもちろん、自信のない方も成長の機会に繋がるのではないかと思います。

これまでに6回開催されており、毎年400チーム近いエントリーがあります。弊社からはこれまで参加したことはありませんでしたが、上長にも背中を押され、初参加することとなりました。

練習について

コンテストで活躍する気満々の私は、開催まで一か月ほどしかなかったこともあり、エントリーを決めてからすぐに練習を開始しました。

練習にあたって、 Visual Studio で C# の環境を作成しましたので、それを紹介します。

実際にコードを実行して成否を確認できるようにするため、テストプロジェクトを使用しました。

テストプロジェクト

プロジェクトを作成したすぐの状態は画面のようになっています。ここに解答のコードと、確認用のコードを書いていきます。

テストプロジェクト作成したすぐの状態

実際に書いたコードは以下の通りです。(入出力例2,3 は省略) PG BATTLE 2023 の過去問 ましゅまろの1問目 を解いたものになります。

using System.Text;

namespace PGB2023
{
    [TestClass]
    public class UnitTest1
    {
        /// <summary>
        /// 入出力例1
        /// </summary>
        [TestMethod]
        public void TestMethod1()
        {
            StringBuilder inputText = new();
            StringBuilder outputText = new();

            inputText.AppendLine("1");
            outputText.AppendLine("0.5000000000");

            using var input = new StringReader(inputText.ToString());
            using var output = new StringWriter();

            Console.SetIn(input);
            Console.SetOut(output);

            Program();

            Assert.AreEqual(outputText.ToString(), output.ToString());
        }

        /// <summary>
        /// 解答
        /// </summary>
        private static void Program()
        {
            List<string[]> inputs = [];

            while (Console.ReadLine() is string line)
            {
                inputs.Add(line.Split(" "));
            }

            int n = int.Parse(inputs[0][0]);

            double result = Math.Pow(0.5, n);

            Console.WriteLine(result.ToString("F10"));
        }
    }
}

ここまで書いた状態で、テストを実行すると、テストエクスプローラー上に成否が表示まれます。

テスト実行

成否の表示

来年以降参加される方に少しでも参考になれば幸いです。

開催中止

products.sint.co.jp

今年の PG BATTLE は、2024年10月19日 に開催予定でしたが、主催者の判断で開催が中止となりました。我々がエントリーしてからそう日も経たないうちでの発表でしたが、楽しみにしていたので非常に残念でした。

また来年開催されるようであれば、ぜひ参加したいと思っています。