zeroclickinfo-goodies/lib/DDG/Goodie/RandomNumber.pm

54 lines
1.2 KiB
Perl

package DDG::Goodie::RandomNumber;
# ABSTRACT: generate a random number in the requested range.
use strict;
use DDG::Goodie;
zci answer_type => 'rand';
zci is_cached => 0;
triggers start => 'rand','random','number';
handle query_lc => sub {
srand();
# Random number.
# q_check (as opposed to q_internal) Allows for decimals.
return unless ($_ =~ /^\!?(?:rand(?:om|)(?: num(?:ber|)|)(?: between|))( [\d\.]+|)(?: and|)( [\d\.]+|)$/i);
my $start = $1 || 0;
my $end = $2 || 0;
$start = 1000000000 if $start > 1000000000;
$start = 0 if $start < 0;
$start += 0;
$end = 1000000000 if $end > 1000000000;
$end = 0 if $end < 0;
$end = 1 if !$end;
$end += 0;
($end, $start) = ($start, $end) if ($start > $end);
my $valDiff = $end - $start;
my $rand = rand;
if ($start && $end || $valDiff > 1) {
$rand *= ($valDiff + 1);
$rand = int($rand) + $start;
}
return "$rand (random number)",
structured_answer => {
data => {
title => $rand,
subtitle => "Random number between $start - $end"
},
templates => {
group => "text",
}
};
};
1;