# ACSL Senior 5 Division

# Lexington High School

# 2012-2013 Contest #4

# Jonathon Tidor

 

def sets(cards):

    nums=setsf(cards)

    aset=[]

    for i in range(13):

        aset.append(0)

        if nums[i]==2 or nums[i]==3:

            aset[i]=aset[i]+1

    return aset

 

def setsf(cards):

    nums=[]

    for i in range(13):

        nums.append(0)

        for j in range(len(cards)):

            if cards[j][1]==i:

                nums[i]=nums[i]+1

    return nums

 

def sort(cards):

    suits=[]

    for i in range(4):

        suits.append([])

        for j in range(13):

            suits[i].append(0)

            for k in range(len(cards)):

                if cards[k][0]==i and cards[k][1]==j:

                    suits[i][j]=suits[i][j]+1

    return suits

 

def runs(cards):

    suits=sort(cards)

    arun=[]

    for i in range(4):

        arun.append([])

        for j in range(13):

            arun[i].append(0)

            t1=0

            rep=1

            index=j

            while rep==1:

                index=index-1

                if index<0:

                    rep=0

                else:

                    if suits[i][index]==1:

                        t1=t1+1

                    else:

                        rep=0

            t2=0

            rep=1

            index=j

            while rep==1:

                index=index+1

                if index>=13:

                    rep=0

                else:

                    if suits[i][index]==1:

                        t2=t2+1

                    else:

                        rep=0

            if (t1<4 and t2<4 and t1+t2>=2) or (t1>=4 and t2<4 and t1+t2>=6) or (t1<4 and t2>=4 and t1+t2>=6):

                arun[i][j]=arun[i][j]+1

    return arun

 

def runsf(cards,x):

    suits=sort(cards)

    arun=[]

    for i in range(4):

        arun.append([])

        for j in range(13):

            arun[i].append(0)

            t=0

            if suits[i][j]==1:

                t=1

                rep=1

                index=j

                while rep==1:

                    index=index+1

                    if index>=13:

                        rep=0

                    else:

                        if suits[i][index]==1:

                            t=t+1

                        else:

                            rep=0

                if t==x:

                    for k in range(x):

                        suits[i][j+k]=0

            arun[i][j]=t

    return arun

 

def insert(cards,car):

    if car!=[0,0]:

        cards.append(car)

    cardsf=[[],[],[[]]]

    for i in range(13):

        if setsf(cards)[i]>=4:

            cardsf[0].append([])

            for j in range(4):

                cards.remove([3-j,i])

                cardsf[0][-1].append([3-j,i])

    for i in range(4):

        for j in range(13):

            if runsf(cards,4)[i][j]>=4:

                cardsf[0].append([])

                for k in range(4):

                    cards.remove([i,j+k])

                    cardsf[0][-1].append([i,j+k])

    for i in range(13):

        if setsf(cards)[i]==3:

            cardsf[1].append([])

            for j in range(4):

                if [3-j,i] in cards:

                    cards.remove([3-j,i])

                    cardsf[1][-1].append([3-j,i])

    for i in range(4):

        for j in range(13):

            if runsf(cards,3)[i][j]==3:

                cardsf[0].append([])

                for k in range(3):

                    cards.remove([i,j+k])

                    cardsf[0][-1].append([i,j+k])

    if car!=[0,0]:

        rep=1

        if cards==[]:

            for i in cardsf[0]:

                cards.append(i[0])

            for i in range(13):

                for j in range(4):

                    if [j,i] in cards:

                        if rep==1:

                            for k in cardsf[0]:

                                if k[0]==[j,i]:

                                    k.remove([j,i])

                            rep=0

            cards=[]

        else:

            for i in range(13):

                for j in range(4):

                    if [j,i] in cards:

                        if rep==1:

                            cards.remove([j,i])

                            rep=0

    for i in range(13):

        for j in range(4):

            if [3-j,12-i] in cards:

                cardsf[2][0].append([3-j,12-i])

    return cardsf

                   

def ret(cardsy):

    n=0

    string=""

    nums=["A","2","3","4","5","6","7","8","9","T","J","Q","K"]

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

    for i in cardsy:

        for j in i:

            for k in j:

                string=string+nums[k[1]]

                string=string+suits[k[0]]

                n=n+1

                if n<7:

                    string=string+", "

                else:

                    print(string)

 

cards=[]

nums=["A","2","3","4","5","6","7","8","9","T","J","Q","K"]

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

for i in range(7):

    cards.append([])

    c=str(input("Enter card in hand: "))

    for j in range(4):

        if c[1]==suits[j]:

            cards[i].append(j)

    for j in range(13):

        if c[0]==nums[j]:

            cards[i].append(j)

for i in range(5):

    cardsx=[]

    for i in range(7):

        cardsx.append([])

        cardsx[i].append(cards[i][0])

        cardsx[i].append(cards[i][1])

    rep=1

    for j in range(5):

        c=str(input("Enter card in deck: "))

        car=[]

        for k in range(4):

            if c[1]==suits[k]:

                car.append(k)

        for k in range(13):

            if c[0]==nums[k]:

                car.append(k)

        if rep==1:

            if sets(cardsx)[car[1]]==1 or runs(cardsx)[car[0]][car[1]]==1:

                cardsy=insert(cardsx,car)

                if len(cardsy[0])+len(cardsy[1])>=2:

                    rep=0

                cardsx=cardsy[2][0]

                for k in cardsy[0]:

                    cardsx=cardsx+k

                for k in cardsy[1]:

                    cardsx=cardsx+k

    ret(insert(cardsx,[0,0]))