示例#1
0
 private static void ConnectNodes(MutatingNode node, MutatingNode upperNode)
 {
     if (upperNode != null)
     {
         node.Connections.Add(upperNode);
         upperNode.Connections.Add(node);
     }
 }
示例#2
0
        /// <summary>
        /// Builds the world from the input
        /// </summary>
        /// <param name="path">Path to the input file</param>
        /// <returns>The constructed world</returns>
        public async Task <LinkedList <MutatingNode> > BuildWorldFromInput(string path)
        {
            if (!File.Exists(path))
            {
                throw new ArgumentException($"Unable to find file at {path}.");
            }

            var world = new LinkedList <MutatingNode>();

            using (var input = new StreamReader(path))
            {
                string allText = await input.ReadToEndAsync();

                var lines = allText.Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries);

                // tempArray is used to determine the neighbours (one/off)
                var tempArray = new MutatingNode[lines.Length][];
                for (int row = 0; row < lines.Length; ++row)
                {
                    int columnsLength = lines[row].Length;

                    tempArray[row] = new MutatingNode[columnsLength];
                    for (int column = 0; column < columnsLength; column++)
                    {
                        var node = new MutatingNode(lines[row][column] == '*', row, column);
                        world.AddLast(node);
                        tempArray[row][column] = node;

                        if (row > 0 && row <= tempArray.Length)
                        {
                            MutatingNode upperNode = tempArray[row - 1][column];
                            ConnectNodes(node, upperNode);
                            if (column < columnsLength - 1)
                            {
                                MutatingNode upperRightNode = tempArray[row - 1][column + 1];
                                ConnectNodes(node, upperRightNode);
                            }
                        }

                        if (column > 0)
                        {
                            MutatingNode leftNode = tempArray[row][column - 1];
                            ConnectNodes(node, leftNode);
                        }

                        if (column > 0 && row > 0)
                        {
                            MutatingNode upperLeftNode = tempArray[row - 1][column - 1];
                            ConnectNodes(node, upperLeftNode);
                        }
                    }
                }
            }

            return(world);
        }