Comments on A chunk of symbols is a calculation
Parent
A chunk of symbols is a calculation
+1
−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 returns5
. -
---**
is-3 * 2
which returns-6
. -
++(----//+++++!!!**)
is2(-4 / 2 + 5 + 3 * 2)
which returns18
(2(-2 + 5 + 6) => 2(9)
). -
--^^^
is-2 ^ 3
which returns-8
. - An empty input or
()
is0
which 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 / 0
is an exception here, which returns0
.
Post
+1
−0
JavaScript (Node.js), 148 bytes
s=>s?eval(s.replace(/([^()])\1*/g,(m,g)=>(g=='!'?'+':g)+m.length).replace(/\(/g,'*(').replace(/-(\d|\(.+?\))\^(\d+)/g,(m,g,h)=>'-('+g+'**'+h+')')):0
Abuses regex replacements and evals. Is it pretty? Nope. Is it optimized? Nope. Does it work? Maybe. I'll try to golf it later.
1 comment thread