package soluzione19062017; import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; public class Soluzione2TestoBMain { public static void main(String[] args) { try (BufferedReader br = new BufferedReader(new FileReader("src/soluzione19062017/B.txt")); PrintWriter pw1 = new PrintWriter(new FileWriter("src/soluzione19062017/SoluzioneB2-1.txt")); PrintWriter pw2 = new PrintWriter(new FileWriter("src/soluzione19062017/SoluzioneB2-2.txt")); PrintWriter pw3 = new PrintWriter(new FileWriter("src/soluzione19062017/SoluzioneB2-3.txt")); PrintWriter pw4 = new PrintWriter(new FileWriter("src/soluzione19062017/SoluzioneB2-4.txt")); PrintWriter pw5 = new PrintWriter(new FileWriter("src/soluzione19062017/SoluzioneB2-5.txt"))) { HashMap> dati = new HashMap<>(); ArrayList messaggi = new ArrayList<>(); Soluzione2TestoBAttivita mex; String nome, materia; double num, den; String linea; String[] lineaSp, mexSp, ratioSp; linea = br.readLine(); while (linea != null) { if (!linea.isEmpty()) { lineaSp = linea.split(" : "); nome = lineaSp[0]; mexSp = lineaSp[1].split(", "); materia = mexSp[0]; System.out.println(materia + " f"); ratioSp = mexSp[1].split(" / "); num = Double.parseDouble(ratioSp[0]); den = Double.parseDouble(ratioSp[1]); mex = new Soluzione2TestoBAttivita(materia, den, num); if (dati.keySet().contains(nome)) { dati.get(nome).add(mex); } else if (!dati.keySet().contains(nome)) { dati.put(nome, messaggi); dati.get(nome).add(mex); } messaggi = new ArrayList<>(); } linea = br.readLine(); if (linea == null) { break; } } //System.out.println(dati); for (String s : dati.keySet()) { for (Soluzione2TestoBAttivita m : dati.get(s)) { System.out.println(s + " " + m.stampMex()); } } /* * punto 1 */ ArrayList attiv = new ArrayList<>(); for (String s : dati.keySet()) { pw1.print(s + " "); for (Soluzione2TestoBAttivita m : dati.get(s)) { if (attiv.contains(m.getMateria())) continue; attiv.add(m.getMateria()); } for (String a : attiv) { pw1.print(a + " "); } attiv = new ArrayList<>(); pw1.println(); } /* * punto 2 */ for (String s : dati.keySet()) { pw2.println(s + " "); for (Soluzione2TestoBAttivita m : dati.get(s)) { pw2.print(m.getMateria() + " "); pw2.print(m.getRatio() * 100 + " %\n"); } } /* * punto 3 */ double nAtt, sumAtt, rat; for (String s : dati.keySet()) { nAtt = 0; rat = 0; sumAtt = 0; nAtt = dati.get(s).size(); for (Soluzione2TestoBAttivita m : dati.get(s)) { sumAtt += m.getRatio(); } rat = sumAtt / nAtt; if (rat > 0.5) { pw3.println(s); } } /* * punto 4 */ double maxRat = 0; ArrayList ratioRank = new ArrayList<>(); for (String s : dati.keySet()) { for (Soluzione2TestoBAttivita m : dati.get(s)) { if (maxRat < m.getRatio()) { maxRat = m.getRatio(); } } for (Soluzione2TestoBAttivita m : dati.get(s)) { if (maxRat == m.getRatio()) { pw4.println(s + " " + m.stampMex()); } } maxRat = 0; } /* * punto 5 */ ArrayList rankRatio = new ArrayList<>(); //lista ratei da ordinare per singola persona ArrayList mexs = new ArrayList<>(); maxRat = 0; for (String s : dati.keySet()) { for (Soluzione2TestoBAttivita m : dati.get(s)) { mexs.add(m); } for (Soluzione2TestoBAttivita m : mexs) { rankRatio.add(m.getRatio()); } Collections.sort(rankRatio); pw5.print(s + "\n"); for (Double d : rankRatio) { for (Soluzione2TestoBAttivita m : mexs) { if (m.getRatio() == d) { pw5.println(m.stampMex()); } } } pw5.println(); mexs = new ArrayList<>(); } } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }