A chunk of symbols is a calculation [released]
+2
−0
Challenge
Create a program that takes input of a string and outputs an integer using the following calculation system:
- The string can only contain
+,-,*,/,^,!(or a different character;!is used here for demonstration),(, and). - In this system, a character shows the value of $1$. This demonstrates the value of an integer with the system. Examples are
+++++, which is equal to+ 5, and***, which is* 3. - Here are the operations of each symbol:
-
-
+is addition and for assigning a beginning positive integer. (+++++++++=+ 9)
-
-
-
-is subtraction and for assigning a beginning negative integer. (-------------=-13/- 13)
-
-
-
*is multiplication. (**=* 2)
-
-
-
/is division. (//////=/ 6)
-
-
-
^is exponentiation/ (^^^=^ 3)
-
-
-
!or a different character (I'm using!for demonstration) is for assigning positive integers if we want to add positive integers together, or to simply separate positive integers from each other.
-
-
-
(and)are for grouping calculations, and can also be used for multiplying a number into an equation. The only way to interact with the grouped equations is if no numbers precede them.!!!+++++(----***)//=3 + 4(-4 * 3) / 2)
-
- The output must be an integer, being the result of the whole equation.
- The whole system should follow this non-standard model of PEMDAS.
- Being a code-golf challenge, the shortest program of each language wins.
Testcases
-
+++++is+ 5which returns5. -
---**is-3 * 2which returns-6. -
++(----//+++++!!!**)is2(-4 / 2 + 5 + 3 * 2)which returns18(2(-2 + 5 + 6) => 2(9)). -
--^^^is-2 ^ 3which returns-8. - An empty input or
()is0which returns0. -
(+-)/(+-)is(1 - 1) / 1 (1 - 1)is indeterminate, but for the sake of this challenge, it returns0. -
(++++++++******)//((+++***)+++)is(8 * 6) / 2((3 * 3) + 3)which returns2(48 / 2(9 + 3) => 48 / 24).
Error Handling
Everything in this section is undefined behavior. Please DON'T do these when inputting.
- A character that's not supposed to be there.
- A beginner number is assigned NOT by
+,-,!(or a different character), or(. - An open parentheses doesn't have a paired closed parentheses.
- A whitespace character in the string (tabs, spaces, etc.).
- Characters that aren't part of the English alphabet.
ñ,るandθare examples. - An equation like
!/(+-)or1 / 1(1-1)leads to the division by zero error. Refrain from doing such equations in the input. Only0 / 0is an exception here, which returns0.
Suggestions
- Any way to improve this?
- Anything unclear?
- Are these the right tags?
- Any more errors to handle?

5 comment threads