#include <iostream>
#include <cstdlib>
#include <ctime>
#include <cmath>
#include <vector>
#include <fstream>
using namespace std;

#define ellenoriz(felt, pont) if (felt) pont++; else cerr << "Nem teljesul a feltetel a " << __LINE__<< ". sorban." <<endl;

/* Szabalyok:
    - csak az a beugró érvényes, amely nem tartalmaz semmilyen változtatást a main()-ben,
        és már nincs benne kommentezve semmi
    - az "ellenoriz"-en kívül nem tartalmaz #define sorokat, és azt sem szabad megváltoztatni
*/

// Innentol

struct CD {
    string cim;
    vector<string> szamcimek;
};

int gyok(int bemenet) {
    return sqrt(bemenet);
}

void legyen_egy_uj_szam_a_cdn(CD &cd, string uj_cime) {
    cd.szamcimek.push_back(uj_cime);
}

CD betolt() {
    CD cd;
    ifstream f("__cd.txt");
    if (f.bad())
        cerr << "Nem sikerult a fajl megnyitasa!\n";
    string sor;
    getline(f, sor); // CD címe
    cd.cim = sor;
    getline(f, sor); // hány szám van a CD-n --> Erre az adatra igazából nincs is szükségünk...
    while(getline(f, sor))
        cd.szamcimek.push_back(sor);
    return cd;
}

// Idaig

int main() {
    int pont = 0;
    srand(time(0));

    CD cd;
    cd.cim = "Best of ITK";
    ellenoriz(cd.cim=="Best of ITK", pont);

    int in1 = rand()%100;
    int out1 = gyok(in1*in1);
    ellenoriz(in1==out1, pont);

    legyen_egy_uj_szam_a_cdn(cd, "Kari indulo");
    ellenoriz(cd.szamcimek.size()==1 && cd.szamcimek[0]=="Kari indulo", pont);

    legyen_egy_uj_szam_a_cdn(cd, "Kari indulo (masodik tetel)");
    ellenoriz(cd.szamcimek.size()==2, pont);

    ofstream out("__cd.txt");
    out << "Bev Prog Boogie" << endl;
    unsigned int szamszam = rand()%5+3;
    out << szamszam << endl;
    for (unsigned int i=0;i<szamszam;i++) out << "Mind egyforma cimu" << endl;
    CD cd2;
    cd2 = betolt();
    ellenoriz(cd2.cim=="Bev Prog Boogie" && cd2.szamcimek.size()==szamszam && cd2.szamcimek[1]=="Mind egyforma cimu",pont)

    cout << endl << pont << "/5 pont";
}
