|
|
1.1 ! root 1: #include <vector> ! 2: #include <stdio.h> ! 3: ! 4: template <class T> ! 5: std::vector<T> ! 6: splitx(const char *buf) ! 7: { ! 8: std::vector<T> rv; ! 9: T v = 0; ! 10: bool a = false; ! 11: ! 12: for (; *buf; buf++) { ! 13: char c = *buf; ! 14: if ('0' <= c && c <= '9') { ! 15: v = v * 16 + (c - '0'); ! 16: a = true; ! 17: } else if ('A' <= c && c <= 'F') { ! 18: v = v * 16 + (c - 'A' + 10); ! 19: a = true; ! 20: } else if ('a' <= c && c <= 'f') { ! 21: v = v * 16 + (c - 'a' + 10); ! 22: a = true; ! 23: } else { ! 24: if (a) { ! 25: rv.push_back(v); ! 26: v = 0; ! 27: a = false; ! 28: } ! 29: } ! 30: } ! 31: if (a) { ! 32: rv.push_back(v); ! 33: } ! 34: return rv; ! 35: } ! 36: ! 37: int ! 38: main(int ac, char *av[]) ! 39: { ! 40: int d[2]; ! 41: int line = 0; ! 42: char buf[1024]; ! 43: ! 44: for (;;line = (line + 1) % 5) { ! 45: auto p = fgets(buf, sizeof(buf), stdin); ! 46: if (p == NULL) { ! 47: return 0; ! 48: } ! 49: switch (line) { ! 50: case 0: ! 51: case 1: ! 52: d[line] = splitx<int>(buf)[1]; ! 53: break; ! 54: case 2 ... 3: ! 55: break; ! 56: case 4: ! 57: auto v0 = splitx<int>(buf); ! 58: auto v = decltype(v0) (v0.begin() + 1, v0.end()); ! 59: int y = d[1] & 0xff; ! 60: int m = (d[1] >> 8) & 0xff; ! 61: int md = (d[1] >> 16) & 0xff; ! 62: int wd = (d[1] >> 24) & 0xff; ! 63: int h = d[0] & 0xff; ! 64: int n = (d[0] >> 8) & 0xff; ! 65: int s = (d[0] >> 16) & 0xff; ! 66: printf("%02x/%02x/%02x(%02x) %02x:%02x:%02x" ! 67: " | %02x/%02x/%02x(%02x) %02x:%02x:%02x\n", ! 68: y, m, md, wd, h, n, s, ! 69: v[7], v[6], v[5], v[4], v[3], v[2], v[1]); ! 70: break; ! 71: } ! 72: } ! 73: return 0; ! 74: } ! 75:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.