#Shrey Gupta

#Thomas Jefferson High School for Science and Technology

#Junior Division

#Contest #4 2012 - 2013

#ACSL Rummy

 

#The following program should be tested using Python 2.7.3. Five inputs should be given.

 

from operator import itemgetter, attrgetter

 

def main(inout):

    functions = [runoffour, setoffour, runofthree, setofthree, extra]

    unsorted = (raw_input(inout + " ")).split(', ')

    final, finalstr = [], ""

    for x in range(0, 5):

        number, suite = [], []

        for i in range(0, len(unsorted)):

            card = unsorted[i]

            num = card[0]

            if num == "T": num = 10

            elif num == "J": num = 11

            elif num == "Q": num = 12

            elif num == "K": num = 13

            elif num == "A": num = 1

            number.append(int(num))

            suite.append(card[1])

        func = functions[x](number, suite)

        for i in range(0, len(func)):

            char = func[i]

            if (char[0]+char[1]) == "10": char = "T" + char[2]

            elif (char[0]+char[1]) == "11": char = "J" + char[2]

            elif (char[0]+char[1]) == "12": char = "Q" + char[2]

            elif (char[0]+char[1]) == "13": char = "K" + char[2]

            elif (char[0]) == "1": char = "A" + char[1]

            unsorted.remove(char)

            final.append(char)

    for i in range(0, len(final)):

        finalstr += final[i]

        if i < 6:

            finalstr += ", "

    print inout, finalstr

 

def runoffour(number, suite):

    suitecount = {'snum': suite.count("S"), 'hnum': suite.count("H"), 'cnum': suite.count("C"), 'dnum': suite.count("D")}

    suitemax = list(suitecount.keys())[list(suitecount.values()).index(max(list(suitecount.values())))]

    tosearch = []

    if suitecount[suitemax] >=4:

        for i in range(0, len(suite)):

            if suitemax[0] == suite[i].lower():

                tosearch.append(i)

    tosort = []

    for i in range(0, len(tosearch)):

        tosort.append(number[tosearch[i]])

    tosort.sort()

    temp = []

    for i in range(1, len(tosort)):

        if len(temp) < 4:

            if tosort[i] - tosort[i-1] == 1:

                if len(temp) == 0:

                    temp.append(tosort[i-1])

                temp.append(tosort[i])

            else:

                temp = []

    for i in range(0, len(temp)):

        temp[i] = str(temp[i]) + suitemax[0].upper()

    if len(temp) != 4:

        temp = []

    return temp

       

def setoffour(number, suite):

    temp = []

    for i in range(1, 14):

        if number.count(i) == 4:

            temp = [str(i) + "S", str(i) + "H", str(i) + "C", str(i) + "D"]

    return temp

 

def runofthree(number, suite):

    suitecount = [suite.count("S"), suite.count("H"), suite.count("C"), suite.count("D")]

    letters = ["S", "H", "C", "D"]

    temp = []

    for x in range(0, 4):

        if suitecount[x] >=3:

            letter = letters[x]

            tosearch = []

            for i in range(0, len(suite)):

                if letter == suite[i]:

                    tosearch.append(i)

            tosort = []

            for i in range(0, len(tosearch)):

                tosort.append(number[tosearch[i]])

            tosort.sort()

            current = []

            for i in range(0, len(tosort)):

                if len(current) < 3:

                    if tosort[i] - tosort[i-1] == 1:

                        if len(current) == 0:

                            current.append(tosort[i-1])

                        current.append(tosort[i])

                    else:

                        current = []

            for i in range(0, len(current)):

                temp.append(str(current[i]) + letter)

    return temp

 

def setofthree(number, suite):

    for i in range(0, len(suite)):

        if suite[i] == "S": suite[i] = 1

        elif suite[i] == "H": suite[i] = 2

        elif suite[i] == "C": suite[i] = 3

        elif suite[i] == "D": suite[i] = 4

    temp = []

    for i in range(1, 14):

        if number.count(i) == 3:

            position = []

            for j in range(0, len(number)):

                if number[j] == i:

                    position.append(suite[j])

            position.sort()

            for k in range(0, len(position)):

                if position[k] == 1: position[k] = "S"

                elif position[k] == 2: position[k] = "H"

                elif position[k] == 3: position[k] = "C"

                elif position[k] == 4: position[k] = "D"

            for m in range(0, 3):

                temp.append(str(i) + position[m])

    return temp

 

def extra(number, suite):

    for i in range(0, len(suite)):

        if suite[i] == "S": suite[i] = 4

        elif suite[i] == "H": suite[i] = 3

        elif suite[i] == "C": suite[i] = 2

        elif suite[i] == "D": suite[i] = 1

    temp, current = [], []

    for i in range(0, len(number)):

        current.append((number[i], suite[i]))

    current = sorted(current, key=itemgetter(0,1), reverse=True)

    for i in range(0, len(current)):

        c = current[i]

        if c[1] == 4: letter = "S"

        elif c[1] == 3: letter = "H"

        elif c[1] == 2: letter = "C"

        elif c[1] == 1: letter = "D"

        temp.append(str(c[0]) + letter)

    return temp

       

for i in range(0, 5):

    num = str(i+1) + "."

    main(num)

    print ""

 

close1 = raw_input("Click enter twice to close.")

close2 = raw_input("Are you sure?")