Statistics

Problem Statement for "WordCalculator"

Problem Statement

Class Name:  WordCalculator
Method Name: evaluate
Parameters:  String
Returns:     String

You are to implement a class WordCalculator, which contains a method evaluate.
The method takes a string representing an arithmetic expression you are to
evaluate.  The return value of the function is the result of evaluating the
arithmetic expression.

The input expression is structured as follows:
EXPR    ::=     <NUMBER> <OP> <NUMBER>

OP      ::=     { "PLUS" | "MINUS" | "TIMES" }

NUMBER  ::=     ["NEGATIVE "] <POS> |
                ZERO

POS     ::=     <DIGIT> |
                <TEEN> |
                <PREFIX> ["-" <DIGIT>]

PREFIX  ::=     NINETY | EIGHTY | SEVENTY | SIXTY | FIFTY | FORTY | THIRTY |
TWENTY
DIGIT   ::=     ONE | TWO | THREE | FOUR | FIVE | SIX | SEVEN | EIGHT | NINE
TEEN    ::=     TEN | ELEVEN | TWELVE | THIRTEEN | FOURTEEN | FIFTEEN | SIXTEEN
|
                SEVENTEEN | EIGHTEEN | NINETEEN

Some examples of valid inputs are:
NINETY-FOUR MINUS TWELVE
ZERO PLUS SEVENTY-THREE
EIGHTY TIMES NEGATIVE NINETEEN
FOUR PLUS THREE
FOURTEEN MINUS NEGATIVE SIX

Note:  Any number whose tens and ones place is over twenty and whose one place
is not zero contains a hyphen.  Any number below twenty doesn't have a hyphen.  

The output expression is the result of the specified arithmetic operation.  The
output expression is structured as follows:
EXPR    ::=     ["NEGATIVE"] <DIGIT> "THOUSAND" [" " <DIGIT> "HUNDRED"] [" AND
" <POS>] |
                ["NEGATIVE"] <DIGIT> "HUNDRED" [" AND " <POS>] |
                ["NEGATIVE"] <POS> |
                ZERO

Some examples of valid outputs are:
NINETY-FOUR
NEGATIVE SEVEN THOUSAND AND EIGHT
FOUR THOUSAND EIGHT HUNDRED AND SEVENTY-NINE
ZERO
NEGATIVE TWO THOUSAND FOUR HUNDRED AND THREE
SIX
SEVEN THOUSAND FOUR HUNDRED

Note:  The only place the word AND appears in a valid output is when the result
is greater than one hundred and there is a non-zero number in the tens or ones
place.

For input and output, there is at most 1 space between words, and no spaces
around hyphens.  The word calculator is case sensitive and all output should be
capital.

The method signature is:
String evaluate(String s)

TopCoder will verify s is a properly formed String, as described above.

Examples:
FORTY-THREE TIMES TWO = EIGHTY-SIX
SEVEN MINUS TWENTY-FOUR = NEGATIVE SEVENTEEN
SIXTY-FOUR TIMES TWELVE = SEVEN HUNDRED AND SIXTY-EIGHT
NEGATIVE FOUR MINUS EIGHT = NEGATIVE TWELVE
NEGATIVE SEVEN PLUS SEVEN = ZERO
ZERO TIMES NEGATIVE NINETY-NINE = ZERO
NEGATIVE SEVENTY-FOUR TIMES NEGATIVE SIXTY-THREE = FOUR THOUSAND SIX HUNDRED
AND SIXTY-TWO
THIRTY-TWO TIMES NEGATIVE SIXTY-THREE = NEGATIVE TWO THOUSAND AND SIXTEEN

Definition

Class:
WordCalculator
Method:
evaluate
Parameters:
String
Returns:
String
Method signature:
String evaluate(String param0)
(be sure your method is public)

Constraints

    Examples


      This problem statement is the exclusive and proprietary property of TopCoder, Inc. Any unauthorized use or reproduction of this information without the prior written consent of TopCoder, Inc. is strictly prohibited. (c)2024, TopCoder, Inc. All rights reserved.
      This problem was used for: