Communities

tag:snake search within a tag
user:xxxx search by author id
score:0.5 posts with 0.5+ score
"snake oil" exact phrase
created:<1w created < 1 week ago
post_type:xxxx type of post
Sandbox

+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 + 5 which returns 5.
• ---** is -3 * 2 which returns -6.
• ++(----//+++++!!!**) is 2(-4 / 2 + 5 + 3 * 2) which returns 18 (2(-2 + 5 + 6) => 2(9)).
• --^^^ is -2 ^ 3 which returns -8.
• An empty input or () is 0 which returns 0.
• (+-)/(+-) is (1 - 1) / 1 (1 - 1) is indeterminate, but for the sake of this challenge, it returns 0.
• (++++++++******)//((+++***)+++) is (8 * 6) / 2((3 * 3) + 3) which returns 2 (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 !/(+-) or 1 / 1(1-1) leads to the division by zero error. Refrain from doing such equations in the input. Only 0 / 0 is an exception here, which returns 0.

Suggestions

• Any way to improve this?
• Anything unclear?
• Are these the right tags?
• Any more errors to handle?
Why does this post require moderator attention?