Paiza Aランクレベルアップメニュー 陣取りゲーム C#で書いてみた

C#での回答がなかったため共有します。
あまりメモリ面？での知識がないので非効率なコードかもしれないです。
もっといいコードがあったらコメントお願いします。

```EncampmentGame.cs
using System;
using System.Linq;
using System.Collections.Generic;

class EncampmentGame
{
    static void Main()
    {

        string[] line = Console.ReadLine().Split(' ');

        // 先行
        string precedence = Console.ReadLine();

        int rows = int.Parse(line[0]);
        int cols = int.Parse(line[1]);

        string[,] map = new string[rows, cols];

        Queue<int> YA = new Queue<int>();
        Queue<int> XA = new Queue<int>();

        Queue<int> YB = new Queue<int>();
        Queue<int> XB = new Queue<int>();

        int aCount = 1;
        int bCount = 1;

        bool a = false;

        if (precedence == "A")
            a = true;


        for (int i = 0; i < rows; i ++) {

            string oneRow = Console.ReadLine();

            for(int l = 0; l < cols; l++) {

                map[i, l] = oneRow[l].ToString();

                if (map[i, l] == "A") {
                    YA.Enqueue(i);
                    XA.Enqueue(l);
                }
                if (map[i, l] == "B") {
                    YB.Enqueue(i);
                    XB.Enqueue(l);
                }
            }
        }
        
        // 先行から始めてABどちらも置けなくなったら終了
        while (true) {

            int[] direX = {1, -1, 0, 0};
            int[] direY = {0, 0, 1, -1};
            
            if (a) {

                int roopCount = YA.Count;

                for (int r = 0; r < roopCount; r++) {

                    int row = YA.Dequeue();
                    int col = XA.Dequeue();

                    for (int i = 0; i < 4; i++) {

                        int newRow = row + direY[i];
                        int newCol = col + direX[i];

                        if (newRow < 0 || newRow >= rows || newCol < 0 || newCol >= cols)
                            continue;

                        if (map[newRow, newCol] == ".") {

                            map[newRow, newCol] = "A";
                            YA.Enqueue(newRow);
                            XA.Enqueue(newCol);
                            aCount++;
                        }
                    }
                }
                if (YB.Count != 0)
                    a = false;
            }

            if (!a) {

                int roopCount = YB.Count;
                
                for (int r = 0; r < roopCount; r++) {

                    int row = YB.Dequeue();
                    int col = XB.Dequeue();

                    for (int i = 0; i < 4; i++) {

                        int newRow = row + direY[i];
                        int newCol = col + direX[i];

                        if (newRow < 0 || newRow >= rows || newCol < 0 || newCol >= cols)
                            continue;

                        if (map[newRow, newCol] == ".") {

                            map[newRow, newCol] = "B";
                            YB.Enqueue(newRow);
                            XB.Enqueue(newCol);
                            bCount++;
                        }
                    }
                }
                if (YA.Count != 0)
                    a = true;
            }

            if (YA.Count == 0 && YB.Count == 0)
                break;
        }


        Console.WriteLine(aCount + " " + bCount);

        if (aCount > bCount)
            Console.WriteLine("A");
        else
            Console.WriteLine("B");
    }
}

```