app.py 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. # encoding: utf8
  2. import os
  3. import shutil
  4. from datetime import time
  5. from flask import Flask, request, json
  6. import judgement
  7. app = Flask(__name__)
  8. @app.route('/')
  9. def hello_world():
  10. return 'Hello World!'
  11. '''
  12. code: string 源代码
  13. language: string 编程语言{cpp,java,c,python}
  14. timeLimit: int 时间限制
  15. memoryLimit: int 内存限制
  16. inputOutputMapping: hashmap 输入输出对
  17. '''
  18. @app.route('/api/judge', methods=['POST'])
  19. def judge():
  20. start = time()
  21. data = json.loads(request.get_data(as_text=True))
  22. code = data['code']
  23. language = data['language']
  24. time_limit = int(data['timeLimit'])
  25. memory_limit = int(data['memoryLimit'])
  26. input_list = data['inputList']
  27. output_list = data['outputList']
  28. if len(input_list) != len(output_list):
  29. return {"result_list": [{'result': "System Error"}],
  30. 'message': 'test data incompleted'}
  31. td_total = len(input_list)
  32. save_test_cases(input_list, output_list, td_total)
  33. src_file = save_code(language, code)
  34. rst = judgement.judge(src_file, 'testcases', td_total, time_limit, memory_limit, language)
  35. os.remove(src_file)
  36. shutil.rmtree('testcases')
  37. print(time()-start)
  38. return rst
  39. def save_test_cases(input_list,output_list, td_total):
  40. if os.path.exists('testcases'):
  41. shutil.rmtree('testcases')
  42. os.mkdir('testcases')
  43. for i in range(0, td_total):
  44. in_file = open('testcases/' + str(i) + '.in', 'w')
  45. in_file.write(input_list[i])
  46. out_file = open('testcases/' + str(i) + '.out', 'w')
  47. out_file.write(output_list[i])
  48. def save_code(language, code):
  49. src_file = None
  50. if language == 'c':
  51. src_file = open('main.c', 'w')
  52. elif language == 'cpp':
  53. src_file = open('main.cpp', 'w')
  54. elif language == 'java':
  55. src_file = open('Main.java', 'w')
  56. elif language == 'python':
  57. src_file = open('main.py', 'w')
  58. print(src_file.name)
  59. src_file.write(code)
  60. return src_file.name
  61. if __name__ == '__main__':
  62. app.run()