示例#1
0
        private static List <Soluzione> GetSoluzioni(Esami esami)
        {
            List <string> keys = esami.GetKeys();

            List <Soluzione> r = new List <Soluzione>();

            r.AddRange(GetSoluzioni2(0, keys, new Soluzione(), esami));
            return(r);
        }
示例#2
0
        public List <string> ToConsoleOutput(Esami esami)
        {
            List <string> r = new List <string>();

            List <string> ordine = GetOrdineDegliEsami();

            foreach (string x in ordine)
            {
                r.Add(x.ToString() + "\t" + esami.GetExam(x).cfu + "\t" + StampaData(this.dictionary[x]));
            }

            return(r);
        }
示例#3
0
        private List <Tuple <DateTime, int> > GetDateTimeInOrdine(Esami esami)
        {
            List <Tuple <DateTime, int> > r = new List <Tuple <DateTime, int> >();

            foreach (string x in this.dictionary.Keys)
            {
                r.Add(new Tuple <DateTime, int>(this.dictionary[x], esami.GetExam(x).cfu));
            }

            r.Sort();

            return(r);
        }
示例#4
0
        private Esami GetEsamiFromFile(string filecontent, string file)
        {
            Esami esami = new Esami();

            EsamiFromFile obj = esami.CheckText(filecontent, File.ReadAllLines(file));

            if (obj == null || obj.IsEmpty())
            {
                return(null);
            }

            if (obj.AlreadyContaisExams())
            {
                return(obj.GetExams());
            }

            List <string> Lines    = obj.GetLines();
            string        plchlind = "[CFUNUM-PLACEHOLDER-";

            InputForm inpFrm = new InputForm();

            for (int i = 0; i < Lines.Count; i++)
            {
                string x = Lines[i];
                if (x.Contains(plchlind))
                {
                    string subjectname = x.Substring(x.IndexOf(plchlind) + plchlind.Length, x.IndexOf("]\"") - x.IndexOf(plchlind) - plchlind.Length);
                    inpFrm.Label1.Text    = "How many CFUs is " + Environment.NewLine + subjectname + " worth?";
                    inpFrm.InputText.Text = "";
                    inpFrm.ShowDialog();
                    Lines[i] = x.Replace(plchlind + subjectname + "]", inpFrm.InputText.Text);
                }
            }

            try
            {
                esami = new Esami(String.Join(Environment.NewLine, Lines));
            }
            catch
            {
                ;
            }

            if (esami == null || esami.GetEsami() == null || esami.GetEsami().Count == 0)
            {
                Console.WriteLine("No exams found in that file. Is it formatted correctly?");
                return(null);
            }

            return(esami);
        }
示例#5
0
        public void CalcolaPunteggio(Esami esami)
        {
            List <Tuple <DateTime, int> > datetimeInOrdine = GetDateTimeInOrdine(esami);
            List <double> r1 = new List <double>();

            for (int i = 0; i < datetimeInOrdine.Count - 1; i++)
            {
                double days   = (datetimeInOrdine[i + 1].Item1 - datetimeInOrdine[i].Item1).TotalDays;
                double points = days * datetimeInOrdine[i + 1].Item2;
                r1.Add(points);
            }

            var variance = (decimal)Variance(r1.ToArray());

            decimal tot_days = GetSum(r1);

            value = variance / tot_days;
        }
示例#6
0
        private void Button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog openFileDialog = new OpenFileDialog();
            var            r = openFileDialog.ShowDialog();

            if (r == DialogResult.OK)
            {
                string file        = openFileDialog.FileName;
                string filecontent = null;
                try
                {
                    filecontent = File.ReadAllText(file);
                }
                catch
                {
                    ;
                }

                if (string.IsNullOrEmpty(filecontent))
                {
                    MessageBox.Show("Error while reading the file selected.");
                    return;
                }

                esami = GetEsamiFromFile(filecontent, file);
                if (esami == null || esami.GetEsami() == null || esami.GetEsami().Count == 0)
                {
                    return;
                }

                var rispostaCompleta = DistribuisciEsamiCommon.RispostaCompleta.CalcolaRisposta(esami);
                if (rispostaCompleta.Item1 != null)
                {
                    MostraSoluzione(rispostaCompleta.Item1);
                }
                else
                {
                    MessageBox.Show(rispostaCompleta.Item2);
                }
            }
        }
 public EsamiFromFile(Esami esami)
 {
     this.esami = esami;
 }
示例#8
0
        public EsamiFromFile CheckText(string filecontent, string[] lines)
        {
            Esami esami = null;

            try
            {
                esami = new Esami(filecontent);
            }
            catch
            {
                ;
            }

            if (esami != null && esami.GetEsami() != null && esami.GetEsami().Count > 0)
            {
                return(new EsamiFromFile(esami));
            }

            //The file isn't formatted like the readme says it should be. Let's see if it's copied from the exams page.
            List <string> JSON = new List <string>
            {
                "["
            };

            foreach (string line in lines)
            {
                if (line.Contains("-"))
                {
                    if (Array.IndexOf(lines, line) + 1 == lines.Length)
                    {
                        break; //This line is a new subject, but there's no lines after this so there can't be any dates.
                    }
                    else
                    {
                        if (lines[Array.IndexOf(lines, line) + 1].IndexOf("/") != 2)
                        {
                            continue; //Is the next line NOT a date? Then keep going. This subject has no listed dates.
                        }
                    }
                    JSON.Add("{");
                    string subjectname = line.Substring(0, line.IndexOf("-")).Trim();
                    JSON.Add("\"name\":\"" + subjectname + "\",");
                    string dateline = "\"date\":[";
                    string nextline = lines[Array.IndexOf(lines, line) + 1];
                    while (nextline.IndexOf("/") == 2)
                    {
                        //So long as the next line is a date
                        dateline += "\"" + Convert.ToDateTime(nextline.Substring(0, nextline.IndexOf(":")).Replace("/", "-")).ToString("yyyy-MM-dd") + "\",";
                        nextline  = lines[Array.IndexOf(lines, nextline) + 1];
                    }
                    dateline = (dateline + "\"],").Replace("\",\"],", "\"],");  //2lazy to fix it properly
                    JSON.Add(dateline);
                    //MessageBox.Show(dateline);

                    JSON.Add("\"cfu\":\"" + "[CFUNUM-PLACEHOLDER-" + subjectname + "]" + "\"");

                    JSON.Add("},");
                }
            }
            JSON.Add("]");
            JSON[JSON.Count - 2] = "}";    //Remove the comma from the last closed curly bracket
            return(new EsamiFromFile(JSON));
        }
示例#9
0
        public static Tuple <DistribuisciEsamiCommon.RispostaCompleta, string> CalcolaRisposta(Esami esami)
        {
            if (esami == null || esami.IsEmpty())
            {
                string s1 = "There are no exams";
                return(new Tuple <RispostaCompleta, string>(null, s1));
            }

            List <Soluzione> soluzioni = GetSoluzioni(esami);

            if (soluzioni == null || soluzioni.Count == 0)
            {
                string s2 = "No solutions!";
                return(new Tuple <RispostaCompleta, string>(null, s2));
            }

            for (int i = 0; i < soluzioni.Count; i++)
            {
                soluzioni[i].CalcolaPunteggio(esami);
            }

            Punteggi punteggi = CalcolaPunteggi(soluzioni);

            return(new Tuple <RispostaCompleta, string>(new RispostaCompleta(soluzioni, punteggi), null));
        }
示例#10
0
        private static List <Soluzione> GetSoluzioni2(int v, List <string> keys, Soluzione soluzione, Esami esami)
        {
            if (v >= keys.Count)
            {
                return(null);
            }
            List <DateTime>  dateTimes = esami.GetDateTimes(keys[v]);
            List <Soluzione> r         = new List <Soluzione>();

            foreach (var d in dateTimes)
            {
                Soluzione s1 = soluzione.Clone();
                s1.dictionary[keys[v]] = d;
                var r2 = GetSoluzioni2(v + 1, keys, s1, esami);
                if (r2 == null || r2.Count == 0)
                {
                    r.Add(s1);
                }
                else
                {
                    r.AddRange(r2);
                }
            }
            return(r);
        }