#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) != months + MONTH_WITH_31));
}
int main(int argc, char *argv[])
{
std::cout << std::boolalpha << CheckDate(31, 1, 2015) << std::endl
<< CheckDate(31, 2, 2015) << std::endl
<< CheckDate(31, 3, 2015) << std::endl
<< CheckDate(31, 4, 2015) << std::endl
<< CheckDate(31, 5, 2015) << std::endl
<< CheckDate(31, 6, 2015) << std::endl
<< CheckDate(31, 7, 2015) << std::endl
<< CheckDate(31, 8, 2015) << std::endl
<< CheckDate(31, 9, 2015) << std::endl
<< CheckDate(31, 10, 2015) << std::endl
<< CheckDate(31, 11, 2015) << std::endl
<< CheckDate(31, 12, 2015) << std::endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8YWxnb3JpdGhtPgoKYm9vbCBJc1JhbmdlKHN0ZDo6c2l6ZV90IHZhbHVlLCBzdGQ6OnNpemVfdCBtaW4sIHN0ZDo6c2l6ZV90IG1heCkKewogICAgcmV0dXJuIHZhbHVlID49IG1pbiAmJiB2YWx1ZSA8PSBtYXg7Cn0KCmJvb2wgaXNMZWFwWWVhcihzdGQ6OnNpemVfdCB5ZWFyKQp7CglyZXR1cm4geWVhciAlIDQgPT0gMCAmJiB5ZWFyICUgMTAwIHx8IHllYXIgJSA0MDAgPT0gMDsKfQoKYm9vbCBDaGVja0RhdGUoc3RkOjpzaXplX3QgZGF5LCBzdGQ6OnNpemVfdCBtb250aCwgc3RkOjpzaXplX3QgeWVhcikKewoJY29uc3QgaW50IG1vbnRoc1tdID0gezEsMyw1LDcsOCwxMCwxMiw0LDYsOSwxMX07Cgljb25zdCBpbnQgTU9OVEhfV0lUSF8zMSA9IDc7CgkKCWlmKG1vbnRoIDwgMSB8fCBtb250aCA+IDEyKQogICAgCXJldHVybiBmYWxzZTsKCWlmKG1vbnRoID09IDIpCgkgICAgcmV0dXJuIElzUmFuZ2UoZGF5LCAxLCAyOCArIGlzTGVhcFllYXIoeWVhcikpOwoJcmV0dXJuIElzUmFuZ2UoZGF5LCAxLCAzMCArIChzdGQ6OmZpbmQobW9udGhzLCBtb250aHMgKyBNT05USF9XSVRIXzMxLCBtb250aCkgIT0gbW9udGhzICsgTU9OVEhfV0lUSF8zMSkpOwp9CgppbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQp7CglzdGQ6OmNvdXQgPDwgc3RkOjpib29sYWxwaGEgPDwgQ2hlY2tEYXRlKDMxLCAxLCAyMDE1KSA8PCBzdGQ6OmVuZGwKCQkJCQkJCQk8PCBDaGVja0RhdGUoMzEsIDIsIDIwMTUpIDw8IHN0ZDo6ZW5kbAoJCQkJCQkJCTw8IENoZWNrRGF0ZSgzMSwgMywgMjAxNSkgPDwgc3RkOjplbmRsCgkJCQkJCQkJPDwgQ2hlY2tEYXRlKDMxLCA0LCAyMDE1KSA8PCBzdGQ6OmVuZGwKCQkJCQkJCQk8PCBDaGVja0RhdGUoMzEsIDUsIDIwMTUpIDw8IHN0ZDo6ZW5kbAoJCQkJCQkJCTw8IENoZWNrRGF0ZSgzMSwgNiwgMjAxNSkgPDwgc3RkOjplbmRsCgkJCQkJCQkJPDwgQ2hlY2tEYXRlKDMxLCA3LCAyMDE1KSA8PCBzdGQ6OmVuZGwKCQkJCQkJCQk8PCBDaGVja0RhdGUoMzEsIDgsIDIwMTUpIDw8IHN0ZDo6ZW5kbAoJCQkJCQkJCTw8IENoZWNrRGF0ZSgzMSwgOSwgMjAxNSkgPDwgc3RkOjplbmRsCgkJCQkJCQkJPDwgQ2hlY2tEYXRlKDMxLCAxMCwgMjAxNSkgPDwgc3RkOjplbmRsCgkJCQkJCQkJPDwgQ2hlY2tEYXRlKDMxLCAxMSwgMjAxNSkgPDwgc3RkOjplbmRsCgkJCQkJCQkJPDwgQ2hlY2tEYXRlKDMxLCAxMiwgMjAxNSkgPDwgc3RkOjplbmRsOwp9