]>
iEval git - gruntmaster-data.git/blob - lib/Gruntmaster/App/Command/Add.pm
b161904f620085bf2daeadc182d42e276c318cd2
1 package Gruntmaster
::App
::Command
::Add
;
6 our $VERSION = '5999.000_004';
8 use Gruntmaster
::App
'-command';
11 use Date
::Parse qw
/str2time/;
12 use File
::Slurp qw
/read_file write_file/;
13 use IO
::Prompter
[ -style
=> 'bold', '-stdio', '-verbatim' ];
14 use JSON
::MaybeXS qw
/encode_json/;
16 use Term
::ANSIColor qw
/RED RESET/;
18 use constant LEVEL_VALUES
=> {
25 sub usage_desc
{ '%c [-cp] add id' }
28 contests
=> \
&add_contest
,
29 problems
=> \
&add_problem
,
33 my ($self, $opt, $args) = @_;
35 $self->usage_error('No table selected') unless $self->app->table;
36 $self->usage_error('Don\'t know how to add to this table') unless $TABLE{$self->app->table};
37 $self->usage_error('Wrong number of arguments') if @args != 1;
41 my ($self, $opt, $args) = @_;
43 $TABLE{$self->app->table}->($self, $id);
49 my $name = prompt
'Contest name';
50 my $owner = prompt
'Owner';
51 my $start = str2time prompt
'Start time' or die 'Cannot parse time';
52 my $stop = str2time prompt
'Stop time' or die 'Cannot parse time';
54 db
->insert(contests
=> {id
=> $id, name
=> $name, owner
=> $owner, start
=> $start, stop
=> $stop});
59 my $db = $self->app->db;
61 my $name = prompt
'Problem name';
62 my $private = prompt
('Private?', '-yn') eq 'y';
63 my $contest = prompt
'Contest';
64 my $author = prompt
'Problem author (full name)';
65 my $writer = prompt
'Problem statement writer (full name)';
66 my $owner = prompt
'Problem owner (username)';
67 my $level = prompt
'Problem level', -menu
=> "beginner\neasy\nmedium\nhard";
68 my $value = LEVEL_VALUES
->{$level};
69 my $statement = read_file prompt
'File with problem statement', -complete
=> 'filenames';
70 my $generator = prompt
'Generator', -menu
=> "File\nRun\nUndef";
71 my $runner = prompt
'Runner', -menu
=> "File\nVerifier\nInteractive";
72 my $judge = prompt
'Judge', -menu
=> "Absolute\nPoints";
73 my $testcnt = prompt
'Test count', '-i';
75 my $timeout = prompt
'Time limit (seconds)', '-n';
76 my $olimit = prompt
'Output limit (bytes)', '-i';
77 say 'Memory limits are broken, so I won\'t ask you for one';
79 my (@tests, $gensource, $genformat, $versource, $verformat);
81 if ($generator eq 'Run') {
82 $gensource = read_file prompt
'[Generator::Run] Generator file name', -complete
=> 'filenames';
83 $genformat = prompt
'[Generator::Run] Generator format', -menu
=> [qw
/C CPP MONO JAVA PASCAL PERL PYTHON/];
86 if ($runner eq 'File') {
87 my $default = $judge eq 'Points' ?
10 : 'Ok';
88 $tests[$_ - 1] = prompt
"[Runner::File] Score for test ${_} [$default]", -default => $default for 1 .. $testcnt;
91 if ($runner eq 'Verifier' || $runner eq 'Interactive') {
92 say RED
, 'WARNING: Runner::Interactive is experimental', RESET
if $runner eq 'Interactive';
93 $versource = read_file prompt
"[Runner::$runner] Verifier file name", -complete
=> 'filenames';
94 $verformat = prompt
"[Runner::$runner] Verifier format", -menu
=> [qw
/C CPP MONO JAVA PASCAL PERL PYTHON/];
102 statement
=> $statement,
106 generator
=> $generator,
110 maybe private
=> $private,
111 maybe timeout
=> $timeout,
112 maybe olimit
=> $olimit,
113 maybe gensource
=> $gensource,
114 maybe genformat
=> $genformat,
115 maybe versource
=> $versource,
116 maybe verformat
=> $verformat,
118 $options{tests
} = encode_json \
@tests if @tests;
119 db
->insert(problems
=> \
%options);
120 db
->insert(contest_problems
=> {problem
=> $id, contest
=> $contest}) if $contest;
This page took 0.0609 seconds and 4 git commands to generate.