#include <iostream>
#include <cstdlib>
#include <fstream>
#include <string>

using namespace std;

struct valasz{
    string azon, valasz;

}tomb[500];

string megoldas;
int pontszam(string valasz, string megoldas); ///7. feladathoz

int main()
{
    setlocale(LC_ALL,"hun");
    ///1. feladat
    cout << "1. feladat: adatok beolvasása." << endl;
    ifstream be;
    be.open("valaszok.txt");
    if(be.fail()){
        cout << "Hiba";
        cin.get();
        exit(-1);
    }
    be >> megoldas;
    int i=0;
    while(be  >> tomb[i].azon >> tomb[i].valasz){

        i++;
    }
    be.close();
    int db=i;
    ///2. feladat
    cout << "2. feladat: A vetélkedőn " << db << " versenyző indult." << endl;
    ///3. feladat
    string azon;
    cout << "Adjon meg egy azonosítót: ";
    cin >> azon;
    i=0;
    while(tomb[i].azon!=azon && i<db){
        i++;
    }
    cout << "3. feladat: A versenyző azonosítója " << azon << endl;
    cout << tomb[i].valasz << " (a versenyző válasza)" << endl;
    ///4. feladat
    cout << "4. feladat: " << endl;
    cout << megoldas << " (helyes megoldás)" << endl;
    for(int j=0; j<14; j++){
        if(tomb[i].valasz[j]==megoldas[j]) cout << "+";
        else cout << " ";
    }
    ///5. feladat
    cout << endl;
    cout << "Adja meg a feladat sorszámaát (1-14): ";

    int feladatszam;
    cin >> feladatszam;
    cout << "5. feladat: A feladat sorszáma: " << feladatszam << endl;
    float szum=0;
    for(int i=0;i<db; i++){
       if(tomb[i].valasz[feladatszam-1]==megoldas[feladatszam-1]) szum++;
    }
    printf("%s %.0f %s %.2f %s","A feladatra", szum, "fő, a versenyzők",szum/db*100, "%-a adott helyes választ.\n");
    ///6. feladat
    cout << "6. feladat: A versenyzők pontszámának meghatározása: " << endl;
    ofstream ki;
    ki.open("pontok.txt");
    if(ki.fail()){
        cout << "Hiba";
        cin.get();
        exit(-1);
    }

    for(int i=0;i<db; i++){
       int pontszam=0;
       for(int j=0; j<14; j++){
          if(tomb[i].valasz[j]==megoldas[j]){
            if(j<5) pontszam+=3;
            else if(j>=5 && j<10) pontszam+=4;
            else if(j>=10 && j<13) pontszam+=5;
            else pontszam+=6;
          }
       }
       ki << tomb[i].azon << " " << pontszam << endl;
    }
    ki.close();
    ///7. feladat
    //legmagasabb pont meghatározása
    int ePont=-1, mPont=-1, hPont=-1;
    for(int i=0; i<db; i++) {
        if(pontszam(tomb[i].valasz,megoldas) > ePont) ePont=pontszam(tomb[i].valasz,megoldas);
    }
    //masodik legmagasabb pont meghatározása
    for(int i=0; i<db; i++) {
        if(pontszam(tomb[i].valasz,megoldas) > mPont && pontszam(tomb[i].valasz,megoldas)!=ePont) mPont=pontszam(tomb[i].valasz,megoldas);
    }
    //harmadik legmagasabb pont meghatározása
    for(int i=0; i<db; i++) {
        if(pontszam(tomb[i].valasz,megoldas) > hPont && pontszam(tomb[i].valasz,megoldas)!=ePont && pontszam(tomb[i].valasz,megoldas)!=mPont) hPont=pontszam(tomb[i].valasz,megoldas);
    }
    //kiirjuk az első, második, harmadik pontszámhoz tartozó azonosítókat sorban
    for(int i=0; i<db; i++) {
        if(pontszam(tomb[i].valasz,megoldas) == ePont) cout << "1. díj (" << ePont << "): " << tomb[i].azon << endl;
    }
    for(int i=0; i<db; i++) {
        if(pontszam(tomb[i].valasz,megoldas) == mPont) cout << "2. díj (" << mPont << "): " << tomb[i].azon << endl;
    }
    for(int i=0; i<db; i++) {
        if(pontszam(tomb[i].valasz,megoldas) == hPont) cout << "3. díj (" << hPont << "): " << tomb[i].azon << endl;
    }
    return 0;
}
int pontszam(string valasz, string megoldas){
int pontszam=0;
       for(int j=0; j<14; j++){
          if(valasz[j]==megoldas[j]){
            if(j<5) pontszam+=3;
            else if(j>=5 && j<10) pontszam+=4;
            else if(j>=10 && j<13) pontszam+=5;
            else pontszam+=6;
          }
       }
       return pontszam;

}
