public IGrid<Cell> On(IGrid<Cell> grid, Cell startAt = null)
        {
            if (startAt == null)
            {
                startAt = grid.RandomCell();
            }

            var stack = new Stack<Cell>();
            stack.Push(startAt);

            while (stack.Count != 0)
            {
                var current = stack.Peek();
                var neighbours = current.Neighbours().Where(n => n.Links.Count == 0).ToList();
                if (neighbours.Count == 0)
                {
                    stack.Pop();
                }
                else
                {
                    var neighbour = neighbours[rand.Next(neighbours.Count)];
                    current.Link(neighbour);
                    stack.Push(neighbour);
                }


            }

            return grid;
        }
        public static IEnumerable<Segment> Parse(string s)
        {
            var segments = new List<Segment>();

            var stack = new Stack<Tuple<int, Segment>>();

            var lines = s.Split('\n');

            foreach (var line in lines)
            {
                var match = Regex.Match(line, @"^(\s*)(.*)$");
                var whiteSpace = match.Result("$1").Replace("\t", "    ");
                var text = match.Result("$2");

                if (string.IsNullOrWhiteSpace(text))
                {
                    //stack.Clear();
                    continue;
                }

                var segment = new Segment(text.Trim());

                var indent = whiteSpace.Length;

                if (stack.Any())
                {
                    while (stack.Any() && stack.Peek().Item1 >= indent)
                        stack.Pop();
                    if (stack.Any())
                        stack.Peek().Item2.Add(segment);
                }

                if (stack.Any() == false)
                    segments.Add(segment);
                stack.Push(Tuple.Create(indent, segment));
            }

            return segments;
        }
示例#3
0
        private String[] Parse(String s)
        {
            String[]       s1 = new String[s.Length];
            Stack <String> st = new Stack <String>();
            int            i  = 0;

            s = s.Replace("ln", "l");
            s = s.Replace("cos", "c");
            s = s.Replace("sin", "s");
            int t = 0;

            for (int j = 0; j < s.Length; j++)
            {
                String c = s[j] + "";
                if (functionCheek(c))
                {
                    t = 1;
                }
                if (numberCheek(c))
                {
                    s1[i] = c;
                    while (s.Length > j + 1 && numberCheek(s[j + 1] + ""))
                    {
                        j++;
                        s1[i] += s[j];
                    }
                    i++;
                }
                else
                if (operatorCheek(c))
                {
                    while (!(st.Count() == 0))
                    {
                        if (priority(st.Peek()) >= priority(c))
                        {
                            s1[i] = st.Peek();
                            st.Pop();
                            i++;
                        }
                        else
                        {
                            break;
                        }
                    }
                    st.Push(c);
                }
                else
                if ((c == "(" || functionCheek(c)) && t == 1)
                {
                    st.Push(c);
                }
                else
                if (c == ")" && t == 1)
                {
                    while (st.Peek() != "(")
                    {
                        s1[i] = st.Peek();
                        st.Pop();
                        i++;
                    }
                    st.Pop();

                    if (functionCheek(st.Peek()))
                    {
                        s1[i] = st.Peek();
                        st.Pop();
                        i++;
                    }
                    t = 0;
                }
                else
                if (c == "(")
                {
                    st.Push(c);
                }
                else
                if (c == ")")
                {
                    while (st.Peek() != "(")
                    {
                        s1[i] = st.Peek();
                        st.Pop();
                        i++;
                    }
                    st.Pop();
                }
            }
            while (!(st.Count() == 0))
            {
                s1[i] = st.Peek();
                st.Pop();
                i++;
            }

            return(s1);
        }
示例#4
0
 static void Main()
 {
     Stack stack = new Stack();
     stack.Push(1);
     stack.Push(2);
     stack.Push(3);
     stack.Pop();
     Console.WriteLine(stack.Count+ " " + stack.Contains(1));
     stack.PrintStack();
     Console.WriteLine("Top element:"+stack.Peek());
     Console.WriteLine("**************************");
     Stack<int> stack1 = new Stack<int>();
     stack1.Push(1);
     stack1.Push(2);
     stack1.Push(3);
     stack1.Pop();
     Console.WriteLine(stack1.Count + " " + stack1.Contains(1));
     foreach (int i in stack1)
     {
         Console.WriteLine(i);
     }
     Console.WriteLine("Top element:"+stack1.Peek());
 }
示例#5
0
        static void Main()
        {
            var dust      = Console.ReadLine().Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).Select(int.Parse).ToArray();
            var water     = Console.ReadLine().Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).Select(int.Parse).ToArray();
            var bucket    = new Stack <int>(water);
            var flower    = new Queue <int>(dust);
            var eternally = new Queue <int>();

            while (true)
            {
                var currentFlower = flower.Peek();
                var currentBucket = bucket.Peek();
                var diff          = currentBucket - currentFlower;
                if (diff > 0)
                {
                    bucket.Pop();
                    flower.Dequeue();
                    if (bucket.Count > 0)
                    {
                        bucket.Push(diff + bucket.Pop());
                    }
                    else
                    {
                        bucket.Push(diff);
                    }
                }
                else if (diff == 0)
                {
                    bucket.Pop();
                    flower.Dequeue();
                    eternally.Enqueue(currentFlower);
                }
                else if (diff < 0)
                {
                    flower.Dequeue();
                    bucket.Pop();
                    var flowerArr = new int[flower.Count + 1];
                    flowerArr[0] = Math.Abs(diff);
                    for (int z = 1; z < flowerArr.Length; z++)
                    {
                        flowerArr[z] = flower.Dequeue();
                    }
                    flower = new Queue <int>(flowerArr);
                }
                if (bucket.Count == 0)
                {
                    Console.WriteLine(string.Join(" ", flower));
                    break;
                }
                else if (flower.Count == 0)
                {
                    Console.WriteLine(string.Join(" ", bucket));
                    break;
                }
            }

            if (eternally.Count != 0)
            {
                Console.WriteLine(string.Join(" ", eternally));
            }
            else if (eternally.Count == 0)
            {
                Console.WriteLine("None");
            }
        }