feat: Add support for numerous new programming languages and update the popular language list.
This commit is contained in:
parent
ac3ce38444
commit
dcedf491df
@ -12,8 +12,8 @@ class LanguageResponse(BaseModel):
|
|||||||
name: str
|
name: str
|
||||||
|
|
||||||
|
|
||||||
# Popular languages to show at the top
|
# Popular languages to show at the top (synced with LANGUAGE_MAP in judge.py)
|
||||||
POPULAR_LANGUAGE_IDS = [71, 54, 62, 63, 50, 51, 52, 60, 68, 78] # Python, C++, Java, JS, C, C#, etc.
|
POPULAR_LANGUAGE_IDS = [71, 54, 50, 62, 63, 73, 60, 78, 51, 74] # Python, C++, C, Java, JS, Rust, Go, Kotlin, C#, TS
|
||||||
|
|
||||||
|
|
||||||
@router.get("/", response_model=list[LanguageResponse])
|
@router.get("/", response_model=list[LanguageResponse])
|
||||||
|
|||||||
@ -2,31 +2,53 @@ import httpx
|
|||||||
from app.config import settings
|
from app.config import settings
|
||||||
|
|
||||||
|
|
||||||
# Mapping Judge0 language_id to Piston language name and version
|
# Mapping language_id to Piston language name and version
|
||||||
# Updated with latest available versions in Piston
|
# Synced with languages installed in entrypoint.sh
|
||||||
LANGUAGE_MAP = {
|
LANGUAGE_MAP = {
|
||||||
# Python
|
# Core languages
|
||||||
71: ("python", "3.12.0"), # Python 3.12 LTS
|
71: ("python", "3.12.0"),
|
||||||
70: ("python", "3.12.0"), # Python 2 -> redirect to Python 3
|
50: ("c", "10.2.0"),
|
||||||
|
54: ("c++", "10.2.0"),
|
||||||
|
62: ("java", "15.0.2"),
|
||||||
|
63: ("javascript", "20.11.1"),
|
||||||
|
|
||||||
# C/C++
|
# Systems programming
|
||||||
50: ("c", "10.2.0"), # C (GCC 10.2.0)
|
60: ("go", "1.16.2"),
|
||||||
54: ("c++", "10.2.0"), # C++ (GCC 10.2.0)
|
73: ("rust", "1.68.2"),
|
||||||
|
|
||||||
# Java
|
# JVM languages
|
||||||
62: ("java", "15.0.2"), # Java (OpenJDK 15.0.2)
|
78: ("kotlin", "1.8.20"),
|
||||||
|
81: ("scala", "3.2.2"),
|
||||||
|
|
||||||
# JavaScript/Node.js
|
# .NET
|
||||||
63: ("javascript", "20.11.1"), # Node.js 20.11.1
|
51: ("csharp", "5.0.201"),
|
||||||
|
|
||||||
# Go
|
# Scripting
|
||||||
60: ("go", "1.16.2"), # Go 1.16.2
|
72: ("ruby", "3.0.1"),
|
||||||
|
85: ("perl", "5.36.0"),
|
||||||
|
68: ("php", "8.2.3"),
|
||||||
|
64: ("lua", "5.4.4"),
|
||||||
|
|
||||||
# Rust
|
# Functional
|
||||||
73: ("rust", "1.68.2"), # Rust 1.68.2
|
61: ("haskell", "9.0.1"),
|
||||||
|
65: ("ocaml", "4.12.0"),
|
||||||
|
90: ("elixir", "1.11.3"),
|
||||||
|
86: ("clojure", "1.10.3"),
|
||||||
|
95: ("racket", "8.3.0"),
|
||||||
|
|
||||||
# Kotlin
|
# Other
|
||||||
78: ("kotlin", "1.8.20"), # Kotlin 1.8.20
|
67: ("pascal", "3.2.2"),
|
||||||
|
59: ("fortran", "10.2.0"),
|
||||||
|
83: ("swift", "5.3.3"),
|
||||||
|
74: ("typescript", "5.0.3"),
|
||||||
|
91: ("nim", "1.6.2"),
|
||||||
|
96: ("zig", "0.10.1"),
|
||||||
|
56: ("d", "10.2.0"),
|
||||||
|
69: ("prolog", "8.2.4"),
|
||||||
|
|
||||||
|
# Low-level
|
||||||
|
45: ("nasm", "2.15.5"),
|
||||||
|
46: ("bash", "5.1.0"),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -87,6 +109,27 @@ class JudgeService:
|
|||||||
"go": "Go",
|
"go": "Go",
|
||||||
"rust": "Rust",
|
"rust": "Rust",
|
||||||
"kotlin": "Kotlin",
|
"kotlin": "Kotlin",
|
||||||
|
"scala": "Scala",
|
||||||
|
"csharp": "C#",
|
||||||
|
"ruby": "Ruby",
|
||||||
|
"perl": "Perl",
|
||||||
|
"php": "PHP",
|
||||||
|
"lua": "Lua",
|
||||||
|
"haskell": "Haskell",
|
||||||
|
"ocaml": "OCaml",
|
||||||
|
"elixir": "Elixir",
|
||||||
|
"clojure": "Clojure",
|
||||||
|
"racket": "Racket",
|
||||||
|
"pascal": "Pascal",
|
||||||
|
"fortran": "Fortran",
|
||||||
|
"swift": "Swift",
|
||||||
|
"typescript": "TypeScript",
|
||||||
|
"nim": "Nim",
|
||||||
|
"zig": "Zig",
|
||||||
|
"d": "D",
|
||||||
|
"prolog": "Prolog",
|
||||||
|
"nasm": "Assembly (NASM)",
|
||||||
|
"bash": "Bash",
|
||||||
}
|
}
|
||||||
display_name = name_map.get(piston_lang, piston_lang.title())
|
display_name = name_map.get(piston_lang, piston_lang.title())
|
||||||
|
|
||||||
@ -137,6 +180,11 @@ class JudgeService:
|
|||||||
ext_map = {
|
ext_map = {
|
||||||
"python": "py", "c": "c", "c++": "cpp", "java": "java",
|
"python": "py", "c": "c", "c++": "cpp", "java": "java",
|
||||||
"javascript": "js", "go": "go", "rust": "rs", "kotlin": "kt",
|
"javascript": "js", "go": "go", "rust": "rs", "kotlin": "kt",
|
||||||
|
"scala": "scala", "csharp": "cs", "ruby": "rb", "perl": "pl",
|
||||||
|
"php": "php", "lua": "lua", "haskell": "hs", "ocaml": "ml",
|
||||||
|
"elixir": "exs", "clojure": "clj", "racket": "rkt", "pascal": "pas",
|
||||||
|
"fortran": "f90", "swift": "swift", "typescript": "ts", "nim": "nim",
|
||||||
|
"zig": "zig", "d": "d", "prolog": "pl", "nasm": "asm", "bash": "sh",
|
||||||
}
|
}
|
||||||
ext = ext_map.get(language, "txt")
|
ext = ext_map.get(language, "txt")
|
||||||
filename = f"main.{ext}"
|
filename = f"main.{ext}"
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user