#include <iostream>
#include <cstdlib>
#include <fstream>

using namespace std;

struct tanc{

    string tanc, lany, fiu;

}adatok[140];

bool benne_van(string nev, string tomb[20]);

int main()
{
    setlocale(LC_ALL,"hun");
    ///1. feladat
    cout << "1. feladat: adatok beolvasása" << endl;

    ifstream be;
    be.open("tancrend.txt");
    if(be.fail()){
        cout << "hiba";
        cin.get();
        exit(-1);
    }
    int i=0;


    while(be >> adatok[i].tanc >> adatok[i].lany >> adatok[i].fiu){
         i++;
    }
    be.close();
    int db=i;
    ///2. feladat
    cout << "2. feladat: első és utolsó tánc" << endl;
    cout << "Első tánc: " << adatok[0].tanc << ", utolsó tánc: " << adatok[db-1].tanc << endl;
    ///3. feladat
    cout << "3. feladat: sambák száma: " ;
    int dbSz=0;
    for(int i=0; i<db; i++){
        if(adatok[i].tanc=="samba") dbSz++;
    }
    cout << dbSz << endl;
    ///4. feladat
    cout << "5. feladat: Vilma táncai: " << endl;
    for(int i=0; i<db; i++){
        if(adatok[i].lany=="Vilma") cout << adatok[i].tanc << endl;
    }
    ///5. feladat
    cout << "5. feladat: Vilma partnerei: " << endl;
    string tanc;
    cout << "Adj meg egy táncot (cha-cha, rumba, salsa, samba, jive, tango, bachata): ";
    cin >> tanc;
    bool van=false;
    for(int i=0; i<db; i++){
        if(adatok[i].tanc==tanc && adatok[i].lany=="Vilma" ) {
          cout << "A " << tanc << " bemutatóján Vilma párja " << adatok[i].fiu << " volt." << endl;
          van=true;
        }
    }
    if(!van) cout << "Vilma nem táncolt " << tanc << "-t" << endl;

    i=0;
    while(!(adatok[i].tanc==tanc && adatok[i].lany=="Vilma") && i<db ) {
        i++;
    }
    if(i<db-1) cout << "A " << tanc << " bemutatóján Vilma párja " << adatok[i].fiu << " volt." << endl;
    else cout << "Vilma nem táncolt " << tanc << "-t" << endl;

    ///6. feladat
    cout << "6. feladat: a bemutatón részt vett fiúk és lányok " << endl;
    string fiu[20], lany[20];
    int k=0, l=0;
    for(i=0;i<db;i++) {
        if(!benne_van(adatok[i].lany,lany)) {
            lany[k]=adatok[i].lany;
            k++;
        }
        if(!benne_van(adatok[i].fiu,fiu)) {
            fiu[l]=adatok[i].fiu;
            l++;
        }
    }
    ofstream ki;
    ki.open("szereplok.txt");
    ki <<  "Lányok: ";
    for(int i=0; i<k-1; i++) {
        ki << lany[i] << ", ";
    }
    ki << lany[k-1] << endl;
    ki <<  "Fiúk: ";
    for(int i=0; i<l-1; i++) {
        ki << fiu[i] << ", ";
    }
    ki << fiu[l-1] ;
    ki.close();

    int fiuMax=0;
    for(int i=0;i<l;i++){
        int szamlalo=0;
        for(int j=0;j<db;j++){
            if(fiu[i]==adatok[j].fiu) szamlalo++;
        }
    if(szamlalo>fiuMax) fiuMax=szamlalo;
    }


    for(int i=0;i<l;i++){
        int szamlalo=0;
        for(int j=0;j<db;j++){
            if(fiu[i]==adatok[j].fiu) szamlalo++;
        }
    if(szamlalo==fiuMax) cout << fiu[i] << endl;
    }
    int lanyMax=0;
    for(int i=0;i<k;i++){
        int szamlalo=0;
        for(int j=0;j<db;j++){
            if(lany[k]==adatok[j].lany) szamlalo++;
        }
    if(szamlalo>lanyMax) lanyMax=szamlalo;
    }

    cout << lanyMax;
    for(int i=0;i<k;i++){
        int szamlalo=0;
        for(int j=0;j<db;j++){
            if(lany[k]==adatok[j].lany) szamlalo++;
        }
    if(szamlalo==lanyMax) cout << lany[i] << endl;
    }
    return 0;
}

bool benne_van(string nev, string tomb[20]){
    bool van=false;
    int i=0;
    while(!van && i<20){
        if(tomb[i]==nev) van=true;
        i++;
    }
    return van;
}
