#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?")