Q2

mail@pastecode.io avatarunknown
c_cpp
a month ago
1.7 kB
25
Indexable
Never
bool isLeapYear(int year) {
    return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}

bool isDateValid(string date) {
    stringstream ss(date);
    int year, month, day;
    char delimiter;

    ss >> year >> delimiter >> month >> delimiter >> day;

    if (ss.fail() || delimiter != '-' || year < 0 || month < 1 || month > 12 || day < 1) {
        return false;
    }

    int daysInMonth = 31;
    
    if (month == 4 || month == 6 || month == 9 || month == 11) {
        daysInMonth = 30;
    } else if (month == 2) {
        if (isLeapYear(year)) {
            daysInMonth = 29;
        } else {
            daysInMonth = 28;
        }
    }

    return day <= daysInMonth;
}

bool isTimeValid(string time) {
    stringstream ss(time);
    int hours, minutes, seconds;
    char delimiter;

    ss >> hours >> delimiter >> minutes >> delimiter >> seconds;

    if (ss.fail() || delimiter != ':' || hours < 0 || hours >= 24 || minutes < 0 || minutes >= 60 || seconds < 0 || seconds >= 60) {
        return false;
    } else {
        return true;
    }
}

vector<vector<string>> countUserLogins(vector<vector<string>> logs){

    map<string, map<string, int>> logins;

    for(auto log: logs){
        string user = log[0];
        string time = log[1];
        string date = log[2];

        if(isDateValid(date) && isTimeValid(time)){
            logins[user][date]++;
        }

    }

    vector<vector<string>> res;

    for(auto [user, dateMap]: logins){
        for(auto [date, count]: dateMap){
            res.push_back({user, date, to_string(count)});
        }
    }

    return res;
}