You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

83 lines
3.2 KiB

#!/usr/bin/env python
import json
import sys
import glob
from datetime import datetime
solutionsDir = "solutions/"
resultsScore = {}
with open('scores') as f:
for line in f:
tmp = line.strip().split(' ')
key = tmp[0]+"."+tmp[1]
if not key in resultsScore:
resultsScore[key] = int(tmp[2])
else:
print "Bellandi dio merda, mi hai messo un doppione!!!"
sys.exit(1)
f.close()
if len(sys.argv) < 2 or sys.argv[1] != "compare":
results = json.loads(''.join(sys.stdin.readlines()))
for i in range(0, len(results)):
key = str(results[i]['problemId']) + "." + str(results[i]['seed'])
if key in resultsScore:
out_file = open(solutionsDir+str(results[i]['problemId'])+"."+str(results[i]['seed'])+"."+"%.110d"%resultsScore[key],"w")
out_file.write(json.dumps(results[i]))
out_file.close()
else:
print "Bellandi dio merda, ne manca uno!!!"
sys.exit(1)
else:
results=[{'problemId':''}]
solutionsToSend=[]
scores = {}
lastProblem = ""
for solution in sorted(glob.glob(solutionsDir + str(results[0]['problemId']) + '*'), reverse=True):
if lastProblem != solution[:solution.rfind(".")]:
lastProblem = solution[:solution.rfind(".")]
with open(solution) as json_data:
partialSolution = json.load(json_data)
json_data.close()
solutionsToSend.append(partialSolution)
scores[lastProblem.replace(solutionsDir, '')] = int(solution[solution.rfind(".") + 1:])
if len(sys.argv) < 2 or sys.argv[1] != "compare":
print json.dumps(list(reversed(solutionsToSend)))
else:
import subprocess
process = subprocess.Popen(['curl --user :2aaFCkjNIDHAsAIh9iQHc+Y+FGhkM5Z0RQgpO6TL6EA= -X GET https://davar.icfpcontest.org/teams/235/solutions'], shell = True, stdout=subprocess.PIPE)
out, err = process.communicate()
if err == None:
print "Results:"
serverResults = {}
results = json.loads(out)
for result in results:
#2015-08-08T12:26:42.894Z
date_object = datetime.strptime(result['createdAt'], '%Y-%m-%dT%H:%M:%S.%fZ')
# print str(date_object)
key = str(result['problemId'])+"."+str(result['seed'])
if not key in serverResults or serverResults[key]['createdAt'] < result['createdAt']:
serverResults[key] = result
# print serverResults
for solutionToSend in solutionsToSend:
key = str(solutionToSend['problemId'])+"."+str(solutionToSend['seed'])
if not key in serverResults:
print str(solutionToSend['problemId'])+" "+str(solutionToSend['seed']) + " not present on server"
else:
if solutionToSend['solution'] != serverResults[key]['solution']:
print str(solutionToSend['problemId'])+" "+str(solutionToSend['seed']) + " solution differ: " + solutionToSend['solution'] + " != " + serverResults[key]['solution'] + " (server)"
elif serverResults[key]['score'] == None:
print str(solutionToSend['problemId'])+" "+str(solutionToSend['seed']) + " solution evaluation pending"
elif scores[key] != serverResults[key]['score']:
print str(solutionToSend['problemId'])+" "+str(solutionToSend['seed']) + " score differ: " + str(scores[key]) + " != " + str(serverResults[key]['score']) + " (server)"
# print scores
# print type(out)
# print json.dumps(serverResults)
# print len(serverResults)
else:
print "error retriving results from server"
sys.exit(1)
sys.exit(0)