#include <iostream>
#include <fstream>
#include <vector>
#include <cstdlib>

using namespace std;

struct rgb
{
    int r,g,b;
    int osszeg;
};

void F1(vector<vector<rgb>> &k)
{
    ifstream fbe;
    fbe.open("kep.txt");
    vector<rgb> sor;
    rgb tmp;
    while(fbe>>tmp.r&&fbe>>tmp.g&&fbe>>tmp.b)
    {
        tmp.osszeg=tmp.r+tmp.g+tmp.b;
        sor.push_back(tmp);

        if(sor.size()==640)
        {
            k.push_back(sor);
            sor.clear();
        }
    }
    fbe.close();
}

void F2(vector<vector<rgb>> k)
{
    cout << "2. feladat" << endl;
    int sor,oszlop;
    cout << "Kérem egy képpont adatait!" << endl;
    cout << "Sor: ";
    cin >> sor;
    cout << "Oszlop: ";
    cin >> oszlop;
    rgb RGB;
    RGB=k[sor][oszlop];
    printf("A képpont színe RGB(%d,%d,%d)\n",RGB.r,RGB.g,RGB.b);
}

void F3(vector<vector<rgb>> k)
{
    cout << "3. feladat" << endl;
    int db=0;
    for(auto sor:k)
    {
        for(auto RGB:sor)
        {
            if(RGB.osszeg>600) db++;
        }
    }
    printf("A világos képpontok száma: %d\n",db);         // 7837
}

void F4(vector<vector<rgb>> k)
{
    cout << "4. feladat" << endl;
    int minimum=255*3;
    for(auto sor:k)
    {
        for(auto RGB:sor)
        {
            if(RGB.osszeg<minimum) minimum=RGB.osszeg;
        }
    }
    printf("A legsötétebb pont RGB összege: %d\n",minimum);       // 197
    cout << "A legsötétebb pixelek színe:" << endl;
    for(auto sor:k)
    {
        for(auto RGB:sor)
        {
            if(RGB.osszeg==minimum) printf("RGB(%d,%d,%d)\n",RGB.r,RGB.g,RGB.b);
        }
    }
    // RGB(0,85,112)
    // RGB(0,86,111)
    // RGB(0,86,111)
}

bool hatar(vector<vector<rgb>> k,int s,int diff)
{
    vector<rgb> tmp;
    tmp=k[s];     // s valójában nem a sor száma, hanem az indexe...
    for(int i=0;i<640-1;i++)
    {
        if(abs(tmp[i].b-tmp[i+1].b)>diff)
            return true;
    }
    return false;
}

void F6(vector<vector<rgb>> k)
{
    cout << "6. feladat" << endl;
    int sor=0;
    while(!hatar(k,sor,10))
    {
        sor++;
    }
    printf("A felhő legfelső sora: %d\n",sor+1);      // 103
    sor=360-1;
    while(!hatar(k,sor,10))
    {
        sor--;
    }
    printf("A felhő legalsó sora: %d\n",sor+1);       // 280
}

int main()
{
    setlocale(LC_ALL,"");

    vector<vector<rgb>> kep;

    F1(kep);
    F2(kep);
    F3(kep);
    F4(kep);

    F6(kep);

    return 0;
}
