// Scheletro di codice per il progetto 2024

// In questo file NON ci deve essere nessuna dichiarazione "package"
// come per esempio
//
//	    package progetto;

// Potete aggiungere qui altri "import" per usare le librerie
// standard di Java, se vi servono.
import progetto2024.Helper;

//NON modificate in nessun modo la linea seguente.
public class Progetto {

	// Qui potete liberamente aggiungere funzioni / procedure.
	
	// Se volete, potete anche inserire variabili globali.
	// Se decidete di inserirle, dovete fare in modo che la funzione
	//     calcolaEletti
	// inizializzi tali variabili **ogni volta** che viene chiamata. 
	// Inizializzarle una volta sola nel main NON basta, visto che la
	// funzione verra` chiamate piu` volte.
	
	// NON modificate in nessun modo la linea seguente.
    public static int[] calcolaEletti(int candidati, int seggi, int[][] listaVoti) {
    	// Qui potete inserire il vostro codice.
    	
        int[] eletti;
        eletti = new int[seggi];

        // ....        
        
        return eletti; 
    }
    
	// Potete modificare il main liberamente. Potete per esempio eseguire
	// qualche test sulla funzione sopra, come quelli suggeriti sotto.
	// Ricordatevi che chi corregge il progetto NON eseguira` il vostro
	// main, ma i propri test.
	// 
    public static void main(String[] args) {
        long seed = 123123;
        
        int numeroTest = 5000;
        int numeroTestSemplici = 20;
        long t0 = System.currentTimeMillis();
        
        for (int i = 0; i < numeroTestSemplici; i++){
            int candidati = 6;
            int seggi = 3;
            Helper.setRandomSeed(seed + i);
            int[][] listaVoti = Helper.generaVotiSemplice(candidati, seggi);
            try {
	            int[] eletti = calcolaEletti(candidati, seggi, listaVoti);
	
	            if ( !Helper.testSoluzione(  candidati, seggi, listaVoti, eletti) ) {
	                System.out.println("Fallito test semplice " + i);
	                return;
	            }
            } catch( Exception e ) {
                System.out.println("Crash durante il test semplice " + i);
                throw e;
            }
        }

        for (int i = 0; i < numeroTest; i++) {
            Helper.setRandomSeed(seed + i);
        	int candidati = Helper.generaNumCandidati();
            int seggi = Helper.generaNumSeggi(candidati);
            int[][] listaVoti = Helper.generaVoti(candidati, seggi);
            try {
                int[] eletti = calcolaEletti( candidati, seggi,listaVoti);
                if ( !Helper.testSoluzione( candidati, seggi,listaVoti, eletti) ){            
                    System.out.println("Fallito test approfondito " + i);
                    return;
                }
            } catch( Exception e ) {
                System.out.println("Crash durante il test approfondito " + i);
                throw e;
            }
        }
        
        long t1 = System.currentTimeMillis();
        System.out.println("Tutti i test sono stati superati. \n Tempo impiegato: " + (t1-t0)/1000 + " secondi.");
    }
    
}
