RandomNumber: add structured answer.
parent
9060211316
commit
200988a929
|
@ -20,49 +20,35 @@ handle query_lc => sub {
|
||||||
srand();
|
srand();
|
||||||
# Random number.
|
# Random number.
|
||||||
# q_check (as opposed to q_internal) Allows for decimals.
|
# q_check (as opposed to q_internal) Allows for decimals.
|
||||||
if ( $_ =~ /^\!?(?:rand(?:om|)(?: num(?:ber|)|)(?: between|))( [\d\.]+|)(?: and|)( [\d\.]+|)$/i ) {
|
return unless ($_ =~ /^\!?(?:rand(?:om|)(?: num(?:ber|)|)(?: between|))( [\d\.]+|)(?: and|)( [\d\.]+|)$/i);
|
||||||
|
|
||||||
# For debugging.
|
my $start = $1 || 0;
|
||||||
# warn qq($1\t$2);
|
my $end = $2 || 0;
|
||||||
|
|
||||||
my $start = $1 || 0;
|
$start = 1000000000 if $start > 1000000000;
|
||||||
my $end = $2 || 0;
|
$start = 0 if $start < 0;
|
||||||
|
$start += 0;
|
||||||
|
|
||||||
# Messes up decimals.
|
$end = 1000000000 if $end > 1000000000;
|
||||||
# $start = int($start) if $start;
|
$end = 0 if $end < 0;
|
||||||
# $end= int($end) if $end;
|
$end = 1 if !$end;
|
||||||
|
$end += 0;
|
||||||
|
|
||||||
$start = 1000000000 if $start > 1000000000;
|
($end, $start) = ($start, $end) if ($start > $end);
|
||||||
$start = 0 if $start < 0;
|
|
||||||
|
|
||||||
$end = 1000000000 if $end > 1000000000;
|
my $rand = rand;
|
||||||
$end = 0 if $end < 0;
|
|
||||||
|
|
||||||
$end = $start if $end && $end < $start;
|
if ($start && $end) {
|
||||||
|
$rand *= ($end - $start + 1);
|
||||||
# For debugging.
|
$rand = int($rand) + $start;
|
||||||
# warn qq($start\t$end);
|
|
||||||
|
|
||||||
my $rand = rand;
|
|
||||||
|
|
||||||
if ( $start && !$end ) {
|
|
||||||
$rand *= $start;
|
|
||||||
$rand = int($rand) + 1;
|
|
||||||
|
|
||||||
}
|
|
||||||
elsif ( $start && $end && $start == $end ) {
|
|
||||||
$rand = $start;
|
|
||||||
|
|
||||||
}
|
|
||||||
elsif ( $start && $end ) {
|
|
||||||
$rand *= ( $end - $start + 1 );
|
|
||||||
$rand = int($rand) + $start;
|
|
||||||
}
|
|
||||||
|
|
||||||
# Add IP for display.
|
|
||||||
return $rand ." (random number)";
|
|
||||||
}
|
}
|
||||||
return;
|
|
||||||
|
return $rand . " (random number)",
|
||||||
|
structured_answer => {
|
||||||
|
input => [$start, $end],
|
||||||
|
operation => 'random number between',
|
||||||
|
result => $rand
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
1;
|
1;
|
||||||
|
|
|
@ -9,12 +9,23 @@ zci answer_type => 'rand';
|
||||||
zci is_cached => 0;
|
zci is_cached => 0;
|
||||||
|
|
||||||
ddg_goodie_test(
|
ddg_goodie_test(
|
||||||
[qw(
|
[qw( DDG::Goodie::RandomNumber )],
|
||||||
DDG::Goodie::RandomNumber
|
'random number between 12 and 45' => test_zci(
|
||||||
)],
|
qr/\d{2} \(random number\)/,
|
||||||
'random number between 12 and 45' => test_zci( qr/\d{2} \(random number\)/),
|
structured_answer => {
|
||||||
'random number' => test_zci( qr/\d{1}\.\d+ \(random number\)/),
|
input => [12, 45],
|
||||||
'random day' => undef,
|
operation => 'random number between',
|
||||||
'random access' => undef,
|
result => qr/^\d{2}$/
|
||||||
|
}
|
||||||
|
),
|
||||||
|
'random number' => test_zci(qr/\d{1}\.\d+ \(random number\)/,
|
||||||
|
structured_answer => {
|
||||||
|
input => [0, 1],
|
||||||
|
operation => 'random number between',
|
||||||
|
result => qr/\d{1}\.\d+/,
|
||||||
|
}
|
||||||
|
),
|
||||||
|
'random day' => undef,
|
||||||
|
'random access' => undef,
|
||||||
);
|
);
|
||||||
done_testing
|
done_testing
|
||||||
|
|
Loading…
Reference in New Issue