Implement p0 tutorial.

main
Felix Martin 2021-10-11 21:01:31 -04:00
parent a95016431f
commit cd948fe640
15 changed files with 165 additions and 159 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
__pycache__

View File

@ -19,4 +19,4 @@ Run python autograder.py
def add(a, b): def add(a, b):
"Return the sum of a and b" "Return the sum of a and b"
"*** YOUR CODE HERE ***" "*** YOUR CODE HERE ***"
return 0 return a + b

View File

@ -85,8 +85,8 @@ def readCommand(argv):
# confirm we should author solution files # confirm we should author solution files
def confirmGenerate(): def confirmGenerate():
print 'WARNING: this action will overwrite any solution files.' print('WARNING: this action will overwrite any solution files.')
print 'Are you sure you want to proceed? (yes/no)' print('Are you sure you want to proceed? (yes/no)')
while True: while True:
ans = sys.stdin.readline().strip() ans = sys.stdin.readline().strip()
if ans == 'yes': if ans == 'yes':
@ -94,7 +94,7 @@ def confirmGenerate():
elif ans == 'no': elif ans == 'no':
sys.exit(0) sys.exit(0)
else: else:
print 'please answer either "yes" or "no"' print('please answer either "yes" or "no"')
# TODO: Fix this so that it tracebacks work correctly # TODO: Fix this so that it tracebacks work correctly
@ -126,7 +126,7 @@ def loadModuleString(moduleSource):
#f = StringIO(moduleCodeDict[k]) #f = StringIO(moduleCodeDict[k])
#tmp = imp.load_module(k, f, k, (".py", "r", imp.PY_SOURCE)) #tmp = imp.load_module(k, f, k, (".py", "r", imp.PY_SOURCE))
tmp = imp.new_module(k) tmp = imp.new_module(k)
exec moduleCodeDict[k] in tmp.__dict__ exec(moduleCodeDict[k], tmp.__dict__)
setModuleName(tmp, k) setModuleName(tmp, k)
return tmp return tmp
@ -187,12 +187,12 @@ def splitStrings(d):
def printTest(testDict, solutionDict): def printTest(testDict, solutionDict):
pp = pprint.PrettyPrinter(indent=4) pp = pprint.PrettyPrinter(indent=4)
print "Test case:" print("Test case:")
for line in testDict["__raw_lines__"]: for line in testDict["__raw_lines__"]:
print " |", line print(" |", line)
print "Solution:" print("Solution:")
for line in solutionDict["__raw_lines__"]: for line in solutionDict["__raw_lines__"]:
print " |", line print(" |", line)
def runTest(testName, moduleDict, printTestCase=False, display=None): def runTest(testName, moduleDict, printTestCase=False, display=None):
@ -236,7 +236,7 @@ def getTestSubdirs(testParser, testRoot, questionToGrade):
if questionToGrade != None: if questionToGrade != None:
questions = getDepends(testParser, testRoot, questionToGrade) questions = getDepends(testParser, testRoot, questionToGrade)
if len(questions) > 1: if len(questions) > 1:
print 'Note: due to dependencies, the following tests will be run: %s' % ' '.join(questions) print('Note: due to dependencies, the following tests will be run: %s' % ' '.join(questions))
return questions return questions
if 'order' in problemDict: if 'order' in problemDict:
return problemDict['order'].split() return problemDict['order'].split()
@ -269,8 +269,8 @@ def evaluate(generateSolutions, testRoot, moduleDict, exceptionMap=ERROR_HINT_MA
questionDicts[q] = questionDict questionDicts[q] = questionDict
# load test cases into question # load test cases into question
tests = filter(lambda t: re.match('[^#~.].*\.test\Z', t), os.listdir(subdir_path)) tests = [t for t in os.listdir(subdir_path) if re.match('[^#~.].*\.test\Z', t)]
tests = map(lambda t: re.match('(.*)\.test\Z', t).group(1), tests) tests = [re.match('(.*)\.test\Z', t).group(1) for t in tests]
for t in sorted(tests): for t in sorted(tests):
test_file = os.path.join(subdir_path, '%s.test' % t) test_file = os.path.join(subdir_path, '%s.test' % t)
solution_file = os.path.join(subdir_path, '%s.solution' % t) solution_file = os.path.join(subdir_path, '%s.solution' % t)

View File

@ -32,12 +32,15 @@ def buyLotsOfFruit(orderList):
Returns cost of order Returns cost of order
""" """
totalCost = 0.0 try:
"*** YOUR CODE HERE ***" return sum([fruitPrices[fruit] * quantity
return totalCost for fruit, quantity in orderList])
except KeyError:
print("Unexpected fruit!")
return None
# Main Method # Main Method
if __name__ == '__main__': if __name__ == '__main__':
"This code runs when you invoke the script from the command line" "This code runs when you invoke the script from the command line"
orderList = [ ('apples', 2.0), ('pears', 3.0), ('limes', 4.0) ] orderList = [ ('apples', 2.0), ('pears', 3.0), ('limes', 4.0) ]
print 'Cost of', orderList, 'is', buyLotsOfFruit(orderList) print('Cost of', orderList, 'is', buyLotsOfFruit(orderList))

View File

@ -18,6 +18,7 @@ import cgi
import time import time
import sys import sys
import json import json
import html
import traceback import traceback
import pdb import pdb
from collections import defaultdict from collections import defaultdict
@ -46,7 +47,7 @@ class Grades:
self.prereqs = defaultdict(set) self.prereqs = defaultdict(set)
#print 'Autograder transcript for %s' % self.project #print 'Autograder transcript for %s' % self.project
print 'Starting on %d-%d at %d:%02d:%02d' % self.start print('Starting on %d-%d at %d:%02d:%02d' % self.start)
def addPrereq(self, question, prereq): def addPrereq(self, question, prereq):
self.prereqs[question].add(prereq) self.prereqs[question].add(prereq)
@ -59,25 +60,24 @@ class Grades:
completedQuestions = set([]) completedQuestions = set([])
for q in self.questions: for q in self.questions:
print '\nQuestion %s' % q print('\nQuestion %s' % q)
print '=' * (9 + len(q)) print('=' * (9 + len(q)))
print print()
self.currentQuestion = q self.currentQuestion = q
incompleted = self.prereqs[q].difference(completedQuestions) incompleted = self.prereqs[q].difference(completedQuestions)
if len(incompleted) > 0: if len(incompleted) > 0:
prereq = incompleted.pop() prereq = incompleted.pop()
print \ print("""*** NOTE: Make sure to complete Question %s before working on Question %s,
"""*** NOTE: Make sure to complete Question %s before working on Question %s,
*** because Question %s builds upon your answer for Question %s. *** because Question %s builds upon your answer for Question %s.
""" % (prereq, q, q, prereq) """ % (prereq, q, q, prereq))
continue continue
if self.mute: util.mutePrint() if self.mute: util.mutePrint()
try: try:
util.TimeoutFunction(getattr(gradingModule, q),1800)(self) # Call the question's function util.TimeoutFunction(getattr(gradingModule, q),1800)(self) # Call the question's function
#TimeoutFunction(getattr(gradingModule, q),1200)(self) # Call the question's function #TimeoutFunction(getattr(gradingModule, q),1200)(self) # Call the question's function
except Exception, inst: except Exception as inst:
self.addExceptionMessage(q, inst, traceback) self.addExceptionMessage(q, inst, traceback)
self.addErrorHints(exceptionMap, inst, q[1]) self.addErrorHints(exceptionMap, inst, q[1])
except: except:
@ -88,18 +88,18 @@ class Grades:
if self.points[q] >= self.maxes[q]: if self.points[q] >= self.maxes[q]:
completedQuestions.add(q) completedQuestions.add(q)
print '\n### Question %s: %d/%d ###\n' % (q, self.points[q], self.maxes[q]) print('\n### Question %s: %d/%d ###\n' % (q, self.points[q], self.maxes[q]))
print '\nFinished at %d:%02d:%02d' % time.localtime()[3:6] print('\nFinished at %d:%02d:%02d' % time.localtime()[3:6])
print "\nProvisional grades\n==================" print("\nProvisional grades\n==================")
for q in self.questions: for q in self.questions:
print 'Question %s: %d/%d' % (q, self.points[q], self.maxes[q]) print('Question %s: %d/%d' % (q, self.points[q], self.maxes[q]))
print '------------------' print('------------------')
print 'Total: %d/%d' % (self.points.totalCount(), sum(self.maxes.values())) print('Total: %d/%d' % (self.points.totalCount(), sum(self.maxes.values())))
if bonusPic and self.points.totalCount() == 25: if bonusPic and self.points.totalCount() == 25:
print """ print("""
ALL HAIL GRANDPAC. ALL HAIL GRANDPAC.
LONG LIVE THE GHOSTBUSTING KING. LONG LIVE THE GHOSTBUSTING KING.
@ -130,11 +130,11 @@ class Grades:
@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@
""" """)
print """ print("""
Your grades are NOT yet registered. To register your grades, make sure Your grades are NOT yet registered. To register your grades, make sure
to follow your instructor's guidelines to receive credit on your project. to follow your instructor's guidelines to receive credit on your project.
""" """)
if self.edxOutput: if self.edxOutput:
self.produceOutput() self.produceOutput()
@ -289,13 +289,13 @@ to follow your instructor's guidelines to receive credit on your project.
if not raw: if not raw:
# We assume raw messages, formatted for HTML, are printed separately # We assume raw messages, formatted for HTML, are printed separately
if self.mute: util.unmutePrint() if self.mute: util.unmutePrint()
print '*** ' + message print('*** ' + message)
if self.mute: util.mutePrint() if self.mute: util.mutePrint()
message = cgi.escape(message) message = html.escape(message)
self.messages[self.currentQuestion].append(message) self.messages[self.currentQuestion].append(message)
def addMessageToEmail(self, message): def addMessageToEmail(self, message):
print "WARNING**** addMessageToEmail is deprecated %s" % message print("WARNING**** addMessageToEmail is deprecated %s" % message)
for line in message.split('\n'): for line in message.split('\n'):
pass pass
#print '%%% ' + line + ' %%%' #print '%%% ' + line + ' %%%'

View File

@ -24,7 +24,7 @@ class FruitShop:
""" """
self.fruitPrices = fruitPrices self.fruitPrices = fruitPrices
self.name = name self.name = name
print 'Welcome to %s fruit shop' % (name) print('Welcome to %s fruit shop' % (name))
def getCostPerPound(self, fruit): def getCostPerPound(self, fruit):
""" """

View File

@ -102,7 +102,7 @@ if __name__ == '__main__':
('shop2', 'shop3') : 1 ('shop2', 'shop3') : 1
} }
fruitTown = town.Town(shops, distances) fruitTown = town.Town(shops, distances)
print "Orders:", orders print("Orders:", orders)
for price in (1, 3, 5, -1): for price in (1, 3, 5, -1):
print "At gas price", price, "the best route is:", \ print("At gas price", price, "the best route is:", \
shopAroundTown(orders, fruitTown, price) shopAroundTown(orders, fruitTown, price))

View File

@ -28,8 +28,10 @@ def shopSmart(orderList, fruitShops):
orderList: List of (fruit, numPound) tuples orderList: List of (fruit, numPound) tuples
fruitShops: List of FruitShops fruitShops: List of FruitShops
""" """
"*** YOUR CODE HERE ***"
return None prices = [(shop.getPriceOfOrder(orderList), shop)
for shop in fruitShops]
return min(prices)[1]
if __name__ == '__main__': if __name__ == '__main__':
"This code runs when you invoke the script from the command line" "This code runs when you invoke the script from the command line"
@ -39,6 +41,6 @@ if __name__ == '__main__':
dir2 = {'apples': 1.0, 'oranges': 5.0} dir2 = {'apples': 1.0, 'oranges': 5.0}
shop2 = shop.FruitShop('shop2',dir2) shop2 = shop.FruitShop('shop2',dir2)
shops = [shop1, shop2] shops = [shop1, shop2]
print "For orders ", orders, ", the best shop is", shopSmart(orders, shops).getName() print("For orders ", orders, ", the best shop is", shopSmart(orders, shops).getName())
orders = [('apples',3.0)] orders = [('apples',3.0)]
print "For orders: ", orders, ", the best shop is", shopSmart(orders, shops).getName() print("For orders: ", orders, ", the best shop is", shopSmart(orders, shops).getName())

View File

@ -15,7 +15,7 @@
#!/usr/bin/env python #!/usr/bin/env python
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from __future__ import print_function
from codecs import open from codecs import open
""" """

View File

@ -24,7 +24,7 @@ import sys
class Question(object): class Question(object):
def raiseNotDefined(self): def raiseNotDefined(self):
print 'Method not implemented: %s' % inspect.stack()[1][3] print('Method not implemented: %s' % inspect.stack()[1][3])
sys.exit(1) sys.exit(1)
def __init__(self, questionDict, display): def __init__(self, questionDict, display):
@ -145,7 +145,7 @@ class NumberPassedQuestion(Question):
class TestCase(object): class TestCase(object):
def raiseNotDefined(self): def raiseNotDefined(self):
print 'Method not implemented: %s' % inspect.stack()[1][3] print('Method not implemented: %s' % inspect.stack()[1][3])
sys.exit(1) sys.exit(1)
def getPath(self): def getPath(self):

View File

@ -68,7 +68,7 @@ class TestParser(object):
test['__emit__'].append(("multiline", m.group(1))) test['__emit__'].append(("multiline", m.group(1)))
i += 1 i += 1
continue continue
print 'error parsing test file: %s' % self.path print('error parsing test file: %s' % self.path)
sys.exit(1) sys.exit(1)
return test return test

View File

@ -37,7 +37,7 @@ class NullGraphics:
time.sleep(SLEEP_TIME) time.sleep(SLEEP_TIME)
def draw(self, state): def draw(self, state):
print state print(state)
def updateDistributions(self, dist): def updateDistributions(self, dist):
pass pass
@ -64,7 +64,7 @@ class PacmanGraphics:
self.turn += 1 self.turn += 1
if DISPLAY_MOVES: if DISPLAY_MOVES:
ghosts = [pacman.nearestPoint(state.getGhostPosition(i)) for i in range(1, numAgents)] ghosts = [pacman.nearestPoint(state.getGhostPosition(i)) for i in range(1, numAgents)]
print "%4d) P: %-8s" % (self.turn, str(pacman.nearestPoint(state.getPacmanPosition()))),'| Score: %-5d' % state.score,'| Ghosts:', ghosts print("%4d) P: %-8s" % (self.turn, str(pacman.nearestPoint(state.getPacmanPosition()))),'| Score: %-5d' % state.score,'| Ghosts:', ghosts)
if self.turn % DRAW_EVERY == 0: if self.turn % DRAW_EVERY == 0:
self.draw(state) self.draw(state)
self.pause() self.pause()
@ -75,7 +75,7 @@ class PacmanGraphics:
time.sleep(SLEEP_TIME) time.sleep(SLEEP_TIME)
def draw(self, state): def draw(self, state):
print state print(state)
def finish(self): def finish(self):
pass pass

View File

@ -78,7 +78,7 @@ class Town:
if not route: if not route:
return 0 return 0
totalDistance = self.getDistance('home', route[0]) totalDistance = self.getDistance('home', route[0])
for i in xrange(len(route) - 1): for i in range(len(route) - 1):
totalDistance += self.getDistance(route[i], route[i+1]) totalDistance += self.getDistance(route[i], route[i+1])
totalDistance += self.getDistance(route[-1], 'home') totalDistance += self.getDistance(route[-1], 'home')
return totalDistance return totalDistance

View File

@ -28,7 +28,7 @@ class EvalTest(testClasses.TestCase):
def evalCode(self, moduleDict): def evalCode(self, moduleDict):
bindings = dict(moduleDict) bindings = dict(moduleDict)
exec self.preamble in bindings exec(self.preamble, bindings)
return str(eval(self.test, bindings)) return str(eval(self.test, bindings))
def execute(self, grades, moduleDict, solutionDict): def execute(self, grades, moduleDict, solutionDict):

View File

@ -29,101 +29,101 @@
import sys import sys
import inspect import inspect
import heapq, random import heapq, random
import cStringIO import io
class FixedRandom: class FixedRandom:
def __init__(self): def __init__(self):
fixedState = (3, (2147483648L, 507801126L, 683453281L, 310439348L, 2597246090L, \ fixedState = (3, (2147483648, 507801126, 683453281, 310439348, 2597246090, \
2209084787L, 2267831527L, 979920060L, 3098657677L, 37650879L, 807947081L, 3974896263L, \ 2209084787, 2267831527, 979920060, 3098657677, 37650879, 807947081, 3974896263, \
881243242L, 3100634921L, 1334775171L, 3965168385L, 746264660L, 4074750168L, 500078808L, \ 881243242, 3100634921, 1334775171, 3965168385, 746264660, 4074750168, 500078808, \
776561771L, 702988163L, 1636311725L, 2559226045L, 157578202L, 2498342920L, 2794591496L, \ 776561771, 702988163, 1636311725, 2559226045, 157578202, 2498342920, 2794591496, \
4130598723L, 496985844L, 2944563015L, 3731321600L, 3514814613L, 3362575829L, 3038768745L, \ 4130598723, 496985844, 2944563015, 3731321600, 3514814613, 3362575829, 3038768745, \
2206497038L, 1108748846L, 1317460727L, 3134077628L, 988312410L, 1674063516L, 746456451L, \ 2206497038, 1108748846, 1317460727, 3134077628, 988312410, 1674063516, 746456451, \
3958482413L, 1857117812L, 708750586L, 1583423339L, 3466495450L, 1536929345L, 1137240525L, \ 3958482413, 1857117812, 708750586, 1583423339, 3466495450, 1536929345, 1137240525, \
3875025632L, 2466137587L, 1235845595L, 4214575620L, 3792516855L, 657994358L, 1241843248L, \ 3875025632, 2466137587, 1235845595, 4214575620, 3792516855, 657994358, 1241843248, \
1695651859L, 3678946666L, 1929922113L, 2351044952L, 2317810202L, 2039319015L, 460787996L, \ 1695651859, 3678946666, 1929922113, 2351044952, 2317810202, 2039319015, 460787996, \
3654096216L, 4068721415L, 1814163703L, 2904112444L, 1386111013L, 574629867L, 2654529343L, \ 3654096216, 4068721415, 1814163703, 2904112444, 1386111013, 574629867, 2654529343, \
3833135042L, 2725328455L, 552431551L, 4006991378L, 1331562057L, 3710134542L, 303171486L, \ 3833135042, 2725328455, 552431551, 4006991378, 1331562057, 3710134542, 303171486, \
1203231078L, 2670768975L, 54570816L, 2679609001L, 578983064L, 1271454725L, 3230871056L, \ 1203231078, 2670768975, 54570816, 2679609001, 578983064, 1271454725, 3230871056, \
2496832891L, 2944938195L, 1608828728L, 367886575L, 2544708204L, 103775539L, 1912402393L, \ 2496832891, 2944938195, 1608828728, 367886575, 2544708204, 103775539, 1912402393, \
1098482180L, 2738577070L, 3091646463L, 1505274463L, 2079416566L, 659100352L, 839995305L, \ 1098482180, 2738577070, 3091646463, 1505274463, 2079416566, 659100352, 839995305, \
1696257633L, 274389836L, 3973303017L, 671127655L, 1061109122L, 517486945L, 1379749962L, \ 1696257633, 274389836, 3973303017, 671127655, 1061109122, 517486945, 1379749962, \
3421383928L, 3116950429L, 2165882425L, 2346928266L, 2892678711L, 2936066049L, 1316407868L, \ 3421383928, 3116950429, 2165882425, 2346928266, 2892678711, 2936066049, 1316407868, \
2873411858L, 4279682888L, 2744351923L, 3290373816L, 1014377279L, 955200944L, 4220990860L, \ 2873411858, 4279682888, 2744351923, 3290373816, 1014377279, 955200944, 4220990860, \
2386098930L, 1772997650L, 3757346974L, 1621616438L, 2877097197L, 442116595L, 2010480266L, \ 2386098930, 1772997650, 3757346974, 1621616438, 2877097197, 442116595, 2010480266, \
2867861469L, 2955352695L, 605335967L, 2222936009L, 2067554933L, 4129906358L, 1519608541L, \ 2867861469, 2955352695, 605335967, 2222936009, 2067554933, 4129906358, 1519608541, \
1195006590L, 1942991038L, 2736562236L, 279162408L, 1415982909L, 4099901426L, 1732201505L, \ 1195006590, 1942991038, 2736562236, 279162408, 1415982909, 4099901426, 1732201505, \
2934657937L, 860563237L, 2479235483L, 3081651097L, 2244720867L, 3112631622L, 1636991639L, \ 2934657937, 860563237, 2479235483, 3081651097, 2244720867, 3112631622, 1636991639, \
3860393305L, 2312061927L, 48780114L, 1149090394L, 2643246550L, 1764050647L, 3836789087L, \ 3860393305, 2312061927, 48780114, 1149090394, 2643246550, 1764050647, 3836789087, \
3474859076L, 4237194338L, 1735191073L, 2150369208L, 92164394L, 756974036L, 2314453957L, \ 3474859076, 4237194338, 1735191073, 2150369208, 92164394, 756974036, 2314453957, \
323969533L, 4267621035L, 283649842L, 810004843L, 727855536L, 1757827251L, 3334960421L, \ 323969533, 4267621035, 283649842, 810004843, 727855536, 1757827251, 3334960421, \
3261035106L, 38417393L, 2660980472L, 1256633965L, 2184045390L, 811213141L, 2857482069L, \ 3261035106, 38417393, 2660980472, 1256633965, 2184045390, 811213141, 2857482069, \
2237770878L, 3891003138L, 2787806886L, 2435192790L, 2249324662L, 3507764896L, 995388363L, \ 2237770878, 3891003138, 2787806886, 2435192790, 2249324662, 3507764896, 995388363, \
856944153L, 619213904L, 3233967826L, 3703465555L, 3286531781L, 3863193356L, 2992340714L, \ 856944153, 619213904, 3233967826, 3703465555, 3286531781, 3863193356, 2992340714, \
413696855L, 3865185632L, 1704163171L, 3043634452L, 2225424707L, 2199018022L, 3506117517L, \ 413696855, 3865185632, 1704163171, 3043634452, 2225424707, 2199018022, 3506117517, \
3311559776L, 3374443561L, 1207829628L, 668793165L, 1822020716L, 2082656160L, 1160606415L, \ 3311559776, 3374443561, 1207829628, 668793165, 1822020716, 2082656160, 1160606415, \
3034757648L, 741703672L, 3094328738L, 459332691L, 2702383376L, 1610239915L, 4162939394L, \ 3034757648, 741703672, 3094328738, 459332691, 2702383376, 1610239915, 4162939394, \
557861574L, 3805706338L, 3832520705L, 1248934879L, 3250424034L, 892335058L, 74323433L, \ 557861574, 3805706338, 3832520705, 1248934879, 3250424034, 892335058, 74323433, \
3209751608L, 3213220797L, 3444035873L, 3743886725L, 1783837251L, 610968664L, 580745246L, \ 3209751608, 3213220797, 3444035873, 3743886725, 1783837251, 610968664, 580745246, \
4041979504L, 201684874L, 2673219253L, 1377283008L, 3497299167L, 2344209394L, 2304982920L, \ 4041979504, 201684874, 2673219253, 1377283008, 3497299167, 2344209394, 2304982920, \
3081403782L, 2599256854L, 3184475235L, 3373055826L, 695186388L, 2423332338L, 222864327L, \ 3081403782, 2599256854, 3184475235, 3373055826, 695186388, 2423332338, 222864327, \
1258227992L, 3627871647L, 3487724980L, 4027953808L, 3053320360L, 533627073L, 3026232514L, \ 1258227992, 3627871647, 3487724980, 4027953808, 3053320360, 533627073, 3026232514, \
2340271949L, 867277230L, 868513116L, 2158535651L, 2487822909L, 3428235761L, 3067196046L, \ 2340271949, 867277230, 868513116, 2158535651, 2487822909, 3428235761, 3067196046, \
3435119657L, 1908441839L, 788668797L, 3367703138L, 3317763187L, 908264443L, 2252100381L, \ 3435119657, 1908441839, 788668797, 3367703138, 3317763187, 908264443, 2252100381, \
764223334L, 4127108988L, 384641349L, 3377374722L, 1263833251L, 1958694944L, 3847832657L, \ 764223334, 4127108988, 384641349, 3377374722, 1263833251, 1958694944, 3847832657, \
1253909612L, 1096494446L, 555725445L, 2277045895L, 3340096504L, 1383318686L, 4234428127L, \ 1253909612, 1096494446, 555725445, 2277045895, 3340096504, 1383318686, 4234428127, \
1072582179L, 94169494L, 1064509968L, 2681151917L, 2681864920L, 734708852L, 1338914021L, \ 1072582179, 94169494, 1064509968, 2681151917, 2681864920, 734708852, 1338914021, \
1270409500L, 1789469116L, 4191988204L, 1716329784L, 2213764829L, 3712538840L, 919910444L, \ 1270409500, 1789469116, 4191988204, 1716329784, 2213764829, 3712538840, 919910444, \
1318414447L, 3383806712L, 3054941722L, 3378649942L, 1205735655L, 1268136494L, 2214009444L, \ 1318414447, 3383806712, 3054941722, 3378649942, 1205735655, 1268136494, 2214009444, \
2532395133L, 3232230447L, 230294038L, 342599089L, 772808141L, 4096882234L, 3146662953L, \ 2532395133, 3232230447, 230294038, 342599089, 772808141, 4096882234, 3146662953, \
2784264306L, 1860954704L, 2675279609L, 2984212876L, 2466966981L, 2627986059L, 2985545332L, \ 2784264306, 1860954704, 2675279609, 2984212876, 2466966981, 2627986059, 2985545332, \
2578042598L, 1458940786L, 2944243755L, 3959506256L, 1509151382L, 325761900L, 942251521L, \ 2578042598, 1458940786, 2944243755, 3959506256, 1509151382, 325761900, 942251521, \
4184289782L, 2756231555L, 3297811774L, 1169708099L, 3280524138L, 3805245319L, 3227360276L, \ 4184289782, 2756231555, 3297811774, 1169708099, 3280524138, 3805245319, 3227360276, \
3199632491L, 2235795585L, 2865407118L, 36763651L, 2441503575L, 3314890374L, 1755526087L, \ 3199632491, 2235795585, 2865407118, 36763651, 2441503575, 3314890374, 1755526087, \
17915536L, 1196948233L, 949343045L, 3815841867L, 489007833L, 2654997597L, 2834744136L, \ 17915536, 1196948233, 949343045, 3815841867, 489007833, 2654997597, 2834744136, \
417688687L, 2843220846L, 85621843L, 747339336L, 2043645709L, 3520444394L, 1825470818L, \ 417688687, 2843220846, 85621843, 747339336, 2043645709, 3520444394, 1825470818, \
647778910L, 275904777L, 1249389189L, 3640887431L, 4200779599L, 323384601L, 3446088641L, \ 647778910, 275904777, 1249389189, 3640887431, 4200779599, 323384601, 3446088641, \
4049835786L, 1718989062L, 3563787136L, 44099190L, 3281263107L, 22910812L, 1826109246L, \ 4049835786, 1718989062, 3563787136, 44099190, 3281263107, 22910812, 1826109246, \
745118154L, 3392171319L, 1571490704L, 354891067L, 815955642L, 1453450421L, 940015623L, \ 745118154, 3392171319, 1571490704, 354891067, 815955642, 1453450421, 940015623, \
796817754L, 1260148619L, 3898237757L, 176670141L, 1870249326L, 3317738680L, 448918002L, \ 796817754, 1260148619, 3898237757, 176670141, 1870249326, 3317738680, 448918002, \
4059166594L, 2003827551L, 987091377L, 224855998L, 3520570137L, 789522610L, 2604445123L, \ 4059166594, 2003827551, 987091377, 224855998, 3520570137, 789522610, 2604445123, \
454472869L, 475688926L, 2990723466L, 523362238L, 3897608102L, 806637149L, 2642229586L, \ 454472869, 475688926, 2990723466, 523362238, 3897608102, 806637149, 2642229586, \
2928614432L, 1564415411L, 1691381054L, 3816907227L, 4082581003L, 1895544448L, 3728217394L, \ 2928614432, 1564415411, 1691381054, 3816907227, 4082581003, 1895544448, 3728217394, \
3214813157L, 4054301607L, 1882632454L, 2873728645L, 3694943071L, 1297991732L, 2101682438L, \ 3214813157, 4054301607, 1882632454, 2873728645, 3694943071, 1297991732, 2101682438, \
3952579552L, 678650400L, 1391722293L, 478833748L, 2976468591L, 158586606L, 2576499787L, \ 3952579552, 678650400, 1391722293, 478833748, 2976468591, 158586606, 2576499787, \
662690848L, 3799889765L, 3328894692L, 2474578497L, 2383901391L, 1718193504L, 3003184595L, \ 662690848, 3799889765, 3328894692, 2474578497, 2383901391, 1718193504, 3003184595, \
3630561213L, 1929441113L, 3848238627L, 1594310094L, 3040359840L, 3051803867L, 2462788790L, \ 3630561213, 1929441113, 3848238627, 1594310094, 3040359840, 3051803867, 2462788790, \
954409915L, 802581771L, 681703307L, 545982392L, 2738993819L, 8025358L, 2827719383L, \ 954409915, 802581771, 681703307, 545982392, 2738993819, 8025358, 2827719383, \
770471093L, 3484895980L, 3111306320L, 3900000891L, 2116916652L, 397746721L, 2087689510L, \ 770471093, 3484895980, 3111306320, 3900000891, 2116916652, 397746721, 2087689510, \
721433935L, 1396088885L, 2751612384L, 1998988613L, 2135074843L, 2521131298L, 707009172L, \ 721433935, 1396088885, 2751612384, 1998988613, 2135074843, 2521131298, 707009172, \
2398321482L, 688041159L, 2264560137L, 482388305L, 207864885L, 3735036991L, 3490348331L, \ 2398321482, 688041159, 2264560137, 482388305, 207864885, 3735036991, 3490348331, \
1963642811L, 3260224305L, 3493564223L, 1939428454L, 1128799656L, 1366012432L, 2858822447L, \ 1963642811, 3260224305, 3493564223, 1939428454, 1128799656, 1366012432, 2858822447, \
1428147157L, 2261125391L, 1611208390L, 1134826333L, 2374102525L, 3833625209L, 2266397263L, \ 1428147157, 2261125391, 1611208390, 1134826333, 2374102525, 3833625209, 2266397263, \
3189115077L, 770080230L, 2674657172L, 4280146640L, 3604531615L, 4235071805L, 3436987249L, \ 3189115077, 770080230, 2674657172, 4280146640, 3604531615, 4235071805, 3436987249, \
509704467L, 2582695198L, 4256268040L, 3391197562L, 1460642842L, 1617931012L, 457825497L, \ 509704467, 2582695198, 4256268040, 3391197562, 1460642842, 1617931012, 457825497, \
1031452907L, 1330422862L, 4125947620L, 2280712485L, 431892090L, 2387410588L, 2061126784L, \ 1031452907, 1330422862, 4125947620, 2280712485, 431892090, 2387410588, 2061126784, \
896457479L, 3480499461L, 2488196663L, 4021103792L, 1877063114L, 2744470201L, 1046140599L, \ 896457479, 3480499461, 2488196663, 4021103792, 1877063114, 2744470201, 1046140599, \
2129952955L, 3583049218L, 4217723693L, 2720341743L, 820661843L, 1079873609L, 3360954200L, \ 2129952955, 3583049218, 4217723693, 2720341743, 820661843, 1079873609, 3360954200, \
3652304997L, 3335838575L, 2178810636L, 1908053374L, 4026721976L, 1793145418L, 476541615L, \ 3652304997, 3335838575, 2178810636, 1908053374, 4026721976, 1793145418, 476541615, \
973420250L, 515553040L, 919292001L, 2601786155L, 1685119450L, 3030170809L, 1590676150L, \ 973420250, 515553040, 919292001, 2601786155, 1685119450, 3030170809, 1590676150, \
1665099167L, 651151584L, 2077190587L, 957892642L, 646336572L, 2743719258L, 866169074L, \ 1665099167, 651151584, 2077190587, 957892642, 646336572, 2743719258, 866169074, \
851118829L, 4225766285L, 963748226L, 799549420L, 1955032629L, 799460000L, 2425744063L, \ 851118829, 4225766285, 963748226, 799549420, 1955032629, 799460000, 2425744063, \
2441291571L, 1928963772L, 528930629L, 2591962884L, 3495142819L, 1896021824L, 901320159L, \ 2441291571, 1928963772, 528930629, 2591962884, 3495142819, 1896021824, 901320159, \
3181820243L, 843061941L, 3338628510L, 3782438992L, 9515330L, 1705797226L, 953535929L, \ 3181820243, 843061941, 3338628510, 3782438992, 9515330, 1705797226, 953535929, \
764833876L, 3202464965L, 2970244591L, 519154982L, 3390617541L, 566616744L, 3438031503L, \ 764833876, 3202464965, 2970244591, 519154982, 3390617541, 566616744, 3438031503, \
1853838297L, 170608755L, 1393728434L, 676900116L, 3184965776L, 1843100290L, 78995357L, \ 1853838297, 170608755, 1393728434, 676900116, 3184965776, 1843100290, 78995357, \
2227939888L, 3460264600L, 1745705055L, 1474086965L, 572796246L, 4081303004L, 882828851L, \ 2227939888, 3460264600, 1745705055, 1474086965, 572796246, 4081303004, 882828851, \
1295445825L, 137639900L, 3304579600L, 2722437017L, 4093422709L, 273203373L, 2666507854L, \ 1295445825, 137639900, 3304579600, 2722437017, 4093422709, 273203373, 2666507854, \
3998836510L, 493829981L, 1623949669L, 3482036755L, 3390023939L, 833233937L, 1639668730L, \ 3998836510, 493829981, 1623949669, 3482036755, 3390023939, 833233937, 1639668730, \
1499455075L, 249728260L, 1210694006L, 3836497489L, 1551488720L, 3253074267L, 3388238003L, \ 1499455075, 249728260, 1210694006, 3836497489, 1551488720, 3253074267, 3388238003, \
2372035079L, 3945715164L, 2029501215L, 3362012634L, 2007375355L, 4074709820L, 631485888L, \ 2372035079, 3945715164, 2029501215, 3362012634, 2007375355, 4074709820, 631485888, \
3135015769L, 4273087084L, 3648076204L, 2739943601L, 1374020358L, 1760722448L, 3773939706L, \ 3135015769, 4273087084, 3648076204, 2739943601, 1374020358, 1760722448, 3773939706, \
1313027823L, 1895251226L, 4224465911L, 421382535L, 1141067370L, 3660034846L, 3393185650L, \ 1313027823, 1895251226, 4224465911, 421382535, 1141067370, 3660034846, 3393185650, \
1850995280L, 1451917312L, 3841455409L, 3926840308L, 1397397252L, 2572864479L, 2500171350L, \ 1850995280, 1451917312, 3841455409, 3926840308, 1397397252, 2572864479, 2500171350, \
3119920613L, 531400869L, 1626487579L, 1099320497L, 407414753L, 2438623324L, 99073255L, \ 3119920613, 531400869, 1626487579, 1099320497, 407414753, 2438623324, 99073255, \
3175491512L, 656431560L, 1153671785L, 236307875L, 2824738046L, 2320621382L, 892174056L, \ 3175491512, 656431560, 1153671785, 236307875, 2824738046, 2320621382, 892174056, \
230984053L, 719791226L, 2718891946L, 624L), None) 230984053, 719791226, 2718891946, 624), None)
self.random = random.Random() self.random = random.Random()
self.random.setstate(fixedState) self.random.setstate(fixedState)
@ -295,8 +295,8 @@ class Counter(dict):
""" """
Returns the key with the highest value. Returns the key with the highest value.
""" """
if len(self.keys()) == 0: return None if len(list(self.keys())) == 0: return None
all = self.items() all = list(self.items())
values = [x[1] for x in all] values = [x[1] for x in all]
maxIndex = values.index(max(values)) maxIndex = values.index(max(values))
return all[maxIndex][0] return all[maxIndex][0]
@ -313,7 +313,7 @@ class Counter(dict):
>>> a.sortedKeys() >>> a.sortedKeys()
['second', 'third', 'first'] ['second', 'third', 'first']
""" """
sortedItems = self.items() sortedItems = list(self.items())
compare = lambda x, y: sign(y[1] - x[1]) compare = lambda x, y: sign(y[1] - x[1])
sortedItems.sort(cmp=compare) sortedItems.sort(cmp=compare)
return [x[0] for x in sortedItems] return [x[0] for x in sortedItems]
@ -333,7 +333,7 @@ class Counter(dict):
""" """
total = float(self.totalCount()) total = float(self.totalCount())
if total == 0: return if total == 0: return
for key in self.keys(): for key in list(self.keys()):
self[key] = self[key] / total self[key] = self[key] / total
def divideAll(self, divisor): def divideAll(self, divisor):
@ -391,7 +391,7 @@ class Counter(dict):
>>> a['first'] >>> a['first']
1 1
""" """
for key, value in y.items(): for key, value in list(y.items()):
self[key] += value self[key] += value
def __add__( self, y ): def __add__( self, y ):
@ -451,7 +451,7 @@ def raiseNotDefined():
line = inspect.stack()[1][2] line = inspect.stack()[1][2]
method = inspect.stack()[1][3] method = inspect.stack()[1][3]
print "*** Method not implemented: %s at line %s of %s" % (method, line, fileName) print("*** Method not implemented: %s at line %s of %s" % (method, line, fileName))
sys.exit(1) sys.exit(1)
def normalize(vectorOrCounter): def normalize(vectorOrCounter):
@ -463,7 +463,7 @@ def normalize(vectorOrCounter):
counter = vectorOrCounter counter = vectorOrCounter
total = float(counter.totalCount()) total = float(counter.totalCount())
if total == 0: return counter if total == 0: return counter
for key in counter.keys(): for key in list(counter.keys()):
value = counter[key] value = counter[key]
normalizedCounter[key] = value / total normalizedCounter[key] = value / total
return normalizedCounter return normalizedCounter
@ -584,19 +584,19 @@ def lookup(name, namespace):
module = __import__(moduleName) module = __import__(moduleName)
return getattr(module, objName) return getattr(module, objName)
else: else:
modules = [obj for obj in namespace.values() if str(type(obj)) == "<type 'module'>"] modules = [obj for obj in list(namespace.values()) if str(type(obj)) == "<type 'module'>"]
options = [getattr(module, name) for module in modules if name in dir(module)] options = [getattr(module, name) for module in modules if name in dir(module)]
options += [obj[1] for obj in namespace.items() if obj[0] == name ] options += [obj[1] for obj in list(namespace.items()) if obj[0] == name ]
if len(options) == 1: return options[0] if len(options) == 1: return options[0]
if len(options) > 1: raise Exception, 'Name conflict for %s' if len(options) > 1: raise Exception('Name conflict for %s')
raise Exception, '%s not found as a method or class' % name raise Exception('%s not found as a method or class' % name)
def pause(): def pause():
""" """
Pauses the output stream awaiting user feedback. Pauses the output stream awaiting user feedback.
""" """
print "<Press enter/return to continue>" print("<Press enter/return to continue>")
raw_input() input()
# code to handle timeouts # code to handle timeouts