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); }
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); }