|
1 | 1 | "use strict";
|
2 | 2 | let fs = require('fs');
|
3 | 3 |
|
4 |
| -if (process.argv.length != 4) { |
5 |
| - process.stdout.write("Usage: node validator/main.js DESC SOL"); |
| 4 | +let argv = process.argv |
| 5 | +if (argv.length != 5 || (argv[2] != "solution" && argv[2] != "puzzle")) { |
| 6 | + process.stdout.write("Usage: node validator/puzzle.js <solution|puzzle> TASK SOLUTION"); |
6 | 7 | process.exit();
|
7 | 8 | }
|
8 | 9 |
|
9 |
| -const DESCRIPTION_FILE = process.argv[2]; |
10 |
| -const SOLUTION_FILE = process.argv[3]; |
| 10 | +const MODE = argv[2]; |
| 11 | +const TASK_FILE = argv[3]; |
| 12 | +const SOLUTION_FILE = argv[4]; |
11 | 13 |
|
12 | 14 | // The validator will use `window` for callback subscription and delaying execution
|
13 | 15 | global.window = {
|
@@ -50,28 +52,37 @@ global.FileReader = function() {
|
50 | 52 | // Include the validator script into this scope, source: https://icfpcontest2019.github.io/solution_checker
|
51 | 53 | eval.apply(global, [fs.readFileSync(__dirname + '/validator.js').toString()]);
|
52 | 54 | // Call the top-level validator method to subscribe the callbacks
|
53 |
| -validate(); |
| 55 | +if (MODE == "solution") { |
| 56 | + validate(); |
| 57 | +} else { |
| 58 | + puzzle(); |
| 59 | +} |
54 | 60 |
|
55 | 61 | let e = window.document.elements;
|
56 |
| -e.submit_task.files = [new Blob(DESCRIPTION_FILE)]; |
| 62 | +e.submit_task.files = [new Blob(TASK_FILE)]; |
57 | 63 | e.submit_task.onchange();
|
58 | 64 | e.submit_solution.files = [new Blob(SOLUTION_FILE)];
|
59 | 65 | e.submit_solution.onchange();
|
60 | 66 | e.execute_solution.onclick();
|
61 | 67 |
|
62 | 68 | let output = e.output.textContent
|
63 |
| -let result = {} |
64 |
| -let success = output.match(/Success! \n?Your solution took (\d+) time units\./); |
65 |
| -if (success) { |
66 |
| - result.success = true; |
67 |
| - result.time = parseInt(success[1]); |
68 |
| -} else { |
69 |
| - result.success = false; |
70 |
| - let failure = output.match(/.*[F|f]ailed.*/); |
71 |
| - if (failure) { |
72 |
| - result.error = failure[0]; |
| 69 | +if (MODE == "solution") { |
| 70 | + let result = {} |
| 71 | + let success = output.match(/Success! \n?Your solution took (\d+) time units\./); |
| 72 | + if (success) { |
| 73 | + result.success = true; |
| 74 | + result.time = parseInt(success[1]); |
73 | 75 | } else {
|
74 |
| - result.error = "Unexpected validator output: '" + output + "'"; |
| 76 | + result.success = false; |
| 77 | + let failure = output.match(/.*[F|f]ailed.*/); |
| 78 | + if (failure) { |
| 79 | + result.error = failure[0]; |
| 80 | + } else { |
| 81 | + result.error = "Unexpected validator output: '" + output + "'"; |
| 82 | + } |
75 | 83 | }
|
| 84 | + process.stdout.write(JSON.stringify(result)); |
| 85 | +} else { |
| 86 | + // TODO: write JSON if needed |
| 87 | + process.stdout.write(output + "\n"); |
76 | 88 | }
|
77 |
| -process.stdout.write(JSON.stringify(result)); |
|
0 commit comments