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