dev: process language information from judge0

This commit is contained in:
KernelDeimos 2025-01-27 14:50:40 -05:00
parent ecc89678d1
commit 4d826c0602
2 changed files with 324 additions and 0 deletions

View File

@ -0,0 +1,70 @@
const fs = require('fs');
const sample = JSON.parse(fs.readFileSync('sample.json', 'utf8'));
const parse_language_name = (name) => {
// Possible formats:
// "Name Of Language"
// "Name Of Language (Version)"
// "Name Of Language (Runtime Version)"
// "Name of Language (Runtime Version, Runtime Version)"
if ( name.indexOf('(') === -1 ) {
return { language: name, versions: {} };
}
const language = name.slice(0, name.indexOf('(')).trim();
const parens = name.slice(name.indexOf('(') + 1, name.indexOf(')'))
const versions = parens.split(',').map(versionLine => {
const parts = versionLine.split(' ');
if ( parts.length === 1 ) {
return { [language]: parts[0].trim() };
}
const [key, value] = parts;
return { [key.trim().toLowerCase()]: value.trim() };
}).reduce((acc, cur) => ({ ...acc, ...cur }), {});
return { language, versions };
};
const normalizeName = name => {
name = name.toLowerCase();
if ( name === 'node.js' ) name = 'node';
if ( name === 'assembly' ) name = 'asm';
if ( name === 'visual basic.net' ) name = 'vb.net';
// TODO: what kind of executable? ELF binary? Windows executable?
// if ( name === 'executable' ) name = 'exe';
return name;
};
const output = [];
for ( const item of sample ) {
const { id, name } = item;
let { language, versions } = parse_language_name(name);
language = normalizeName(language);
{
const newVersions = {};
for ( const key in versions ) {
newVersions[normalizeName(key)] = versions[key];
}
versions = newVersions;
}
const onlyOne = Object.keys(versions).length === 1;
if ( versions.version && onlyOne ) {
output.push({
id,
language,
versions,
});
continue;
}
output.push({
id,
language,
versions,
});
}
console.log(JSON.stringify(output, null, 2));

View File

@ -0,0 +1,254 @@
[
{
"id": 45,
"name": "Assembly (NASM 2.14.02)"
},
{
"id": 46,
"name": "Bash (5.0.0)"
},
{
"id": 47,
"name": "Basic (FBC 1.07.1)"
},
{
"id": 104,
"name": "C (Clang 18.1.8)"
},
{
"id": 75,
"name": "C (Clang 7.0.1)"
},
{
"id": 76,
"name": "C++ (Clang 7.0.1)"
},
{
"id": 103,
"name": "C (GCC 14.1.0)"
},
{
"id": 105,
"name": "C++ (GCC 14.1.0)"
},
{
"id": 48,
"name": "C (GCC 7.4.0)"
},
{
"id": 52,
"name": "C++ (GCC 7.4.0)"
},
{
"id": 49,
"name": "C (GCC 8.3.0)"
},
{
"id": 53,
"name": "C++ (GCC 8.3.0)"
},
{
"id": 50,
"name": "C (GCC 9.2.0)"
},
{
"id": 54,
"name": "C++ (GCC 9.2.0)"
},
{
"id": 86,
"name": "Clojure (1.10.1)"
},
{
"id": 51,
"name": "C# (Mono 6.6.0.161)"
},
{
"id": 77,
"name": "COBOL (GnuCOBOL 2.2)"
},
{
"id": 55,
"name": "Common Lisp (SBCL 2.0.0)"
},
{
"id": 90,
"name": "Dart (2.19.2)"
},
{
"id": 56,
"name": "D (DMD 2.089.1)"
},
{
"id": 57,
"name": "Elixir (1.9.4)"
},
{
"id": 58,
"name": "Erlang (OTP 22.2)"
},
{
"id": 44,
"name": "Executable"
},
{
"id": 87,
"name": "F# (.NET Core SDK 3.1.202)"
},
{
"id": 59,
"name": "Fortran (GFortran 9.2.0)"
},
{
"id": 60,
"name": "Go (1.13.5)"
},
{
"id": 95,
"name": "Go (1.18.5)"
},
{
"id": 88,
"name": "Groovy (3.0.3)"
},
{
"id": 61,
"name": "Haskell (GHC 8.8.1)"
},
{
"id": 96,
"name": "JavaFX (JDK 17.0.6, OpenJFX 22.0.2)"
},
{
"id": 91,
"name": "Java (JDK 17.0.6)"
},
{
"id": 62,
"name": "Java (OpenJDK 13.0.1)"
},
{
"id": 63,
"name": "JavaScript (Node.js 12.14.0)"
},
{
"id": 93,
"name": "JavaScript (Node.js 18.15.0)"
},
{
"id": 97,
"name": "JavaScript (Node.js 20.17.0)"
},
{
"id": 102,
"name": "JavaScript (Node.js 22.08.0)"
},
{
"id": 78,
"name": "Kotlin (1.3.70)"
},
{
"id": 64,
"name": "Lua (5.3.5)"
},
{
"id": 89,
"name": "Multi-file program"
},
{
"id": 79,
"name": "Objective-C (Clang 7.0.1)"
},
{
"id": 65,
"name": "OCaml (4.09.0)"
},
{
"id": 66,
"name": "Octave (5.1.0)"
},
{
"id": 67,
"name": "Pascal (FPC 3.0.4)"
},
{
"id": 85,
"name": "Perl (5.28.1)"
},
{
"id": 68,
"name": "PHP (7.4.1)"
},
{
"id": 98,
"name": "PHP (8.3.11)"
},
{
"id": 43,
"name": "Plain Text"
},
{
"id": 69,
"name": "Prolog (GNU Prolog 1.4.5)"
},
{
"id": 70,
"name": "Python (2.7.17)"
},
{
"id": 92,
"name": "Python (3.11.2)"
},
{
"id": 100,
"name": "Python (3.12.5)"
},
{
"id": 71,
"name": "Python (3.8.1)"
},
{
"id": 80,
"name": "R (4.0.0)"
},
{
"id": 99,
"name": "R (4.4.1)"
},
{
"id": 72,
"name": "Ruby (2.7.0)"
},
{
"id": 73,
"name": "Rust (1.40.0)"
},
{
"id": 81,
"name": "Scala (2.13.2)"
},
{
"id": 82,
"name": "SQL (SQLite 3.27.2)"
},
{
"id": 83,
"name": "Swift (5.2.3)"
},
{
"id": 74,
"name": "TypeScript (3.7.4)"
},
{
"id": 94,
"name": "TypeScript (5.0.3)"
},
{
"id": 101,
"name": "TypeScript (5.6.2)"
},
{
"id": 84,
"name": "Visual Basic.Net (vbnc 0.0.0.5943)"
}
]