LoginSignup
1
2

More than 5 years have passed since last update.

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

Posted at

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));
        }
    }
}

関連リンク:

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2