In this GinortS problem, You are given a string S that contains alphanumeric characters only. Your task is to sort the string S in the following manner that All sorted lowercase letters are ahead of uppercase letters. All sorted uppercase letters are ahead of digits. All sorted odd digits are ahead of sorted even digits.


HackerRank GinortS solution in python


Problem solution in Python 2 programming.

def f(ch):
    res = ord(ch)
    if 65 <= res <= 90:
        res += 100
    elif res <= 57:
        res += 200
        if res % 2 == 0:
            res += 10
    return res

S = raw_input().strip()
print reduce(lambda x,y: x + y, sorted(S, key=f), '')


Problem solution in Python 3 programming.

def f(c):
    code = 0
    if c.isupper():
        code = 10 ** 3
    elif c.isdigit():
        code = 10 ** 6
        if ord(c) % 2 == 0:
            code = 10 ** 9
    return code + ord(c)

print(*sorted(input(), key=lambda c: f(c)), sep='')


Problem solution in pypy programming.

# Enter your code here. Read input from STDIN. Print output to STDOUT
from string import ascii_lowercase, ascii_uppercase, ascii_letters 

sortkey = ascii_letters + "1357902468"
print reduce(lambda x,y: x+y, sorted(raw_input(),key=sortkey.index))


Problem solution in pypy3 programming.

# Enter your code here. Read input from STDIN. Print output to STDOUT
s = sorted(input())
lower = list(filter(lambda x: x.islower(),s))
upper = list(filter(lambda x: x.isupper(),s))
odd = list(filter(lambda x: x.isdigit() and int(x)%2 ==1, s))
even = list (filter(lambda x: x.isdigit() and int(x)%2 ==0,s))
print(*(lower + upper+odd+even), sep = "")