Exemple #1
0
    public int[,] GenerateAdjacencyMatrix(DialLayout layout)
    {
        var width     = layout.LayoutWidth;
        var height    = layout.LayoutHeigth;
        var adjacency = new int[layout.ElementsCount, layout.ElementsCount];

        for (var i1 = 0; i1 < width; i1++)
        {
            for (var j1 = 0; j1 < height; j1++)
            {
                for (var i2 = 0; i2 < width; i2++)
                {
                    for (var j2 = 0; j2 < height; j2++)
                    {
                        var p1 = new LayoutPosition(layout, i1, j1);
                        var p2 = new LayoutPosition(layout, i2, j2);

                        if (p1.Ordinal == p2.Ordinal)
                        {
                            continue;
                        }

                        adjacency[p1.Ordinal, p2.Ordinal] = this.PieceCanReach(p1, p2) ? 1 : 0;
                    }
                }
            }
        }
        return(adjacency);
    }
Exemple #2
0
    public Walker(string pieceName, DialLayout layout)
    {
        originalAdjacency = ChessPieceFactory.
                            GetChessPieceByName(pieceName).
                            GenerateAdjacencyMatrix(layout);

        applyAdjacency = (int[, ])originalAdjacency.Clone();
        walkResult     = MatrixExt.IdentityMatrix(originalAdjacency.GetLength(0));

        _currentStep = 0;

        this.layout = layout;
        rules       = new List <IWalkRule> ();
    }
Exemple #3
0
        static void Main(string[] args)
        {
            DialLayout layout;

            try {
                layout = new DialLayout("layout.txt");
            } catch (System.Exception ex) {
                Console.WriteLine("Error occured:");
                Console.WriteLine(ex.Message);
                Console.ReadLine();
                return;
            }
            //layout.Matrix.PrintMatrix();

            string choice = null;

            while (true)
            {
                Console.WriteLine("Type chess piece name (queen, king , bishop, rook, knight, pawn) or 'exit' to quit :");
                choice = Console.ReadLine();

                if (choice.Equals("Exit", StringComparison.OrdinalIgnoreCase))
                {
                    Console.WriteLine("Quiting...");

                    return;
                }

                try {
                    var walker = new Walker(choice, layout);
                    walker.ApplyRulesFromFile("rules.txt");
                    var walkResult = walker.Walk();
                    //walkResult.PrintMatrix();

                    Console.WriteLine($"Number of possible phone numbers for {choice}: {walkResult.SumOfElements():N0}");
                } catch (System.Exception ex) {
                    Console.WriteLine("Error occured:");
                    Console.WriteLine(ex.Message);
                }

                Console.WriteLine("-----------------------------");
                Console.WriteLine();
            }
        }
Exemple #4
0
 public LayoutPosition(DialLayout layout, int x, int y)
 {
     multiplier = layout.LayoutHeigth;
     this.X     = x;
     this.Y     = y;
 }