]>
iEval git - plack-app-gruntmaster.git/blob - gruntmaster-problem
5 use Gruntmaster
::Page
::Submit
;
7 use IO
::Prompter
[ -style
=> 'bold', '-stdio', '-verbatim' ];
8 use File
::Slurp qw
/read_file/;
9 use Term
::ANSIColor qw
/RED RESET/;
10 use Getopt
::Long qw
/GetOptions/;
12 ##################################################
21 my ($meta, $name, $prefix) = @_;
22 my $filename = prompt
'$prefix filename', -complete
=> 'filenames';
23 $meta->{files
}{$name}{content
} = read_file
$filename;
24 $meta->{files
}{$name}{format
} = prompt
'$prefix format', -menu
=> Gruntmaster
::Page
::Submit
::FORMATS
;
25 $meta->{files
}{$name}{name
} = prompt
"$prefix filename [$filename]", -default => $filename;
30 my $name = prompt
'Problem name';
31 my $author = prompt
'Problem author (full name)';
32 my $owner = prompt
'Problem owner (username)';
33 my $level = prompt
'Problem level', -menu
=> "beginner\neasy\nmedium\nhard";
34 my $statement = read_file prompt
'File with problem statement', -complete
=> 'filenames';
36 $meta{generator
} = prompt
'Generator', -menu
=> "File\nRun\nUndef";
37 $meta{runner
} = prompt
'Runner', -menu
=> "File\nVerifier\nInteractive";
38 $meta{judge
} = prompt
'Judge', -menu
=> "Absolute\nPoints";
39 $meta{testcnt
} = prompt
'Test count', '-i';
41 $meta{timeout
} = prompt
'Time limit (seconds)', '-n';
42 delete $meta{timeout
} unless $meta{timeout
};
43 $meta{olimit
} = prompt
'Output limit (bytes)', '-i';
44 delete $meta{olimit
} unless $meta{olimit
};
45 say 'Memory limits are broken, so I won\'t ask you for one';
47 if ($meta{generator
} eq 'File') {
48 my $prefix = prompt
'[Generator::File] Input file prefix';
49 $meta{infile
}[$_ - 1] = read_file
"$prefix$_.in" for 1 .. $meta{testcnt
};
52 prompt_file \
%meta, gen
=> '[Generator::Run] Generator' if $meta{generator
} eq 'Run';
54 if ($meta{runner
} eq 'File') {
55 my $prefix = prompt
'[Runner::File] Output file prefix';
56 $meta{okfile
}[$_ - 1] = read_file
"$prefix$_.ok" for 1 .. $meta{testcnt
};
57 $meta{tests
}[$_ - 1] = prompt
"[Runner::File] Score for test ${_} [10]", '-i', -default => 10 for 1 .. $meta{testcnt
};
60 prompt_file \
%meta, ver
=> '[Runner::Verifier] Verifier' if $meta{runner
} eq 'Verifier';
62 if ($meta{runner
} eq 'Interactive') {
63 say RED
, 'WARNING: Runner::Interactive is experimental', RESET
;
64 prompt_file
int => '[Runner::Interactive] Interactive verifier';
67 insert_problem
$id => name
=> $name, level
=> $level, statement
=> $statement, author
=> $author, owner
=> $owner;
68 set_problem_meta
$id => \
%meta;
69 PUBLISH genpage
=> $contest ?
"ct/$contest/pb/index.html" : 'pb/index.html';
70 PUBLISH genpage
=> $contest ?
"ct/$contest/pb/$id.html" : "pb/$id.html";
75 GetOptions
( 'file!' => \
$file );
76 my ($id, %values) = @ARGV;
77 %values = map { $_ => scalar read_file
$values{$_} } keys %values if $file;
78 edit_problem
$id => %values;
79 PUBLISH genpage
=> 'pb/index.html';
80 PUBLISH genpage
=> "pb/$id.html";
90 PUBLISH genpage
=> $contest ?
"ct/$contest/pb/index.html" : 'pb/index.html';
94 local $_ = shift or goto &cmd_list
;
97 ##################################################
99 GetOptions
( 'contest=s' => \
$contest );
100 local $Gruntmaster::Data
::contest
= $contest;
101 my $cmd = 'cmd_' . shift;
102 cmd_help
unless exists $main::{$cmd};
104 $cmd->(@ARGV) if exists $main::{$cmd};
113 gruntmaster-problem - shell interface to Gruntmaster 6000 problems
117 gruntmaster-problem add problem_id
118 gruntmaster-problem list
119 gruntmaster-problem rm problem_id
120 gruntmaster-problem show problem_id
This page took 0.062862 seconds and 4 git commands to generate.