• API
• FAQ
• Tools
• Archive
SHARE
TWEET

TLang

alefhidalgo Jun 20th, 2011 793 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
1. import java.math.BigDecimal;
2. import java.util.ArrayList;
3. import java.util.List;
4. import java.util.Scanner;
5. import java.util.regex.Matcher;
6. import java.util.regex.Pattern;
7.
8. /**
9.  * Tuenti Programming Contest
10.  * Challenge 2: TLang
11.  * @author alefhidalgo [at] gmail [dot] com
12.  */
13. public class TLang {
14.         /* ADD OPERATION TOKEN */
15.         private String OP_ADD = "^=";
16.         /* MULTIPLICATION OPERATION TOKEN */
17.         private String OP_MULT = "^#";
18.         /* SUBTRACTION OPERATION TOKEN */
19.         private String OP_SUB = "^@";
20.
21.         /**
22.          * Solve expression
23.          * @param expression
24.          * @return
25.          */
26.         public String solveExpression(String expression) {
27.                 /* Pattern to recognise simple expressions */
28.                 Pattern p = Pattern.compile("[[\\^#][\\^=][\\^@]]+(\\s+[-]?\\d+)?\\s+[-]?\\d+\\\$+");
29.                 Matcher m = p.matcher(expression);
30.                 //recursive until expression will be fully simplified
31.                 if (m.find()) {
32.                         String simpleExpression = m.group();
33.                         String simpleExpressionSolved = solveSimpleExpression(simpleExpression);
34.                         String simplyfiedExpression = expression.replace(simpleExpression, simpleExpressionSolved);
35.                         return solveExpression(simplyfiedExpression);
36.                 } else {
37.                         //at this point the expression is solved
38.                         return expression;
39.                 }
40.         }
41.
42.         /**
43.          * Solve Simple Expression
44.          * @param simpleExpression
45.          *            ^# xxx yyy\$..\$ or ^@ yyy\$..\$
46.          * @return
47.          */
48.         private String solveSimpleExpression(String simpleExpression) {
49.                 BigDecimal number1 = null;
50.                 BigDecimal number2 = null;
51.                 BigDecimal result = null;
52.                 String mod = "";
53.                 Scanner exprScn = new Scanner(simpleExpression);
54.                 List<String> arrExpr = new ArrayList<String>();
55.                 while (exprScn.hasNext()) {
57.                 }
58.                 //Type1 ^@ yyy\$..\$
59.                 if (arrExpr.size() == 2) {
60.                         mod = arrExpr.get(1).replaceFirst("[-]?\\d+\\\$", "");
61.                         number1 = new BigDecimal(arrExpr.get(1).replaceAll("\\\$", ""));
62.                         if (arrExpr.get(0).equals(OP_SUB)) {
63.                                 result = number1.negate();
64.                         }else {
65.                                 result = number1;
66.                         }
67.                 //Type2 ^# xxx yyy\$..\$
68.                 } else {
69.                         number1 = new BigDecimal(arrExpr.get(1));
70.                         number2 = new BigDecimal(arrExpr.get(2).replaceAll("\\\$", ""));
71.                         mod = arrExpr.get(2).replaceFirst("[-]?\\d+\\\$", "");
74.                         } else if (arrExpr.get(0).equals(OP_MULT)) {
75.                                 result = number1.multiply(number2);
76.                         } else if (arrExpr.get(0).equals(OP_SUB)) {
77.                                 result = number1.subtract(number2);
78.                         }
79.                 }
80.                 return result.toPlainString() + mod;
81.         }
82.
83.         public static void main(String args[]) {
84.                 TLang tLang = new TLang();
85.                 Scanner in = new Scanner(System.in);
86.                 while (in.hasNextLine()) {
87.                         System.out.println(tLang.solveExpression(in.nextLine()));
88.                 }
89.         }
90. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy.

Top