#include <iostream>
#include <algorithm>
bool IsRange(std::size_t value, std::size_t min, std::size_t max)
{
return value >= min && value <= max;
}
bool isLeapYear(std::size_t year)
{
return year % 4 == 0 && year % 100 || year % 400 == 0;
}
bool CheckDate(std::size_t day, std::size_t month, std::size_t year)
{
const int months[] = {1,3,5,7,8,10,12,4,6,9,11};
const int MONTH_WITH_31 = 7;
if(month < 1 || month > 12)
return false;
if(month == 2)
return IsRange(day, 1, 28 + isLeapYear(year));
return IsRange(day, 1, 30 + (std::find(months, months + MONTH_WITH_31, month) != std::end(months)));
}
int main(int argc, char *argv[])
{
std::cout << std::boolalpha << CheckDate(28, 2, 2015) << std::endl
<< CheckDate(29, 2, 2015) << std::endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8YWxnb3JpdGhtPgoKYm9vbCBJc1JhbmdlKHN0ZDo6c2l6ZV90IHZhbHVlLCBzdGQ6OnNpemVfdCBtaW4sIHN0ZDo6c2l6ZV90IG1heCkKewogICAgcmV0dXJuIHZhbHVlID49IG1pbiAmJiB2YWx1ZSA8PSBtYXg7Cn0KCmJvb2wgaXNMZWFwWWVhcihzdGQ6OnNpemVfdCB5ZWFyKQp7CglyZXR1cm4geWVhciAlIDQgPT0gMCAmJiB5ZWFyICUgMTAwIHx8IHllYXIgJSA0MDAgPT0gMDsKfQoKYm9vbCBDaGVja0RhdGUoc3RkOjpzaXplX3QgZGF5LCBzdGQ6OnNpemVfdCBtb250aCwgc3RkOjpzaXplX3QgeWVhcikKewoJY29uc3QgaW50IG1vbnRoc1tdID0gezEsMyw1LDcsOCwxMCwxMiw0LDYsOSwxMX07Cgljb25zdCBpbnQgTU9OVEhfV0lUSF8zMSA9IDc7CgkKCWlmKG1vbnRoIDwgMSB8fCBtb250aCA+IDEyKQogICAgCXJldHVybiBmYWxzZTsKCWlmKG1vbnRoID09IDIpCgkgICAgcmV0dXJuIElzUmFuZ2UoZGF5LCAxLCAyOCArIGlzTGVhcFllYXIoeWVhcikpOwoJcmV0dXJuIElzUmFuZ2UoZGF5LCAxLCAzMCArIChzdGQ6OmZpbmQobW9udGhzLCBtb250aHMgKyBNT05USF9XSVRIXzMxLCBtb250aCkgIT0gc3RkOjplbmQobW9udGhzKSkpOwp9CgppbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQp7CglzdGQ6OmNvdXQgPDwgc3RkOjpib29sYWxwaGEgPDwgQ2hlY2tEYXRlKDI4LCAyLCAyMDE1KSA8PCBzdGQ6OmVuZGwKCQkJCQkJCQk8PCBDaGVja0RhdGUoMjksIDIsIDIwMTUpIDw8IHN0ZDo6ZW5kbDsKfQ==