Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
B
Binary paint shop problem
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Deploy
Releases
Package registry
Model registry
Operate
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
GitLab community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Jiří Kalvoda
Binary paint shop problem
Commits
1171ede0
Commit
1171ede0
authored
2 years ago
by
Jiří Kalvoda
Browse files
Options
Downloads
Patches
Plain Diff
Userdata a resources v JSONu, u programu je přesměrovaný stdout do
stderru
parent
bc9b3b25
No related branches found
No related tags found
No related merge requests found
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
lib.cpp
+28
-1
28 additions, 1 deletion
lib.cpp
lib.h
+3
-1
3 additions, 1 deletion
lib.h
main.cpp
+10
-1
10 additions, 1 deletion
main.cpp
pipe.cpp
+3
-1
3 additions, 1 deletion
pipe.cpp
with
44 additions
and
4 deletions
lib.cpp
+
28
−
1
View file @
1171ede0
...
@@ -7,6 +7,7 @@
...
@@ -7,6 +7,7 @@
#include
<fcntl.h>
#include
<fcntl.h>
#include
<unistd.h>
#include
<unistd.h>
#include
<stdarg.h>
#include
<stdarg.h>
#include
<sys/resource.h>
namespace
lib
namespace
lib
{
{
...
@@ -75,6 +76,8 @@ namespace lib
...
@@ -75,6 +76,8 @@ namespace lib
namespace
internal
namespace
internal
{
{
#define verdict_add(a...) do{ int r = sprintf(verdict+verdict_len, a); assert(r>0); verdict_len += r;}while(false)
#define verdict_add(a...) do{ int r = sprintf(verdict+verdict_len, a); assert(r>0); verdict_len += r;}while(false)
std
::
vector
<
std
::
pair
<
std
::
string
,
std
::
string
>>
user_data
;
void
add_to_log_file
(
char
*
verdict
)
void
add_to_log_file
(
char
*
verdict
)
{
{
char
*
logfile
=
getenv
(
"LOGFILE"
);
char
*
logfile
=
getenv
(
"LOGFILE"
);
...
@@ -92,12 +95,27 @@ namespace lib
...
@@ -92,12 +95,27 @@ namespace lib
// TODO better escapeing
// TODO better escapeing
verdict_add
(
"]"
);
verdict_add
(
"]"
);
}
}
void
validate_and_format_verdict
(
int
n
,
vector
<
int
>
input
,
vector
<
bool
>
out
,
char
*
verdict
,
int
&
verdict_len
,
const
char
*
algo
)
void
validate_and_format_verdict
(
int
n
,
vector
<
int
>
input
,
vector
<
bool
>
out
,
char
*
verdict
,
int
&
verdict_len
,
const
char
*
algo
,
int
wallclock_s
)
{
{
verdict_add
(
",
\"
algo
\"
:
\"
%s
\"
,
\"
version
\"
: %d,
\"
n
\"
: %d,
\"
score
\"
:%d"
,
verdict_add
(
",
\"
algo
\"
:
\"
%s
\"
,
\"
version
\"
: %d,
\"
n
\"
: %d,
\"
score
\"
:%d"
,
algo
,
VERSION
,
n
,
calc_score
(
n
,
out
)
algo
,
VERSION
,
n
,
calc_score
(
n
,
out
)
);
);
verdict_add
(
",
\"
data
\"
: {
\"
_
\"
:0"
);
for
(
auto
it
:
user_data
)
{
verdict_add
(
",
\"
%s
\"
: %s"
,
it
.
first
.
c_str
(),
it
.
second
.
c_str
());
}
verdict_add
(
"}"
);
{
verdict_add
(
",
\"
resources
\"
: {"
);
struct
rusage
rus
;
getrusage
(
RUSAGE_SELF
,
&
rus
);
verdict_add
(
"
\"
memory_kb
\"
:%d"
,
rus
.
ru_maxrss
);
verdict_add
(
",
\"
cpu_time_s
\"
:%d"
,
rus
.
ru_utime
.
tv_sec
);
verdict_add
(
",
\"
wallclock_s
\"
:%d"
,
wallclock_s
);
verdict_add
(
"}"
);
}
if
(
ALLOW_MISTAKES
)
if
(
ALLOW_MISTAKES
)
{
{
verdict_add
(
",
\"
mistakes
\"
: %d"
,
calc_mistakes
(
n
,
input
,
out
));
verdict_add
(
",
\"
mistakes
\"
: %d"
,
calc_mistakes
(
n
,
input
,
out
));
...
@@ -155,4 +173,13 @@ namespace lib
...
@@ -155,4 +173,13 @@ namespace lib
assert
(
fread
(
input
.
data
(),
sizeof
(
int
),
2
*
n
,
stdin
)
==
2
*
n
);
assert
(
fread
(
input
.
data
(),
sizeof
(
int
),
2
*
n
,
stdin
)
==
2
*
n
);
}
}
}
}
void
log_data
(
const
char
*
key
,
const
char
*
fmt
,
...)
{
int
buffer_len
=
1000
;
char
buffer
[
buffer_len
+
1
];
va_list
args
;
va_start
(
args
,
fmt
);
vsnprintf
(
buffer
,
buffer_len
,
fmt
,
args
);
internal
::
user_data
.
push_back
(
std
::
make_pair
(
std
::
string
(
key
),
std
::
string
(
buffer
)));
}
}
}
This diff is collapsed.
Click to expand it.
lib.h
+
3
−
1
View file @
1171ede0
...
@@ -28,11 +28,13 @@ namespace lib
...
@@ -28,11 +28,13 @@ namespace lib
std
::
pair
<
FILE
*
,
FILE
*>
dualpopen
(
const
char
*
cmd
);
std
::
pair
<
FILE
*
,
FILE
*>
dualpopen
(
const
char
*
cmd
);
void
log_data
(
const
char
*
key
,
const
char
*
fmt
,
...);
namespace
internal
namespace
internal
{
{
void
format_args
(
char
*
verdict
,
int
&
verdict_len
,
int
argc
,
char
const
*
const
*
argv
);
void
format_args
(
char
*
verdict
,
int
&
verdict_len
,
int
argc
,
char
const
*
const
*
argv
);
void
add_to_log_file
(
char
*
verdict
);
void
add_to_log_file
(
char
*
verdict
);
void
validate_and_format_verdict
(
int
n
,
vector
<
int
>
input
,
vector
<
bool
>
out
,
char
*
verdict
,
int
&
verdict_len
,
const
char
*
algo
);
void
validate_and_format_verdict
(
int
n
,
vector
<
int
>
input
,
vector
<
bool
>
out
,
char
*
verdict
,
int
&
verdict_len
,
const
char
*
algo
,
int
wallclock_s
);
void
print_data
(
int
n
,
vector
<
int
>
input
,
vector
<
bool
>
out
,
const
char
*
verdict
);
void
print_data
(
int
n
,
vector
<
int
>
input
,
vector
<
bool
>
out
,
const
char
*
verdict
);
void
load_data
(
int
&
n
,
vector
<
int
>
&
input
,
vector
<
bool
>
&
out
,
char
*&
verdict
,
bool
&
mistakes
);
void
load_data
(
int
&
n
,
vector
<
int
>
&
input
,
vector
<
bool
>
&
out
,
char
*&
verdict
,
bool
&
mistakes
);
...
...
This diff is collapsed.
Click to expand it.
main.cpp
+
10
−
1
View file @
1171ede0
...
@@ -3,6 +3,7 @@
...
@@ -3,6 +3,7 @@
#include
<algorithm>
#include
<algorithm>
#include
<cassert>
#include
<cassert>
#include
<cstring>
#include
<cstring>
#include
<unistd.h>
#define verdict_add(a...) do{ int r = sprintf(verdict+verdict_len, a); assert(r>0); verdict_len += r;}while(false)
#define verdict_add(a...) do{ int r = sprintf(verdict+verdict_len, a); assert(r>0); verdict_len += r;}while(false)
...
@@ -27,13 +28,21 @@ int main(int argc, char ** argv)
...
@@ -27,13 +28,21 @@ int main(int argc, char ** argv)
fo
(
i
,
n
)
in
[
n
+
i
]
=
i
;
fo
(
i
,
n
)
in
[
n
+
i
]
=
i
;
random_shuffle
(
in
.
begin
(),
in
.
end
());
random_shuffle
(
in
.
begin
(),
in
.
end
());
fflush
(
stdout
);
int
old_stdout
=
dup
(
1
);
dup2
(
2
,
1
);
long
long
time_before
=
time
(
0
);
auto
out
=
solve
(
n
,
in
,
argc
-
3
,
argv
+
3
);
auto
out
=
solve
(
n
,
in
,
argc
-
3
,
argv
+
3
);
long
long
time_after
=
time
(
0
);
fflush
(
stdout
);
dup2
(
old_stdout
,
1
);
char
verdict
[
1000
];
char
verdict
[
1000
];
int
verdict_len
=
0
;
int
verdict_len
=
0
;
verdict_add
(
"{
\"
_
\"
:0"
);
verdict_add
(
"{
\"
_
\"
:0"
);
format_args
(
verdict
,
verdict_len
,
argc
-
3
,
argv
+
3
);
format_args
(
verdict
,
verdict_len
,
argc
-
3
,
argv
+
3
);
validate_and_format_verdict
(
n
,
in
,
out
,
verdict
,
verdict_len
,
argv
[
0
]);
validate_and_format_verdict
(
n
,
in
,
out
,
verdict
,
verdict_len
,
argv
[
0
]
,
time_after
-
time_before
);
verdict_add
(
",
\"
seed
\"
: %d"
,
seed
);
verdict_add
(
",
\"
seed
\"
: %d"
,
seed
);
verdict_add
(
"},
\n
"
);
verdict_add
(
"},
\n
"
);
...
...
This diff is collapsed.
Click to expand it.
pipe.cpp
+
3
−
1
View file @
1171ede0
...
@@ -24,13 +24,15 @@ int main(int argc, char ** argv)
...
@@ -24,13 +24,15 @@ int main(int argc, char ** argv)
load_data
(
n
,
in
,
out
,
prev_verdict
,
mistakes
);
load_data
(
n
,
in
,
out
,
prev_verdict
,
mistakes
);
assert
(
ALLOW_INPUT_MISTAKES
||
!
mistakes
);
assert
(
ALLOW_INPUT_MISTAKES
||
!
mistakes
);
long
long
time_before
=
time
(
0
);
out
=
solve
(
n
,
in
,
out
,
argc
-
1
,
argv
+
1
);
out
=
solve
(
n
,
in
,
out
,
argc
-
1
,
argv
+
1
);
long
long
time_after
=
time
(
0
);
char
verdict
[
1000
];
char
verdict
[
1000
];
int
verdict_len
=
0
;
int
verdict_len
=
0
;
verdict_add
(
"{
\"
_
\"
:0"
);
verdict_add
(
"{
\"
_
\"
:0"
);
format_args
(
verdict
,
verdict_len
,
argc
-
1
,
argv
+
1
);
format_args
(
verdict
,
verdict_len
,
argc
-
1
,
argv
+
1
);
validate_and_format_verdict
(
n
,
in
,
out
,
verdict
,
verdict_len
,
argv
[
0
]);
validate_and_format_verdict
(
n
,
in
,
out
,
verdict
,
verdict_len
,
argv
[
0
]
,
time_after
-
time_before
);
verdict_add
(
",
\"
from
\"
: %s"
,
prev_verdict
);
verdict_add
(
",
\"
from
\"
: %s"
,
prev_verdict
);
verdict_add
(
"},
\n
"
);
verdict_add
(
"},
\n
"
);
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment