• + 0 comments

    Of course, the solution to this simple problem is a one-liner (not counting imports)…

    import string, sys
    print(*list(map(lambda u: 'Valid' if (len((u := set(u.strip())) & alnum) == 10 and len(u & upper) >= 2 and len(u & digit) >= 3) else 'Invalid', [(upper := set(string.ascii_uppercase)), (digit := set(string.digits)), (alnum := set(string.ascii_letters) | digit), (N := int(input())), sys.stdin.readlines()[:N]][-1])), sep='\n')
    

    Just kidding. Yes, it works, but I derived the one-liner from my initial solution. My solution uses simple sets, so it's easier to understand than regular expressions and much, much faster…

    import sys
    import string
    
    upper = set(string.ascii_uppercase)
    digit = set(string.digits)
    alnum = set(string.ascii_letters) | digit
    
    N = int(input())
    uids = map(lambda u: set(u.strip()), sys.stdin.readlines()[:N])
    for u in uids:
        if (len(u & alnum) == 10 and
            len(u & upper) >= 2 and
            len(u & digit) >= 3):
            print('Valid')
        else:
            print('Invalid')
    

    I think the omission of regex from my solution is OK. This section of challenges is titled "Regex and Parsing". It parses the input, so it's a legitimate solution.