This repository has been archived by the owner on Nov 14, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 2
/
languages.yaml
168 lines (160 loc) · 5.65 KB
/
languages.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
# The MIT License (MIT)
#
# Copyright (c) 2010-2019 Kattis and all respective contributors
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
#
#
#
# Language configuration for Kattis Problem Format
# ================================================
#
# The language configuration consists of a dictionary of languages.
# The keys in the dictionary are lower-case alphanumeric identifiers
# (must match the regular expression "[a-z][a-z0-9]*"). Each language
# is in turn a dictionary which may contain the following six keys.
#
# name: String, name of the language.
#
# priority: Integer indicating the tie-breaker priority of this
# language for language detection. See "language detection"
# below. All languages must have distinct priorities.
#
# files: String, space-separated glob patterns indicating what files
# are considered source files.
#
# shebang: Optional, string, for language detection only. See
# semantics under "language detection" below.
#
# compile: Optional, string, command to compile or syntax-check the
# source code.
#
# run: String, command to run a program.
#
#
# Language detection
# ==================
#
# Language detection proceeds as follows:
#
# 1. For each language, a file included in the program is considered
# to be a source file if its name matches the "files" glob for the
# language. If the language specifies a "shebang" entry, the
# first line of the file *must additionally* match the shebang.
#
# 2. For each language, count how many files in the program are source
# files for that language.
#
# 3. The language of the program is the one under which the program
# has the maximum number of source files. In case of ties, the
# language that has the highest priority takes precedence.
#
#
# Entry point type
# ================
#
# A language can have three different entry point types, reflecting
# how a program in the language is started:
#
# binary: the compile command produces an executable file
#
# mainfile: name of source code file to pass to interpreter/runtime
# environment as entry point to the program.
#
# mainclass: similar to mainfile, but at a higher level than a file.
# Typical (only?) examples are Java and Java-based
# languages such as Scala.
#
# The entry point type of a language is implicitly specified by using
# one of the four meta-variables {binary}, {mainfile}, {mainclass},
# {Mainclass} defined below. A language specification *must* use
# exactly one of these four metavariables.
#
#
# Metavariables
# =============
#
# The following metavariables are available for use in the "compile"
# and "run" entries of a language.
#
# {path}: path where the source files are located
#
# {files}: list of all source files
#
# {binary}: arbitrary file name that can be defined by the
# implementation.
#
# {mainfile}: * if the program consists of a single source file,
# {mainfile} equals the name of that source file.
# * if the program contains a source file matching the
# glob "[mM][aA][iI][nN].*", {mainfile} equals the name
# of that file (in case of multiple such files,
# behaviour is undefined).
# * otherwise, {mainfile} equals the lexicographically
# smallest source file name
#
# {mainclass}: equals {mainfile} without filename extension.
#
# {Mainclass}: equals {mainclass}, but first letter capitalized.
#
# {memlim}: memory limit
#
---
c:
name: 'C'
priority: 950
files: '*.c'
compile: 'cc -g -O2 -std=gnu11 -o {binary} {files} -lm -Wall -Wfatal-errors -fdiagnostics-color=always'
run: '{binary}'
cpp:
name: 'C++'
priority: 1000
files: '*.cc *.C *.cpp *.cxx *.c++'
compile: 'c++ -g -O2 -std=gnu++20 -o {binary} {files} -Wall -Wfatal-errors -fdiagnostics-color=always'
run: '{binary}'
csharp:
name: 'C#'
priority: 700
files: '*.cs'
compile: 'mcs -out:{binary}.exe -optimize+ -r:System.Numerics {files}'
run: 'mono {binary}.exe'
java:
name: 'Java'
priority: 800
files: '*.java'
compile: 'javac -encoding UTF-8 -sourcepath {path} -d {path} {files}'
run: 'java -Dfile.encoding=UTF-8 -XX:+UseSerialGC -Xss64m -Xms{memlim}m -Xmx{memlim}m -cp {path} {mainclass}'
javascript:
name: 'JavaScript'
priority: 500
files: '*.js'
compile: 'js24 -c {files}'
run: 'js24 {mainfile}'
python3:
name: 'Python 3'
priority: 901
files: '*.py *.py3'
compile: 'pypy3 -m py_compile {files}'
run: 'pypy3 {mainfile}'
rust:
name: 'Rust'
priority: 575
files: '*.rs'
compile: 'rustc -o{binary} -O --crate-type bin --edition=2018 {files}'
run: '{binary}'