ABC075B - Minesweeper

AtCoder Beginners Selection は全部解いたので、次は AtCoder Beginner Contest の過去問を解くことにした。

atcoder.jp

左上から順に全探索しつつ、現在のマスが . だったら、接しているマスに # が何個あるかを数えて出力していく。

using System;
using System.Collections.Generic;

namespace ABC075B
{
    class Program
    {
        static void Main(string[] args)
        {
            var input = Console.ReadLine().Split(' ');
            var H = int.Parse(input[0]);
            var W = int.Parse(input[1]);
            var S = new List<string>();
            for (var i = 0; i < H; i++)
            {
                S.Add(Console.ReadLine());
            }

            for (var i = 0; i < H; i++)
            {
                for (var j = 0; j < W; j++)
                {
                    if (S[i][j] == '#')
                    {
                        Console.Write('#');
                    }
                    else
                    {
                        var count = CountBomb(S, j, i);
                        Console.Write(count);
                    }
                }
                Console.WriteLine();
            }
        }

        static int CountBomb(List<string> S, int x, int y)
        {
            var count = 0;
            for (var i = y - 1; i <= y + 1; i++)
            {
                if (i < 0 || S.Count <= i)
                {
                    continue;
                }
                for (var j = x - 1; j <= x + 1; j++)
                {
                    if (j < 0 || S[i].Length <= j || (i == y && j == x))
                    {
                        continue;
                    }
                    if (S[i][j] == '#')
                    {
                        count++;
                    }
                }
            }
            return count;
        }
    }
}