6 releases
0.4.0 | May 6, 2021 |
---|---|
0.3.2 | Mar 16, 2021 |
0.3.1 | Aug 18, 2020 |
0.3.0 | Jul 21, 2020 |
0.2.2 | May 19, 2020 |
#3 in #judge
34KB
896 lines
ojcmp
online judge comparer
Status
Maintaining 0.4.0
Install
cargo install ojcmp
Build
cargo build --release
Install by cargo
cargo install --path .
Install manually
cp target/release/ojcmp /usr/bin
Usage
ojcmp 0.4.0
Nugine <nugine@foxmail.com>
USAGE:
ojcmp <SUBCOMMAND>
FLAGS:
-h, --help Prints help information
-V, --version Prints version information
SUBCOMMANDS:
float Float compare
help Prints this message or the help of the given subcommand(s)
normal Normal compare
strict Strict compare
ojcmp-normal 0.4.0
Normal compare
USAGE:
ojcmp normal [FLAGS] [OPTIONS] <--std <path>|--std-fd <fd>> <--user <path>|--user-fd <fd>>
FLAGS:
-h, --help Prints help information
-q, --quiet No output printed to stdout or stderr
-a, --read-all Reads all bytes of user file even if it's already WA
-V, --version Prints version information
OPTIONS:
-b, --buffer-size <bytes> Buffer size (in bytes) for both std and user file [default: 65536]
-s, --std <path> Std file path
--std-fd <fd> Std file descriptor
-u, --user <path> User file path
--user-fd <fd> User file descriptor
Return Value
type | value |
---|---|
exit_code (AC) | 0 |
exit_code (WA) | 1 |
exit_code (PE) | 2 |
exit_code (error) | 101 |
stdout | "AC" / "WA" / "PE" |
stderr | error message |
Current Implementation
Mode: Normal
trim_end(file)
judge!(AC, b"1\r\n\r\n\r\n", b"1 ");
for each line, trim_end(line)
judge!(AC, b"1 \n", b"1");
for each line, check spaces between non-space chars
judge!(PE, b"1 3\n", b"1 3\n");
Mode: Strict
User file must have the same bytes with std file.
The two byte streams must be exactly the same.
There is no "PE" in this mode.
Mode: Float
Compare two streams of float numbers which are splitted by ascii whitespaces.
Parse any float number as f64 (aka double
in C language).
Ascii whitespaces between two float numbers are considered as a single separator symbol.
Use CLI option --eps
to specify eps value, for example --eps 1e-3
.
There is no "PE" in this mode.
Change Log
- v0.4.0 Allow passing file fd. Change return value to indicate comparison result.
- v0.3.2 Fix unsoundness in ByteReader.
- v0.3.1 Fix performance regression since v0.2.0. Allow unsafe code.
- v0.3.0 Forbid unsafe code. Use subcommands for different modes.
- v0.2.2 Fix bug in nan handling. (yank v0.2.1)
- v0.2.1 Add spj_float mode. (yanked)
- v0.2.0 Add strict mode. No break changes.
- v0.1.3 No functional changes
- v0.1.2 Fix algorithm bug
- v0.1.1 Use unsafe static buffer
Dependencies
~4MB
~71K SLoC