sumOfNaturalNumbers: Convert to structured answer (#4255)

* convert sumOfNaturalNumbers to structured answer

* cleaned up syntax
master
Philip Kirkbride 2017-08-17 15:37:02 -04:00 committed by Rob Emery
parent aff77f1509
commit 192047914c
2 changed files with 37 additions and 15 deletions

View File

@ -27,11 +27,19 @@ handle remainder => sub {
# Check if we're getting integers.
return unless $_ =~ /^(?:from )?(\d+)\s*(to|-)\s*(\d+)$/i;
if ($1 > $3) {
return;
} else {
my $sum = ((($3 * ($3 + 1)) / 2)-(($1 * ($1 - 1)) / 2));
return 'Sum of natural numbers from ' . commify($1) . ' to ' . commify($3) . ' is ' . commify($sum) . '.';
return if ($1 > $3);
my $sum = ((($3 * ($3 + 1)) / 2)-(($1 * ($1 - 1)) / 2));
my ($from_number, $to_number, $sum) = map { commify($_) } ($1, $3, $sum);
my $string_answer = 'Sum of natural numbers from ' . $from_number . ' to ' . $to_number;
return $string_answer, structured_answer => {
data => {
title => "$sum",
subtitle => $string_answer
},
templates => {
group => 'text'
}
}
};

View File

@ -1,25 +1,39 @@
#!/usr/bin/env perl
use strict;
use warnings;
use Test::More;
use Test::Deep;
use DDG::Test::Goodie;
zci is_cached => 1;
zci answer_type => 'sum';
zci is_cached => 1;
sub build_sum_answer {
my($title, $subtitle) = @_;
return $subtitle,
structured_answer => {
data => {
title => "$title",
subtitle => $subtitle
},
templates => {
group => 'text',
}
};
}
sub build_sum_test { test_zci(build_sum_answer(@_)) }
ddg_goodie_test(
[
'DDG::Goodie::SumOfNaturalNumbers'
],
'sum 1 to 10' => test_zci('Sum of natural numbers from 1 to 10 is 55.'),
'sum 55 to 63' => test_zci('Sum of natural numbers from 55 to 63 is 531.'),
'add 33 to 100' => test_zci('Sum of natural numbers from 33 to 100 is 4,522.'),
'sum 1-10' => test_zci('Sum of natural numbers from 1 to 10 is 55.'),
'sum from 1 to 10' => test_zci('Sum of natural numbers from 1 to 10 is 55.'),
'1-10 sum' => test_zci('Sum of natural numbers from 1 to 10 is 55.'),
'add from 1 to 100' => test_zci('Sum of natural numbers from 1 to 100 is 5,050.'),
'sum 1 to 10' => build_sum_test('55', 'Sum of natural numbers from 1 to 10'),
'sum 55 to 63' => build_sum_test('531', 'Sum of natural numbers from 55 to 63'),
'add 33 to 100' => build_sum_test('4,522', 'Sum of natural numbers from 33 to 100'),
'sum 1-10' => build_sum_test('55', 'Sum of natural numbers from 1 to 10'),
'sum from 1 to 10' => build_sum_test('55', 'Sum of natural numbers from 1 to 10'),
'1-10 sum' => build_sum_test('55', 'Sum of natural numbers from 1 to 10'),
'add from 1 to 100' => build_sum_test('5,050', 'Sum of natural numbers from 1 to 100'),
# Invalid Input
'sum 1 --- 10' => undef,