am1x icon

p1154

am1x | PRO | 01/04/22 03:35:24 PM UTC | 0 ⭐ | 1575 👁️ | Never ⏰ | []
C++ |

870 B

|

None

|

0 👍

/

0 👎

#include <iostream>
#include <string>
#include <assert.h>
#include <inttypes.h>
#include <ctype.h>
 
 
static bool is_ip(std::string &s)
{
    size_t sl = s.size();
    assert (sl <= 20);
    size_t cnt = 0;
    for (size_t i = 0; i < sl; i++) {
        char c = s[i];
        if (c == '.') {
            cnt++;
            continue;
        }
        assert (isdigit(c));
        assert (uint32_t(c - '0') < 10);
    }
    assert (cnt == 3);
    s += '.';
    std::string t;
    for (size_t i = 0; i <= sl; i++) {
        char c = s[i];
        if (c != '.') {
            t += c;
            continue;
        }
        size_t tl = t.size();
        if (tl == 0)
            return false;
        unsigned int x = 0;
        for (size_t i = 0; i < tl; i++) {
            unsigned int v = t[i] - '0';
            x = x * 10 + v;
            if (x > 255)
                return false;
        }
        t.clear();
    }
    return true;
}
 
 
int main()
{
    std::string s;
    std::cin >> s;
    assert (std::cin);
 
    bool ok = is_ip(s);
    std::cout << (ok ? "Good" : "Bad") << std::endl;
    return 0;
}
 

Comments