Ejemplo n.º 1
0
        public static string get_results(BaseEquation equation)
        {
            string ret = "answer not found\r\n";
            LinkedList <DivEquation> sorted_equation_list     = new LinkedList <DivEquation>();
            List <DivEquation>       calculated_equation_list = new List <DivEquation>();
            DivEquation root = new DivEquation(equation);

            root.fix();
            sorted_equation_list = sorted_insert(sorted_equation_list, calculated_equation_list, root);
            while (true)
            {
                if (sorted_equation_list.Count == 0)
                {
                    break;
                }
                if (sorted_equation_list.First.Value.ans_found)
                {
                    if (ret == "answer not found\r\n")
                    {
                        ret = "";
                    }
                    ret += sorted_equation_list.First.Value.equation_console + "\r\n";
                    break;
                }
                LinkedListNode <DivEquation> now = sorted_equation_list.First;
                sorted_equation_list.RemoveFirst();
                List <char> ava_l = now.Value.available_letters_from_last(1);
                List <int>  ava_n = now.Value.available_nums();
                for (int i = 0; i < ava_n.Count; i++)
                {
                    if (ava_n[i] == 0)
                    {
                        int first_l = now.Value.get_first_in_each_line().IndexOf(ava_l[0]);
                        if (first_l != -1 && now.Value.spilt_string_without_operator[first_l].Length > 1)
                        {
                            continue;
                        }
                    }
                    string      new_eva = now.Value.replace(ava_l[0], ava_n[i]);
                    DivEquation new_eq  = new DivEquation(new_eva);
                    if (new_eq.ans_found)
                    {
                        if (ret == "answer not found\r\n")
                        {
                            ret = "";
                        }
                        ret += new_eq.equation_console + "\r\n";
                        continue;
                    }
                    sorted_equation_list = sorted_insert(sorted_equation_list, calculated_equation_list, new_eq);
                }
            }
            return(ret);
        }
Ejemplo n.º 2
0
        private static LinkedList <DivEquation> sorted_insert(LinkedList <DivEquation> list, List <DivEquation> calculated, DivEquation to_insert)
        {
            if (to_insert.node_point.compare_to(0) < 0)
            {
                return(list);
            }
            if (list.Count == 0)
            {
                list.AddFirst(to_insert);
                calculated.Add(to_insert);
            }
            else
            {
                for (int i = 0; i < calculated.Count; i++)
                {
                    if (to_insert.same_as(calculated[i]))
                    {
                        return(list);
                    }
                }

                LinkedListNode <DivEquation> now = list.First;
                bool inserted = false;
                for (int i = 0; i < list.Count; i++)
                {
                    if (to_insert.node_point.compare_to(now.Value.node_point) < 0)
                    {
                        list.AddBefore(now, to_insert);
                        calculated.Add(to_insert);
                        inserted = true;
                        break;
                    }
                    now = now.Next;
                }
                if (!inserted)
                {
                    list.AddLast(to_insert);
                    calculated.Add(to_insert);
                }
            }
            return(list);
        }