Parse ascii art math!
APL (Dyalog Unicode), 46 44 bytes
'/(80-)63+92145*7'[16|43|25⊥¨(×⊆⊢)2⊥' .\'⍳⎕]
Try it online!
⎕
evaluated input, must be a character matrix
' .\'⍳
replace spaces with 0, .
s with 1, \
s with 2, and everything else with 3
2⊥
base-2 decode the columns
(×⊆⊢)
split on zeroes
25⊥¨
base-25 decode each group
16|43|
mod 43, mod 16
'/(80-)63+92145*7'[
]
use as indices in the given string
Python 2, 154 139 bytes
s=zip(*input().split('\n'))
i=0
while s[i:]:d=3**(max((s+[' '])[i+1])>' ')+i;print'+/5(_41_7802*6__-9)3'[hash(tuple(s[i:d]))*3%67%21];i=1+d
Try it online!
APL (Dyalog Unicode), 69 61 bytes
Anonymous tacit prefix function. Requires ⎕IO←0
.
{('+-*/()',⎕D)['∆JV⍺TgucKmre3Ha'⍳⎕AV[94|2⊥¨,⌿⍵⊆⍨∨⌿32≠⍵]]}⎕UCS
Try it online!
⎕UCS
convert characters to code points
{
…}
"dfn"; argument is ⍵
('+-*/()',⎕D)
the involved symbols followed by the Digits
[
…]
index into that using the following indices:
'∆JV⍺TgucKmre3Ha'⍳
indices in this string (missing elements get index=length) of
⎕AV[
…]
index into the Atomic Vector (the character set) using the following:
94|
the division remainder when divided by 94 of
2⊥¨
the base-2 evaluation of each of
,⌿
the vertically joined and flattened
⍵⊆⍨
segments of the argument, as indicated by trues in
∨⌿
the vertical OR-reduction of
32≠⍵
the Boolean mask indicating where the argument is different from 32 (space)