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); }
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> (); }
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(); } }
public LayoutPosition(DialLayout layout, int x, int y) { multiplier = layout.LayoutHeigth; this.X = x; this.Y = y; }