Help us understand the problem. What is going on with this article?

CodeIQ「進捗ヴェリーグッドマーク」問題に参加しました

More than 3 years have passed since last update.

CodeIQ「進捗ヴェリーグッドマーク」問題の公開が終了したということで、自分の解答を公開したいと思います。なおCodeIQはそのサービスの都合上、解答の公開は基本的にNG。ただ今回は出題者の@tbpgrさんの許可が出ているということもあり、解答を公開しています。

Program.cs
using System;
using System.Linq;

public class Program
{
    public static void Main(string[] args)
    {
        var n = int.Parse(Console.ReadLine());
        var ans = Draw(n);
        Console.WriteLine(ans);
    }

    public static string Draw(int n)
    {
        if (n % 2 == 0)
        {
            return "invalid";
        }

        var matrix = Enumerable.Range(0, n).Select(i => Enumerable.Repeat(".", n).ToList()).ToList();
        foreach (var i in Enumerable.Range(0, n))
        {
            var j = i / 2;
            matrix[i][j] = matrix[i][n - j - 1] =  "v";
        }


        return string.Join(System.Environment.NewLine, matrix.Select(row => string.Join("", row)));
    }
}

まずは二次元配列を文字列.で初期化したあと、適当な要素を文字列部分でvで上書きする――というシンプルなロジックになっています。もう少しC#らしい書き方があるような気もしますが、C#初心者としては満足な出来上がりです。

次にテストコード。かなり雑、というかコピペで作った感満載(´・ω・`) 正直なところNUnitがよくわかっておらず、雰囲気で使っている面は多々あります。鍛錬が足りぬ(´・ω・`)

ProgramTest.cs
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace Tests
{
    [TestClass()]
    public class ProgramTests
    {
        [TestMethod()]
        public void DrawTest1()
        {
            Assert.AreEqual("v", Program.Draw(1));
        }

        [TestMethod()]
        public void DrawTest2()
        {
            Assert.AreEqual("invalid", Program.Draw(2));
        }

        [TestMethod()]
        public void DrawTest3()
        {
            var expected = "v.v?v.v?.v.".Replace("?", System.Environment.NewLine);
            Assert.AreEqual(expected, Program.Draw(3));
        }

        [TestMethod()]
        public void DrawTest5()
        {

            var expected = "v...v?v...v?.v.v.?.v.v.?..v..".Replace("?", System.Environment.NewLine);
            Assert.AreEqual(expected, Program.Draw(5));
        }
    }
}

関連リンク:

neko_the_shadow
IT業界の片隅でひっそり生きるシステムエンジニアです(´・ω・`)
https://nekotheshadow.github.io/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away