public void LoadRandomProblem()
        {
            while (true)
            {
                int index = GenerateRandomProblemIndex();

                if (Problems[index - 1] != null)
                {
                    CurrentProblemIndex = index - 1;
                    CurrentProblem      = Problems[index - 1];
                    return;
                }
            }
        }
        static void LoadProblemFile()
        {
            var currentAssembly = Assembly.GetExecutingAssembly();
            var resourceName    = "Loader.Problems.json";

            using (Stream stream = currentAssembly.GetManifestResourceStream(resourceName))
                using (var file = new StreamReader(stream))
                    using (var reader = new JsonTextReader(file))
                    {
                        var jProblems = (JArray)JToken.ReadFrom(reader);

                        foreach (var jToken in jProblems)
                        {
                            var jo = (JObject)jToken;
                            if (jo == null)
                            {
                                continue;
                            }

                            var problemIndex       = jo["id"].Value <int>();
                            var problemDescription = jo["problem"].Value <string>();
                            var problemtype        = jo["type"].Value <string>();
                            var pt = (MathProblem.ProblemType)Enum.Parse(typeof(MathProblem.ProblemType), problemtype);
                            var mp = new MathProblem(problemIndex, problemDescription, pt);

                            #region Syntax Loading
                            //Problem Tagging Information
                            var tagArray = jo["syntaxTagging"].Value <JArray>();
                            if (tagArray == null)
                            {
                                continue;
                            }

                            foreach (var tagToken in tagArray)
                            {
                                var tagO = (JObject)tagToken;
                                if (tagO == null)
                                {
                                    continue;
                                }

                                var tagIndex        = tagO["id"].Value <int>();
                                var tagStr          = tagO["tag"].Value <string>();
                                var tagInteractType = tagO["interaction"].Value <string>();
                                var it =
                                    (ProblemWord.InteractionType)
                                    Enum.Parse(typeof(ProblemWord.InteractionType), tagInteractType);

                                var pw = new ProblemWord(tagIndex, tagStr, it);

                                if (it == ProblemWord.InteractionType.Input)
                                {
                                    pw.DragObject = pw.Word;
                                    if (tagO["input"] != null) // kr of input knowledge
                                    {
                                        var inputFormat = tagO["input"].Value <string>();
                                        if (inputFormat != null)
                                        {
                                            pw.DragObject = inputFormat;
                                        }
                                    }

                                    //pw.PQType = ProblemWord.ProblemQuestionType.Problem;
                                    //TODO
                                }
                                else if (it == ProblemWord.InteractionType.Concept)
                                {
                                    var conceptFormat = tagO["concept"].Value <string>();
                                    if (conceptFormat != null)
                                    {
                                        object explain = GeometryConcept.
                                                         ConceptCrawler.Instance.RetrieveConceptExplain(conceptFormat);
                                        string concept = "Concept: " + conceptFormat;
                                        if (explain != null)
                                        {
                                            pw.DragObject = new Tuple <string, string>(concept, (string)explain);
                                        }
                                        else
                                        {
                                            pw.DragObject = new Tuple <string, string>(conceptFormat, "TODO");
                                        }
                                    }
                                }
                                else if (it == ProblemWord.InteractionType.Hybrid)
                                {
                                    var    conceptFormat = tagO["concept"].Value <string>();
                                    object conceptTuple1 = null;
                                    if (conceptFormat != null)
                                    {
                                        object explain = GeometryConcept.
                                                         ConceptCrawler.Instance.RetrieveConceptExplain(conceptFormat);
                                        string concept = "Concept: " + conceptFormat;
                                        if (explain != null)
                                        {
                                            conceptTuple1 = new Tuple <string, string>(concept, (string)explain);
                                        }
                                        else
                                        {
                                            conceptTuple1 = new Tuple <string, string>(conceptFormat, "TODO");
                                        }
                                    }

                                    object inputTuple2 = null;
                                    inputTuple2 = pw.Word;
                                    if (tagO["input"] != null) // kr of input knowledge
                                    {
                                        var inputFormat = tagO["input"].Value <string>();
                                        if (inputFormat != null)
                                        {
                                            inputTuple2 = inputFormat;
                                        }
                                    }
                                    pw.DragObject = new Tuple <object, object>(conceptTuple1, inputTuple2);
                                }
                                mp.Words.Add(pw);
                            }
                            #endregion

                            Problems.Insert(mp.Index - 1, mp);
                        }
                    }
        }
 private void Load(int index)
 {
     CurrentProblemIndex = index - 1;
     CurrentProblem      = Problems[CurrentProblemIndex];
 }
        static void LoadProblemFile()
        {
            var currentAssembly = Assembly.GetExecutingAssembly();
            var resourceName = "Loader.Problems.json";
            using (Stream stream = currentAssembly.GetManifestResourceStream(resourceName))
            using (var file = new StreamReader(stream))
            using (var reader = new JsonTextReader(file))
            {
                var jProblems = (JArray)JToken.ReadFrom(reader);

                foreach (var jToken in jProblems)
                {
                    var jo = (JObject)jToken;
                    if (jo == null) continue;

                    var problemIndex = jo["id"].Value<int>();
                    var problemDescription = jo["problem"].Value<string>();
                    var problemtype = jo["type"].Value<string>();
                    var pt = (MathProblem.ProblemType)Enum.Parse(typeof(MathProblem.ProblemType), problemtype);
                    var mp = new MathProblem(problemIndex, problemDescription, pt);

                    #region Syntax Loading
                    //Problem Tagging Information
                    var tagArray = jo["syntaxTagging"].Value<JArray>();
                    if (tagArray == null) continue;

                    foreach (var tagToken in tagArray)
                    {
                        var tagO = (JObject)tagToken;
                        if (tagO == null) continue;

                        var tagIndex = tagO["id"].Value<int>();
                        var tagStr = tagO["tag"].Value<string>();
                        var tagInteractType = tagO["interaction"].Value<string>();
                        var it =
                            (ProblemWord.InteractionType)
                                Enum.Parse(typeof(ProblemWord.InteractionType), tagInteractType);

                        var pw = new ProblemWord(tagIndex, tagStr, it);

                        if (it == ProblemWord.InteractionType.Input)
                        {
                            pw.DragObject = pw.Word;
                            if (tagO["input"] != null) // kr of input knowledge
                            {
                                var inputFormat = tagO["input"].Value<string>();
                                if (inputFormat != null)
                                {
                                    pw.DragObject = inputFormat;
                                }
                            }

                            //pw.PQType = ProblemWord.ProblemQuestionType.Problem;
                            //TODO
                        }
                        else if (it == ProblemWord.InteractionType.Concept)
                        {
                            var conceptFormat = tagO["concept"].Value<string>();
                            if (conceptFormat != null)
                            {
                                object explain = GeometryConcept.
                                    ConceptCrawler.Instance.RetrieveConceptExplain(conceptFormat);
                                string concept = "Concept: " + conceptFormat;
                                if (explain != null)
                                {
                                    pw.DragObject = new Tuple<string, string>(concept, (string)explain);
                                }
                                else
                                {
                                    pw.DragObject = new Tuple<string, string>(conceptFormat, "TODO");
                                }
                            }
                        }
                        else if (it == ProblemWord.InteractionType.Hybrid)
                        {
                            var conceptFormat = tagO["concept"].Value<string>();
                            object conceptTuple1 = null;
                            if (conceptFormat != null)
                            {
                                object explain = GeometryConcept.
                                   ConceptCrawler.Instance.RetrieveConceptExplain(conceptFormat);
                                string concept = "Concept: " + conceptFormat;
                                if (explain != null)
                                {
                                    conceptTuple1 = new Tuple<string, string>(concept, (string)explain);
                                }
                                else
                                {
                                    conceptTuple1 = new Tuple<string, string>(conceptFormat, "TODO");
                                }
                            }

                            object inputTuple2 = null;
                            inputTuple2 = pw.Word;
                            if (tagO["input"] != null) // kr of input knowledge
                            {
                                var inputFormat = tagO["input"].Value<string>();
                                if (inputFormat != null)
                                {
                                    inputTuple2 = inputFormat;
                                }
                            }
                            pw.DragObject = new Tuple<object, object>(conceptTuple1, inputTuple2);
                        }
                        mp.Words.Add(pw);
                    }
                    #endregion
                 
                    Problems.Insert(mp.Index-1, mp);
                }
            }
        }
        public void LoadRandomProblem()
        {
            while(true)
            {
                int index = GenerateRandomProblemIndex();

                if (Problems[index - 1] != null)
                {
                    CurrentProblemIndex = index - 1;
                    CurrentProblem = Problems[index - 1];
                    return;
                }
            }
        }
 private void Load(int index)
 {
     CurrentProblemIndex = index - 1;
     CurrentProblem = Problems[CurrentProblemIndex];
 }