[new] add txt json download support
This commit is contained in:
parent
f223fa8c9a
commit
814fc3463e
|
|
@ -12,6 +12,7 @@ exports.listAllFiles = (req, res) => {
|
||||||
}
|
}
|
||||||
|
|
||||||
exports.downloadFile = (req, res) => {
|
exports.downloadFile = (req, res) => {
|
||||||
var filename = req.params.filename;
|
var id = req.query.id;
|
||||||
res.download(uploadFolder + filename);
|
var filename = req.query.filename;
|
||||||
|
res.download(uploadFolder + '../output/' + id + '/' + filename);
|
||||||
}
|
}
|
||||||
|
|
@ -1,26 +1,187 @@
|
||||||
module.exports = (app, router, upload) => {
|
module.exports = (app, router, upload) => {
|
||||||
const fileWorker = require('../controllers/file.controller.js');
|
const fileWorker = require('../controllers/file.controller.js')
|
||||||
|
|
||||||
var path = __basedir + '/views/';
|
var path = __basedir + '/views/'
|
||||||
|
|
||||||
|
const tsp_list = ["ulysses16", "att48", "st70", "a280", "pcb442", "dsj1000"]
|
||||||
|
|
||||||
router.use((req,res,next) => {
|
router.use((req,res,next) => {
|
||||||
console.log("/" + req.method);
|
console.log("/" + req.method)
|
||||||
next();
|
next()
|
||||||
});
|
});
|
||||||
|
|
||||||
app.get('/', (req,res) => {
|
app.get('/', (req,res) => {
|
||||||
res.sendFile(path + "index.html");
|
res.sendFile(path + "index.html")
|
||||||
});
|
});
|
||||||
|
|
||||||
app.post('/api/files/upload', upload.single("uploadfile"), fileWorker.uploadFile);
|
app.get('/leaderboard', (req, res) => {
|
||||||
|
leaderboard = global.leaderboard
|
||||||
|
if(req.query.type === 'txt') {
|
||||||
|
res.set({"Content-Disposition":"attachment; filename=\"" + tsp_list[req.query.tsp] + ".txt\""})
|
||||||
|
result = "Not Found"
|
||||||
|
switch (parseInt(req.query.tsp)) {
|
||||||
|
case 0:
|
||||||
|
leaderboard.ulysses16.forEach(e => {
|
||||||
|
console.log('leader', e.id)
|
||||||
|
if(e.id == req.query.id) {
|
||||||
|
sentFlag = true
|
||||||
|
result = `${e.fitness}\n${e.solution}`
|
||||||
|
}
|
||||||
|
})
|
||||||
|
res.end(result)
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
leaderboard.att48.forEach(e => {
|
||||||
|
if(e.id == req.query.id) {
|
||||||
|
result = `${e.fitness}\n${e.solution}`
|
||||||
|
}
|
||||||
|
})
|
||||||
|
res.end(result)
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
leaderboard.st70.forEach(e => {
|
||||||
|
if(e.id == req.query.id) {
|
||||||
|
result = `${e.fitness}\n${e.solution}`
|
||||||
|
}
|
||||||
|
})
|
||||||
|
res.end(result)
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
leaderboard.a280.forEach(e => {
|
||||||
|
if(e.id == req.query.id) {
|
||||||
|
result = `${e.fitness}\n${e.solution}`
|
||||||
|
}
|
||||||
|
})
|
||||||
|
res.end(result)
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
leaderboard.pcb442.forEach(e => {
|
||||||
|
if(e.id == req.query.id) {
|
||||||
|
result = `${e.fitness}\n${e.solution}`
|
||||||
|
}
|
||||||
|
})
|
||||||
|
res.end(result)
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
leaderboard.dsj1000.forEach(e => {
|
||||||
|
if(e.id == req.query.id) {
|
||||||
|
result = `${e.fitness}\n${e.solution}`
|
||||||
|
}
|
||||||
|
})
|
||||||
|
res.end(result)
|
||||||
|
default:
|
||||||
|
res.sendStatus(404);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (req.query.type === 'json') {
|
||||||
|
res.set({"Content-Disposition":"attachment; filename=\"" + tsp_list[req.query.tsp] + ".json\""})
|
||||||
|
// res.header("Content-Type",'application/json');
|
||||||
|
data = {}
|
||||||
|
switch (parseInt(req.query.tsp)) {
|
||||||
|
case 0:
|
||||||
|
data = require('../../data/ulysses16.json')
|
||||||
|
data['edges'] = []
|
||||||
|
leaderboard.ulysses16.forEach(e => {
|
||||||
|
if(e.id == req.query.id) {
|
||||||
|
for (let i = 0; i < e.solution.length; i++) {
|
||||||
|
data['edges'].push({
|
||||||
|
'source': e.solution[i % e.solution.length],
|
||||||
|
'target': e.solution[(i+1) % e.solution.length]
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
data = require('../../data/att48.json')
|
||||||
|
data['edges'] = []
|
||||||
|
leaderboard.att48.forEach(e => {
|
||||||
|
if(e.id == req.query.id) {
|
||||||
|
for (let i = 0; i < e.solution.length; i++) {
|
||||||
|
data['edges'].push({
|
||||||
|
'source': e.solution[i % e.solution.length],
|
||||||
|
'target': e.solution[(i+1) % e.solution.length]
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
data = require('../../data/st70.json')
|
||||||
|
data['edges'] = []
|
||||||
|
leaderboard.st70.forEach(e => {
|
||||||
|
if(e.id == req.query.id) {
|
||||||
|
for (let i = 0; i < e.solution.length; i++) {
|
||||||
|
data['edges'].push({
|
||||||
|
'source': e.solution[i % e.solution.length],
|
||||||
|
'target': e.solution[(i+1) % e.solution.length]
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
data = require('../../data/a280.json')
|
||||||
|
data['edges'] = []
|
||||||
|
leaderboard.a280.forEach(e => {
|
||||||
|
if(e.id == req.query.id) {
|
||||||
|
for (let i = 0; i < e.solution.length; i++) {
|
||||||
|
data['edges'].push({
|
||||||
|
'source': e.solution[i % e.solution.length],
|
||||||
|
'target': e.solution[(i+1) % e.solution.length]
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
data = require('../../data/pcb442.json')
|
||||||
|
data['edges'] = []
|
||||||
|
leaderboard.pcb442.forEach(e => {
|
||||||
|
if(e.id == req.query.id) {
|
||||||
|
for (let i = 0; i < e.solution.length; i++) {
|
||||||
|
data['edges'].push({
|
||||||
|
'source': e.solution[i % e.solution.length],
|
||||||
|
'target': e.solution[(i+1) % e.solution.length]
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
data = require('../../data/dsj1000.json')
|
||||||
|
data['edges'] = []
|
||||||
|
leaderboard.dsj1000.forEach(e => {
|
||||||
|
if(e.id == req.query.id) {
|
||||||
|
for (let i = 0; i < e.solution.length; i++) {
|
||||||
|
data['edges'].push({
|
||||||
|
'source': e.solution[i % e.solution.length],
|
||||||
|
'target': e.solution[(i+1) % e.solution.length]
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
res.end(JSON.stringify(data));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
res.sendStatus(404);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
app.get('/api/files/getall', fileWorker.listAllFiles);
|
app.post('/api/files/upload', upload.single("uploadfile"), fileWorker.uploadFile)
|
||||||
|
|
||||||
app.get('/api/files/:filename', fileWorker.downloadFile);
|
app.get('/api/files/getall', fileWorker.listAllFiles)
|
||||||
|
|
||||||
app.use('/',router);
|
app.get('/api/files/result', fileWorker.downloadFile)
|
||||||
|
|
||||||
|
app.use('/',router)
|
||||||
|
|
||||||
app.use('*', (req,res) => {
|
app.use('*', (req,res) => {
|
||||||
res.sendFile(path + "404.html");
|
res.sendFile(path + "404.html")
|
||||||
});
|
})
|
||||||
}
|
}
|
||||||
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1 @@
|
||||||
|
{"nodes": [{"title": "0", "id": 0, "x": 6734, "y": 1453}, {"title": "1", "id": 1, "x": 2233, "y": 10}, {"title": "2", "id": 2, "x": 5530, "y": 1424}, {"title": "3", "id": 3, "x": 401, "y": 841}, {"title": "4", "id": 4, "x": 3082, "y": 1644}, {"title": "5", "id": 5, "x": 7608, "y": 4458}, {"title": "6", "id": 6, "x": 7573, "y": 3716}, {"title": "7", "id": 7, "x": 7265, "y": 1268}, {"title": "8", "id": 8, "x": 6898, "y": 1885}, {"title": "9", "id": 9, "x": 1112, "y": 2049}, {"title": "10", "id": 10, "x": 5468, "y": 2606}, {"title": "11", "id": 11, "x": 5989, "y": 2873}, {"title": "12", "id": 12, "x": 4706, "y": 2674}, {"title": "13", "id": 13, "x": 4612, "y": 2035}, {"title": "14", "id": 14, "x": 6347, "y": 2683}, {"title": "15", "id": 15, "x": 6107, "y": 669}, {"title": "16", "id": 16, "x": 7611, "y": 5184}, {"title": "17", "id": 17, "x": 7462, "y": 3590}, {"title": "18", "id": 18, "x": 7732, "y": 4723}, {"title": "19", "id": 19, "x": 5900, "y": 3561}, {"title": "20", "id": 20, "x": 4483, "y": 3369}, {"title": "21", "id": 21, "x": 6101, "y": 1110}, {"title": "22", "id": 22, "x": 5199, "y": 2182}, {"title": "23", "id": 23, "x": 1633, "y": 2809}, {"title": "24", "id": 24, "x": 4307, "y": 2322}, {"title": "25", "id": 25, "x": 675, "y": 1006}, {"title": "26", "id": 26, "x": 7555, "y": 4819}, {"title": "27", "id": 27, "x": 7541, "y": 3981}, {"title": "28", "id": 28, "x": 3177, "y": 756}, {"title": "29", "id": 29, "x": 7352, "y": 4506}, {"title": "30", "id": 30, "x": 7545, "y": 2801}, {"title": "31", "id": 31, "x": 3245, "y": 3305}, {"title": "32", "id": 32, "x": 6426, "y": 3173}, {"title": "33", "id": 33, "x": 4608, "y": 1198}, {"title": "34", "id": 34, "x": 23, "y": 2216}, {"title": "35", "id": 35, "x": 7248, "y": 3779}, {"title": "36", "id": 36, "x": 7762, "y": 4595}, {"title": "37", "id": 37, "x": 7392, "y": 2244}, {"title": "38", "id": 38, "x": 3484, "y": 2829}, {"title": "39", "id": 39, "x": 6271, "y": 2135}, {"title": "40", "id": 40, "x": 4985, "y": 140}, {"title": "41", "id": 41, "x": 1916, "y": 1569}, {"title": "42", "id": 42, "x": 7280, "y": 4899}, {"title": "43", "id": 43, "x": 7509, "y": 3239}, {"title": "44", "id": 44, "x": 10, "y": 2676}, {"title": "45", "id": 45, "x": 6807, "y": 2993}, {"title": "46", "id": 46, "x": 5185, "y": 3258}, {"title": "47", "id": 47, "x": 3023, "y": 1942}]}
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1 @@
|
||||||
|
{"nodes": [{"title": "0", "id": 0, "x": 64, "y": 96}, {"title": "1", "id": 1, "x": 80, "y": 39}, {"title": "2", "id": 2, "x": 69, "y": 23}, {"title": "3", "id": 3, "x": 72, "y": 42}, {"title": "4", "id": 4, "x": 48, "y": 67}, {"title": "5", "id": 5, "x": 58, "y": 43}, {"title": "6", "id": 6, "x": 81, "y": 34}, {"title": "7", "id": 7, "x": 79, "y": 17}, {"title": "8", "id": 8, "x": 30, "y": 23}, {"title": "9", "id": 9, "x": 42, "y": 67}, {"title": "10", "id": 10, "x": 7, "y": 76}, {"title": "11", "id": 11, "x": 29, "y": 51}, {"title": "12", "id": 12, "x": 78, "y": 92}, {"title": "13", "id": 13, "x": 64, "y": 8}, {"title": "14", "id": 14, "x": 95, "y": 57}, {"title": "15", "id": 15, "x": 57, "y": 91}, {"title": "16", "id": 16, "x": 40, "y": 35}, {"title": "17", "id": 17, "x": 68, "y": 40}, {"title": "18", "id": 18, "x": 92, "y": 34}, {"title": "19", "id": 19, "x": 62, "y": 1}, {"title": "20", "id": 20, "x": 28, "y": 43}, {"title": "21", "id": 21, "x": 76, "y": 73}, {"title": "22", "id": 22, "x": 67, "y": 88}, {"title": "23", "id": 23, "x": 93, "y": 54}, {"title": "24", "id": 24, "x": 6, "y": 8}, {"title": "25", "id": 25, "x": 87, "y": 18}, {"title": "26", "id": 26, "x": 30, "y": 9}, {"title": "27", "id": 27, "x": 77, "y": 13}, {"title": "28", "id": 28, "x": 78, "y": 94}, {"title": "29", "id": 29, "x": 55, "y": 3}, {"title": "30", "id": 30, "x": 82, "y": 88}, {"title": "31", "id": 31, "x": 73, "y": 28}, {"title": "32", "id": 32, "x": 20, "y": 55}, {"title": "33", "id": 33, "x": 27, "y": 43}, {"title": "34", "id": 34, "x": 95, "y": 86}, {"title": "35", "id": 35, "x": 67, "y": 99}, {"title": "36", "id": 36, "x": 48, "y": 83}, {"title": "37", "id": 37, "x": 75, "y": 81}, {"title": "38", "id": 38, "x": 8, "y": 19}, {"title": "39", "id": 39, "x": 20, "y": 18}, {"title": "40", "id": 40, "x": 54, "y": 38}, {"title": "41", "id": 41, "x": 63, "y": 36}, {"title": "42", "id": 42, "x": 44, "y": 33}, {"title": "43", "id": 43, "x": 52, "y": 18}, {"title": "44", "id": 44, "x": 12, "y": 13}, {"title": "45", "id": 45, "x": 25, "y": 5}, {"title": "46", "id": 46, "x": 58, "y": 85}, {"title": "47", "id": 47, "x": 5, "y": 67}, {"title": "48", "id": 48, "x": 90, "y": 9}, {"title": "49", "id": 49, "x": 41, "y": 76}, {"title": "50", "id": 50, "x": 25, "y": 76}, {"title": "51", "id": 51, "x": 37, "y": 64}, {"title": "52", "id": 52, "x": 56, "y": 63}, {"title": "53", "id": 53, "x": 10, "y": 55}, {"title": "54", "id": 54, "x": 98, "y": 7}, {"title": "55", "id": 55, "x": 16, "y": 74}, {"title": "56", "id": 56, "x": 89, "y": 60}, {"title": "57", "id": 57, "x": 48, "y": 82}, {"title": "58", "id": 58, "x": 81, "y": 76}, {"title": "59", "id": 59, "x": 29, "y": 60}, {"title": "60", "id": 60, "x": 17, "y": 22}, {"title": "61", "id": 61, "x": 5, "y": 45}, {"title": "62", "id": 62, "x": 79, "y": 70}, {"title": "63", "id": 63, "x": 9, "y": 100}, {"title": "64", "id": 64, "x": 17, "y": 82}, {"title": "65", "id": 65, "x": 74, "y": 67}, {"title": "66", "id": 66, "x": 10, "y": 68}, {"title": "67", "id": 67, "x": 48, "y": 19}, {"title": "68", "id": 68, "x": 83, "y": 86}, {"title": "69", "id": 69, "x": 84, "y": 94}]}
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
{"nodes": [{"title": "0", "id": 0, "x": 38, "y": 20}, {"title": "1", "id": 1, "x": 39, "y": 26}, {"title": "2", "id": 2, "x": 40, "y": 25}, {"title": "3", "id": 3, "x": 36, "y": 23}, {"title": "4", "id": 4, "x": 33, "y": 10}, {"title": "5", "id": 5, "x": 37, "y": 12}, {"title": "6", "id": 6, "x": 38, "y": 13}, {"title": "7", "id": 7, "x": 37, "y": 20}, {"title": "8", "id": 8, "x": 41, "y": 9}, {"title": "9", "id": 9, "x": 41, "y": 13}, {"title": "10", "id": 10, "x": 36, "y": -5}, {"title": "11", "id": 11, "x": 38, "y": 15}, {"title": "12", "id": 12, "x": 38, "y": 15}, {"title": "13", "id": 13, "x": 37, "y": 15}, {"title": "14", "id": 14, "x": 35, "y": 14}, {"title": "15", "id": 15, "x": 39, "y": 19}]}
|
||||||
|
|
@ -167,6 +167,10 @@ body::after {
|
||||||
background-color: #f5f5f5;
|
background-color: #f5f5f5;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.link {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
.blink_me {
|
.blink_me {
|
||||||
animation: blinker 1s linear infinite;
|
animation: blinker 1s linear infinite;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -120,6 +120,7 @@
|
||||||
<th>Name</th>
|
<th>Name</th>
|
||||||
<th>Fitness</th>
|
<th>Fitness</th>
|
||||||
<th>Remark</th>
|
<th>Remark</th>
|
||||||
|
<th>Download</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
|
|
@ -127,6 +128,7 @@
|
||||||
<td> - </td>
|
<td> - </td>
|
||||||
<td> - </td>
|
<td> - </td>
|
||||||
<td> - </td>
|
<td> - </td>
|
||||||
|
<td> - </td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|
@ -138,6 +140,7 @@
|
||||||
<th>Name</th>
|
<th>Name</th>
|
||||||
<th>Fitness</th>
|
<th>Fitness</th>
|
||||||
<th>Remark</th>
|
<th>Remark</th>
|
||||||
|
<th>Download</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
|
|
@ -145,6 +148,7 @@
|
||||||
<td> - </td>
|
<td> - </td>
|
||||||
<td> - </td>
|
<td> - </td>
|
||||||
<td> - </td>
|
<td> - </td>
|
||||||
|
<td> - </td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|
@ -156,6 +160,7 @@
|
||||||
<th>Name</th>
|
<th>Name</th>
|
||||||
<th>Fitness</th>
|
<th>Fitness</th>
|
||||||
<th>Remark</th>
|
<th>Remark</th>
|
||||||
|
<th>Download</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
|
|
@ -163,6 +168,7 @@
|
||||||
<td> - </td>
|
<td> - </td>
|
||||||
<td> - </td>
|
<td> - </td>
|
||||||
<td> - </td>
|
<td> - </td>
|
||||||
|
<td> - </td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|
@ -174,6 +180,7 @@
|
||||||
<th>Name</th>
|
<th>Name</th>
|
||||||
<th>Fitness</th>
|
<th>Fitness</th>
|
||||||
<th>Remark</th>
|
<th>Remark</th>
|
||||||
|
<th>Download</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
|
|
@ -181,6 +188,7 @@
|
||||||
<td> - </td>
|
<td> - </td>
|
||||||
<td> - </td>
|
<td> - </td>
|
||||||
<td> - </td>
|
<td> - </td>
|
||||||
|
<td> - </td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|
@ -192,6 +200,7 @@
|
||||||
<th>Name</th>
|
<th>Name</th>
|
||||||
<th>Fitness</th>
|
<th>Fitness</th>
|
||||||
<th>Remark</th>
|
<th>Remark</th>
|
||||||
|
<th>Download</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
|
|
@ -199,6 +208,7 @@
|
||||||
<td> - </td>
|
<td> - </td>
|
||||||
<td> - </td>
|
<td> - </td>
|
||||||
<td> - </td>
|
<td> - </td>
|
||||||
|
<td> - </td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|
@ -210,6 +220,7 @@
|
||||||
<th>Name</th>
|
<th>Name</th>
|
||||||
<th>Fitness</th>
|
<th>Fitness</th>
|
||||||
<th>Remark</th>
|
<th>Remark</th>
|
||||||
|
<th>Download</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
|
|
@ -217,6 +228,7 @@
|
||||||
<td> - </td>
|
<td> - </td>
|
||||||
<td> - </td>
|
<td> - </td>
|
||||||
<td> - </td>
|
<td> - </td>
|
||||||
|
<td> - </td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|
@ -249,6 +261,7 @@
|
||||||
<th scope="col">Problem</th>
|
<th scope="col">Problem</th>
|
||||||
<th scope="col">Your Solution</th>
|
<th scope="col">Your Solution</th>
|
||||||
<th scope="col">Best Solution</th>
|
<th scope="col">Best Solution</th>
|
||||||
|
<th scope="col">Download</th>
|
||||||
<th scope="col"></th>
|
<th scope="col"></th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
|
|
@ -257,48 +270,66 @@
|
||||||
<th scope="col">ulysses16</th>
|
<th scope="col">ulysses16</th>
|
||||||
<td id="ulysses16_your">Inf</td>
|
<td id="ulysses16_your">Inf</td>
|
||||||
<td id="ulysses16_best">Inf</td>
|
<td id="ulysses16_best">Inf</td>
|
||||||
|
<td id="ulysses16_download">
|
||||||
|
<a href="" target="_blank"><span class="badge badge-primary link">txt</span></a> <a href="" target="_blank"><span class="badge badge-success link">json</span></a>
|
||||||
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<button type="submit" class="btn btn-primary" id="ulysses16_submit">Submit</button>
|
<button type="submit" class="btn btn-primary" id="ulysses16_submit">Submit</button>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th scope="col">att48</th>
|
<th scope="col">att48</th>
|
||||||
<td id="att48_your">Inf</td>
|
<td id="att48_your">Inf</td>
|
||||||
<td id="att48_best">Inf</td>
|
<td id="att48_best">Inf</td>
|
||||||
|
<td id="att48_download">
|
||||||
|
<a href="" target="_blank"><span class="badge badge-primary link">txt</span></a> <a href="" target="_blank"><span class="badge badge-success link">json</span></a>
|
||||||
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<button type="submit" class="btn btn-primary" id="att48_submit">Submit</button>
|
<button type="submit" class="btn btn-primary" id="att48_submit">Submit</button>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th scope="col">st70</th>
|
<th scope="col">st70</th>
|
||||||
<td id="st70_your">Inf</td>
|
<td id="st70_your">Inf</td>
|
||||||
<td id="st70_best">Inf</td>
|
<td id="st70_best">Inf</td>
|
||||||
|
<td id="st70_download">
|
||||||
|
<a href="" target="_blank"><span class="badge badge-primary link">txt</span></a> <a href="" target="_blank"><span class="badge badge-success link">json</span></a>
|
||||||
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<button type="submit" class="btn btn-primary" id="st70_submit">Submit</button>
|
<button type="submit" class="btn btn-primary" id="st70_submit">Submit</button>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th scope="col">a280</th>
|
<th scope="col">a280</th>
|
||||||
<td id="a280_your">Inf</td>
|
<td id="a280_your">Inf</td>
|
||||||
<td id="a280_best">Inf</td>
|
<td id="a280_best">Inf</td>
|
||||||
|
<td id="a280_download">
|
||||||
|
<a href="" target="_blank"><span class="badge badge-primary link">txt</span></a> <a href="" target="_blank"><span class="badge badge-success link">json</span></a>
|
||||||
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<button type="submit" class="btn btn-primary" id="a280_submit">Submit</button>
|
<button type="submit" class="btn btn-primary" id="a280_submit">Submit</button>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th scope="col">pcb442</th>
|
<th scope="col">pcb442</th>
|
||||||
<td id="pcb442_your">Inf</td>
|
<td id="pcb442_your">Inf</td>
|
||||||
<td id="pcb442_best">Inf</td>
|
<td id="pcb442_best">Inf</td>
|
||||||
|
<td id="pcb442_download">
|
||||||
|
<a href="" target="_blank"><span class="badge badge-primary link">txt</span></a> <a href="" target="_blank"><span class="badge badge-success link">json</span></a>
|
||||||
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<button type="submit" class="btn btn-primary" id="pcb442_submit">Submit</button>
|
<button type="submit" class="btn btn-primary" id="pcb442_submit">Submit</button>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th scope="col">dsj1000</th>
|
<th scope="col">dsj1000</th>
|
||||||
<td id="dsj1000_your">Inf</td>
|
<td id="dsj1000_your">Inf</td>
|
||||||
<td id="dsj1000_best">Inf</td>
|
<td id="dsj1000_best">Inf</td>
|
||||||
|
<td id="dsj1000_download">
|
||||||
|
<a href="" target="_blank"><span class="badge badge-primary link">txt</span></a> <a href="" target="_blank"><span class="badge badge-success link">json</span></a>
|
||||||
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<button type="submit" class="btn btn-primary" id="dsj1000_submit">Submit</button>
|
<button type="submit" class="btn btn-primary" id="dsj1000_submit">Submit</button>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
|
|
|
||||||
|
|
@ -53,6 +53,13 @@ $( document ).ready( () => {
|
||||||
|
|
||||||
$('#submission_info').hide();
|
$('#submission_info').hide();
|
||||||
|
|
||||||
|
$('#ulysses16_download').hide();
|
||||||
|
$('#att48_download').hide();
|
||||||
|
$('#st70_download').hide();
|
||||||
|
$('#a280_download').hide();
|
||||||
|
$('#pcb442_download').hide();
|
||||||
|
$('#dsj1000_download').hide();
|
||||||
|
|
||||||
$('#ulysses16_submit').hide();
|
$('#ulysses16_submit').hide();
|
||||||
$('#att48_submit').hide();
|
$('#att48_submit').hide();
|
||||||
$('#st70_submit').hide();
|
$('#st70_submit').hide();
|
||||||
|
|
@ -209,21 +216,27 @@ function upload_leaderboard(name) {
|
||||||
data = {}
|
data = {}
|
||||||
if(name === 'ulysses16') {
|
if(name === 'ulysses16') {
|
||||||
data.fitness = my_res.ulysses16.fitness;
|
data.fitness = my_res.ulysses16.fitness;
|
||||||
|
data.solution = my_res.ulysses16.solution;
|
||||||
}
|
}
|
||||||
else if (name === 'att48') {
|
else if (name === 'att48') {
|
||||||
data.fitness = my_res.att48.fitness;
|
data.fitness = my_res.att48.fitness;
|
||||||
|
data.solution = my_res.att48.solution;
|
||||||
}
|
}
|
||||||
else if (name === 'st70') {
|
else if (name === 'st70') {
|
||||||
data.fitness = my_res.st70.fitness;
|
data.fitness = my_res.st70.fitness;
|
||||||
|
data.solution = my_res.st70.solution;
|
||||||
}
|
}
|
||||||
else if (name === 'a280') {
|
else if (name === 'a280') {
|
||||||
data.fitness = my_res.a280.fitness;
|
data.fitness = my_res.a280.fitness;
|
||||||
|
data.solution = my_res.a280.solution;
|
||||||
}
|
}
|
||||||
else if (name === 'pcb442') {
|
else if (name === 'pcb442') {
|
||||||
data.fitness = my_res.pcb442.fitness;
|
data.fitness = my_res.pcb442.fitness;
|
||||||
|
data.solution = my_res.pcb442.solution;
|
||||||
}
|
}
|
||||||
else if (name === 'dsj1000') {
|
else if (name === 'dsj1000') {
|
||||||
data.fitness = my_res.dsj1000.fitness;
|
data.fitness = my_res.dsj1000.fitness;
|
||||||
|
data.solution = my_res.dsj1000.solution;
|
||||||
}
|
}
|
||||||
data.name = $('#submit_name').val();
|
data.name = $('#submit_name').val();
|
||||||
data.desc = $('#submit_desc').val()
|
data.desc = $('#submit_desc').val()
|
||||||
|
|
@ -288,3 +301,31 @@ function doAjax() {
|
||||||
alert('Failed to connect to server');
|
alert('Failed to connect to server');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function downloadRes(id, tsp, file) {
|
||||||
|
// txt
|
||||||
|
if(file == 0) {
|
||||||
|
$.ajax({
|
||||||
|
type: "GET",
|
||||||
|
url: "/leaderboard",
|
||||||
|
data: {
|
||||||
|
"id": id,
|
||||||
|
"tsp": tsp,
|
||||||
|
"type": 'txt'
|
||||||
|
},
|
||||||
|
processData: false, //prevent jQuery from automatically transforming the data into a query string
|
||||||
|
contentType: false,
|
||||||
|
cache: false,
|
||||||
|
success: (data) => {
|
||||||
|
console.log(data)
|
||||||
|
},
|
||||||
|
error: (e) => {
|
||||||
|
// $("#listFiles").text(e.responseText);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
// json
|
||||||
|
else {
|
||||||
|
console.log(id, 'json')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -52,41 +52,41 @@ socket.on('leaderboard', (obj) => {
|
||||||
$(".leaderboard-table").find("tr:not(:first):not(:last)").remove();
|
$(".leaderboard-table").find("tr:not(:first):not(:last)").remove();
|
||||||
if(obj.ulysses16.length != 0) {
|
if(obj.ulysses16.length != 0) {
|
||||||
obj.ulysses16.forEach(element => {
|
obj.ulysses16.forEach(element => {
|
||||||
$('#ulysses16-last').before('<tr id=""><td>' + element.name + '</td><td>' + element.fitness.toFixed(2) + '</td><td>' + element.desc + '</td></tr>')
|
$('#ulysses16-last').before('<tr id=""><td>' + element.name + '</td><td>' + element.fitness.toFixed(2) + '</td><td>' + element.desc + '</td><td><a href="/leaderboard?id=' + element.id + '&tsp=0&type=txt" target="_blank"><span class="badge badge-primary link">txt</span></a> <a href="/leaderboard?id=' + element.id + '&tsp=0&type=json" target="_blank"><span class="badge badge-success link">json</span></a></td></tr>')
|
||||||
});
|
});
|
||||||
$('#ulysses16_best').text(obj.ulysses16[0].fitness.toFixed(2));
|
$('#ulysses16_best').text(obj.ulysses16[0].fitness.toFixed(2));
|
||||||
}
|
}
|
||||||
if(obj.att48.length != 0 ) {
|
if(obj.att48.length != 0 ) {
|
||||||
obj.att48.forEach(element => {
|
obj.att48.forEach(element => {
|
||||||
$('#att48-last').before('<tr id=""><td>' + element.name + '</td><td>' + element.fitness.toFixed(2) + '</td><td>' + element.desc + '</td></tr>')
|
$('#att48-last').before('<tr id=""><td>' + element.name + '</td><td>' + element.fitness.toFixed(2) + '</td><td>' + element.desc + '</td><td><a href="/leaderboard?id=' + element.id + '&tsp=1&type=txt" target="_blank"><span class="badge badge-primary link">txt</span></a> <a href="/leaderboard?id=' + element.id + '&tsp=1&type=json" target="_blank"><span class="badge badge-success link">json</span></a></td></tr>')
|
||||||
});
|
});
|
||||||
$('#att48_best').text(obj.att48[0].fitness.toFixed(2));
|
$('#att48_best').text(obj.att48[0].fitness.toFixed(2));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (obj.st70.length != 0) {
|
if (obj.st70.length != 0) {
|
||||||
obj.st70.forEach(element => {
|
obj.st70.forEach(element => {
|
||||||
$('#st70-last').before('<tr id=""><td>' + element.name + '</td><td>' + element.fitness.toFixed(2) + '</td><td>' + element.desc + '</td></tr>')
|
$('#st70-last').before('<tr id=""><td>' + element.name + '</td><td>' + element.fitness.toFixed(2) + '</td><td>' + element.desc + '</td><td><a href="/leaderboard?id=' + element.id + '&tsp=2&type=txt" target="_blank"><span class="badge badge-primary link">txt</span></a> <a href="/leaderboard?id=' + element.id + '&tsp=2&type=json" target="_blank"><span class="badge badge-success link">json</span></a></td></tr>')
|
||||||
});
|
});
|
||||||
$('#st70_best').text(obj.st70[0].fitness.toFixed(2));
|
$('#st70_best').text(obj.st70[0].fitness.toFixed(2));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (obj.a280.length != 0) {
|
if (obj.a280.length != 0) {
|
||||||
obj.a280.forEach(element => {
|
obj.a280.forEach(element => {
|
||||||
$('#a280-last').before('<tr id=""><td>' + element.name + '</td><td>' + element.fitness.toFixed(2) + '</td><td>' + element.desc + '</td></tr>')
|
$('#a280-last').before('<tr id=""><td>' + element.name + '</td><td>' + element.fitness.toFixed(2) + '</td><td>' + element.desc + '</td><td><a href="/leaderboard?id=' + element.id + '&tsp=30&type=txt" target="_blank"><span class="badge badge-primary link">txt</span></a> <a href="/leaderboard?id=' + element.id + '&tsp=3&type=json" target="_blank"><span class="badge badge-success link">json</span></a></td></tr>')
|
||||||
});
|
});
|
||||||
$('#a280_best').text(obj.a280[0].fitness.toFixed(2));
|
$('#a280_best').text(obj.a280[0].fitness.toFixed(2));
|
||||||
}
|
}
|
||||||
|
|
||||||
if(obj.pcb442.length != 0) {
|
if(obj.pcb442.length != 0) {
|
||||||
obj.pcb442.forEach(element => {
|
obj.pcb442.forEach(element => {
|
||||||
$('#pcb442-last').before('<tr id=""><td>' + element.name + '</td><td>' + element.fitness.toFixed(2) + '</td><td>' + element.desc + '</td></tr>')
|
$('#pcb442-last').before('<tr id=""><td>' + element.name + '</td><td>' + element.fitness.toFixed(2) + '</td><td>' + element.desc + '</td><td><a href="/leaderboard?id=' + element.id + '&tsp=4&type=txt" target="_blank"><span class="badge badge-primary link">txt</span></a> <a href="/leaderboard?id=' + element.id + '&tsp=4&type=json" target="_blank"><span class="badge badge-success link">json</span></a></td></tr>')
|
||||||
});
|
});
|
||||||
$('#pcb442_best').text(obj.pcb442[0].fitness.toFixed(2));
|
$('#pcb442_best').text(obj.pcb442[0].fitness.toFixed(2));
|
||||||
}
|
}
|
||||||
|
|
||||||
if(obj.dsj1000.length != 0) {
|
if(obj.dsj1000.length != 0) {
|
||||||
obj.dsj1000.forEach(element => {
|
obj.dsj1000.forEach(element => {
|
||||||
$('#dsj1000-last').before('<tr id=""><td>' + element.name + '</td><td>' + element.fitness.toFixed(2) + '</td><td>' + element.desc + '</td></tr>')
|
$('#dsj1000-last').before('<tr id=""><td>' + element.name + '</td><td>' + element.fitness.toFixed(2) + '</td><td>' + element.desc + '</td><td><a href="/leaderboard?id=' + element.id + '&tsp=5&type=txt" target="_blank"><span class="badge badge-primary link">txt</span></a> <a href="/leaderboard?id=' + element.id + '&tsp=5&type=json" target="_blank"><span class="badge badge-success link">json</span></a></td></tr>')
|
||||||
});
|
});
|
||||||
$('#dsj1000_best').text(obj.dsj1000[0].fitness.toFixed(2));
|
$('#dsj1000_best').text(obj.dsj1000[0].fitness.toFixed(2));
|
||||||
}
|
}
|
||||||
|
|
@ -110,6 +110,9 @@ function update_your_res(tsp_file, fitness) {
|
||||||
|
|
||||||
if(fitness > 0) {
|
if(fitness > 0) {
|
||||||
$("#" + tsp_file + "_your").text(fitness.toFixed(2));
|
$("#" + tsp_file + "_your").text(fitness.toFixed(2));
|
||||||
|
$("#" + tsp_file + "_download").show();
|
||||||
|
$("#" + tsp_file + "_download a:nth-child(1)").attr("href", "/api/files/result/?id="+ window.id + "&filename=" + tsp_file + ".txt");
|
||||||
|
$("#" + tsp_file + "_download a:nth-child(2)").attr("href", "/api/files/result/?id="+ window.id + "&filename=" + tsp_file + ".json");
|
||||||
enable_btn($("#" + tsp_file + "_submit"))
|
enable_btn($("#" + tsp_file + "_submit"))
|
||||||
}
|
}
|
||||||
else if (fitness == -1)
|
else if (fitness == -1)
|
||||||
|
|
@ -130,7 +133,6 @@ function update_your_res(tsp_file, fitness) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Update personal result
|
// Update personal result
|
||||||
socket.on('result', (res) => {
|
socket.on('result', (res) => {
|
||||||
|
|
||||||
|
|
@ -141,26 +143,32 @@ socket.on('result', (res) => {
|
||||||
res.forEach(e => {
|
res.forEach(e => {
|
||||||
if(e.name === "ulysses16.txt") {
|
if(e.name === "ulysses16.txt") {
|
||||||
my_res.ulysses16.fitness = e.fitness
|
my_res.ulysses16.fitness = e.fitness
|
||||||
|
my_res.ulysses16.solution = e.solution
|
||||||
update_your_res("ulysses16", e.fitness)
|
update_your_res("ulysses16", e.fitness)
|
||||||
}
|
}
|
||||||
if(e.name === "att48.txt") {
|
if(e.name === "att48.txt") {
|
||||||
my_res.att48.fitness = e.fitness
|
my_res.att48.fitness = e.fitness
|
||||||
|
my_res.att48.solution = e.solution
|
||||||
update_your_res("att48", e.fitness)
|
update_your_res("att48", e.fitness)
|
||||||
}
|
}
|
||||||
if(e.name === "st70.txt") {
|
if(e.name === "st70.txt") {
|
||||||
my_res.st70.fitness = e.fitness
|
my_res.st70.fitness = e.fitness
|
||||||
|
my_res.st70.solution = e.solution
|
||||||
update_your_res("st70", e.fitness)
|
update_your_res("st70", e.fitness)
|
||||||
}
|
}
|
||||||
if(e.name === "a280.txt") {
|
if(e.name === "a280.txt") {
|
||||||
my_res.a280.fitness = e.fitness
|
my_res.a280.fitness = e.fitness
|
||||||
|
my_res.a280.solution = e.solution
|
||||||
update_your_res("a280", e.fitness)
|
update_your_res("a280", e.fitness)
|
||||||
}
|
}
|
||||||
if(e.name === "pcb442.txt") {
|
if(e.name === "pcb442.txt") {
|
||||||
my_res.pcb442.fitness = e.fitness
|
my_res.pcb442.fitness = e.fitness
|
||||||
|
my_res.pcb442.solution = e.solution
|
||||||
update_your_res("pcb442", e.fitness)
|
update_your_res("pcb442", e.fitness)
|
||||||
}
|
}
|
||||||
if(e.name === "dsj1000.txt") {
|
if(e.name === "dsj1000.txt") {
|
||||||
my_res.dsj1000.fitness = e.fitness
|
my_res.dsj1000.fitness = e.fitness
|
||||||
|
my_res.dsj1000.solution = e.solution
|
||||||
update_your_res("dsj1000", e.fitness)
|
update_your_res("dsj1000", e.fitness)
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
||||||
22
server.js
22
server.js
|
|
@ -1,4 +1,5 @@
|
||||||
const fs = require('fs')
|
const fs = require('fs')
|
||||||
|
const MAX_LEADERBOARD = 10
|
||||||
|
|
||||||
// Web Server
|
// Web Server
|
||||||
var express = require('express')
|
var express = require('express')
|
||||||
|
|
@ -27,7 +28,7 @@ const path = require('path')
|
||||||
current_path = process.cwd()
|
current_path = process.cwd()
|
||||||
|
|
||||||
// Initialize Leaderboard
|
// Initialize Leaderboard
|
||||||
var leaderboard = {}
|
global.leaderboard = {}
|
||||||
leaderboard.ulysses16 = []
|
leaderboard.ulysses16 = []
|
||||||
leaderboard.att48 = []
|
leaderboard.att48 = []
|
||||||
leaderboard.st70 = []
|
leaderboard.st70 = []
|
||||||
|
|
@ -79,24 +80,24 @@ var update_leaderboard = (obj) => {
|
||||||
leaderboard.dsj1000.push(obj.data)
|
leaderboard.dsj1000.push(obj.data)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Only accept top 10 results
|
// Only accept top MAX_LEADERBOARD results
|
||||||
leaderboard.ulysses16.sort(function(a, b){return a.fitness - b.fitness})
|
leaderboard.ulysses16.sort(function(a, b){return a.fitness - b.fitness})
|
||||||
leaderboard.ulysses16 = leaderboard.ulysses16.slice(0,10)
|
leaderboard.ulysses16 = leaderboard.ulysses16.slice(0, MAX_LEADERBOARD)
|
||||||
|
|
||||||
leaderboard.att48.sort(function(a, b){return a.fitness - b.fitness}).slice(0,10)
|
leaderboard.att48.sort(function(a, b){return a.fitness - b.fitness}).slice(0, MAX_LEADERBOARD)
|
||||||
leaderboard.att48 = leaderboard.att48.slice(0,10)
|
leaderboard.att48 = leaderboard.att48.slice(0, MAX_LEADERBOARD)
|
||||||
|
|
||||||
leaderboard.st70.sort(function(a, b){return a.fitness - b.fitness}).slice(0,10)
|
leaderboard.st70.sort(function(a, b){return a.fitness - b.fitness}).slice(0, MAX_LEADERBOARD)
|
||||||
leaderboard.st70 = leaderboard.st70.slice(0,10)
|
leaderboard.st70 = leaderboard.st70.slice(0, MAX_LEADERBOARD)
|
||||||
|
|
||||||
leaderboard.a280.sort(function(a, b){return a.fitness - b.fitness})
|
leaderboard.a280.sort(function(a, b){return a.fitness - b.fitness})
|
||||||
leaderboard.a280 = leaderboard.a280.slice(0,10)
|
leaderboard.a280 = leaderboard.a280.slice(0, MAX_LEADERBOARD)
|
||||||
|
|
||||||
leaderboard.pcb442.sort(function(a, b){return a.fitness - b.fitness})
|
leaderboard.pcb442.sort(function(a, b){return a.fitness - b.fitness})
|
||||||
leaderboard.pcb442 = leaderboard.pcb442.slice(0,10)
|
leaderboard.pcb442 = leaderboard.pcb442.slice(0, MAX_LEADERBOARD)
|
||||||
|
|
||||||
leaderboard.dsj1000.sort(function(a, b){return a.fitness - b.fitness})
|
leaderboard.dsj1000.sort(function(a, b){return a.fitness - b.fitness})
|
||||||
leaderboard.dsj1000 = leaderboard.dsj1000.slice(0,10)
|
leaderboard.dsj1000 = leaderboard.dsj1000.slice(0, MAX_LEADERBOARD)
|
||||||
|
|
||||||
// Write to json file
|
// Write to json file
|
||||||
write_leaderboard()
|
write_leaderboard()
|
||||||
|
|
@ -300,6 +301,7 @@ io.on('connection', (socket) => {
|
||||||
// Client submited a new result
|
// Client submited a new result
|
||||||
socket.on('submit', (obj) => {
|
socket.on('submit', (obj) => {
|
||||||
console.log('[client][submit]', sessionID)
|
console.log('[client][submit]', sessionID)
|
||||||
|
obj.data.id = sessionID
|
||||||
update_leaderboard(obj)
|
update_leaderboard(obj)
|
||||||
io.emit('leaderboard', leaderboard)
|
io.emit('leaderboard', leaderboard)
|
||||||
})
|
})
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue