Skip to content
Snippets Groups Projects
Commit 62dc313c authored by Jiří Kalvoda's avatar Jiří Kalvoda
Browse files

Přidána podpora argumentů programů

parent 15486ac9
Branches
No related tags found
No related merge requests found
......@@ -6,7 +6,8 @@ const int VERSION = 1;
const bool ALLOW_INPUT_MISTAKES = 1;
const bool ALLOW_MISTAKES = 0;
vector<bool> solve(int n, vector<int> input, vector<bool> out)
vector<bool> solve(int n, vector<int> input, vector<bool> out,
int argc, char const* const* argv)
{
vector<int> other = lib::gen_arr_other_car_of_type(n, input);
......
......@@ -3,7 +3,8 @@
const int VERSION = 1;
const bool ALLOW_MISTAKES = 0;
vector<bool> solve(int n, vector<int> input)
vector<bool> solve(int n, vector<int> input,
int argc, char const* const* argv)
{
vector<int> index_of_first_by_type(n, -1);
vector<bool> out(2*n);
......
......@@ -38,7 +38,8 @@ void calc_maxcut(Nd * nd, int nd_size)
}
}
vector<bool> solve(int n, vector<int> input)
vector<bool> solve(int n, vector<int> input,
int argc, char const* const* argv)
{
vector<int> other = lib::gen_arr_other_car_of_type(n, input);
vector<bool> out(2*n);
......
......@@ -47,6 +47,7 @@ namespace lib
namespace internal
{
#define verdict_add(a...) do{ int r = sprintf(verdict+verdict_len, a); assert(r>0); verdict_len += r;}while(false)
void add_to_log_file(char * verdict)
{
char * logfile = getenv("LOGFILE");
......@@ -57,9 +58,15 @@ namespace lib
// Using systemcall for atomicity
close(log_fd);
}
void format_args(char * verdict, int & verdict_len, int argc, char const* const* argv)
{
verdict_add(", \"args\":[");
fo(i,argc) verdict_add("%s\"%s\"", i?", ":"", argv[i]);
// TODO better escapeing
verdict_add("]");
}
void validate_and_format_verdict(int n, vector<int> input, vector<bool> out, char * verdict, int & verdict_len, const char * algo)
{
#define verdict_add(a...) do{ int r = sprintf(verdict+verdict_len, a); assert(r>0); verdict_len += r;}while(false)
verdict_add(", \"algo\":\"%s\", \"version\": %d, \"n\": %d, \"score\":%d",
algo, VERSION, n, calc_score(n, out)
);
......
......@@ -28,6 +28,7 @@ namespace lib
namespace internal
{
void format_args(char * verdict, int & verdict_len, int argc, char const* const* argv);
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 print_data(int n, vector<int> input, vector<bool> out, const char * verdict);
......
......@@ -11,15 +11,15 @@ using namespace internal;
int main(int argc, char ** argv)
{
if(argc<2) return 1;
if(!strcmp(argv[1], "-v"))
if(argc==2 && !strcmp(argv[1], "-v"))
{
printf("%d\n", VERSION);
return 0;
}
assert(argc>=3);
std::uniform_int_distribution<unsigned int> dist(0, 1000000000);
std::random_device urandom("/dev/urandom");
int seed = argc>2?atoi(argv[2]):dist(urandom);
int seed = argv[2][0]?atoi(argv[2]):dist(urandom);
srand(seed);
int n = atoi(argv[1]);
vector<int> in(2*n);
......@@ -27,11 +27,12 @@ int main(int argc, char ** argv)
fo(i,n) in[n+i] = i;
random_shuffle(in.begin(), in.end());
auto out = solve(n, in);
auto out = solve(n, in, argc-3, argv+3);
char verdict[1000];
int verdict_len=0;
verdict_add("{\"_\":0");
format_args(verdict, verdict_len, argc-3, argv+3);
validate_and_format_verdict(n, in, out, verdict, verdict_len, argv[0]);
verdict_add(", \"seed\": %d", seed);
verdict_add("},\n");
......
......@@ -4,4 +4,4 @@
// GIVEN BY ALGORITHM //
// ************************** //
vector<bool> solve(int n, vector<int> input);
vector<bool> solve(int n, vector<int> input, int argc, char const* const* argv);
......@@ -24,11 +24,12 @@ int main(int argc, char ** argv)
load_data(n, in, out, prev_verdict, mistakes);
assert(ALLOW_INPUT_MISTAKES || !mistakes);
out = solve(n, in, out);
out = solve(n, in, out, argc-1, argv+1);
char verdict[1000];
int verdict_len=0;
verdict_add("{\"_\":0");
format_args(verdict, verdict_len, argc-1, argv+1);
validate_and_format_verdict(n, in, out, verdict, verdict_len, argv[0]);
verdict_add(", \"from\": %s", prev_verdict);
verdict_add("},\n");
......
......@@ -5,4 +5,4 @@
// ************************** //
extern const bool ALLOW_INPUT_MISTAKES;
vector<bool> solve(int n, vector<int> input, vector<bool> output);
vector<bool> solve(int n, vector<int> input, vector<bool> output, int argc, char const* const* argv);
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment