JavaScript-ul meu nu merge in CodeFights.com

Nu cu mult timp în urmă, m-am înregistrat pe site-ul Codefights.com unde au loc lupte între programatori (vă recomand să încercați). Ieri am gasit o problemă care mi s-a părut foarte interesanta și m-am apucat s-o rezolv.

DESCRIEREA:
You have to return the result of a math expression.

A math expression can contain digits in range 0-9, symbols +, -, *, /, (, ), ^ (for power operation), and sqrt (for square root).

Each expression ends with = and doesn’t contain spaces.

Subresults of the expression can be double, but the result should be rounded to an integer!

Examples

  • math('2+2=') = 4
  • math('(10^3-500)/(10^2)=') = 5
  • math('sqrt(28+8-9)=') = 5
  • math('75*(sqrt(82)-9)=') = 4
  • math('-5*(-5)=') = 25
  • math('5*(-5)=') = -25
  • math('(10^2)/10=') = 10
  • math('-2^4=') = -16
  • math('(-2)^4=') = 16
  • [input] string expression
    • Each number is in range [-1000, 1000]. It is guaranteed that subresults fit double.
  • [output] integer
    • The answer rounded to the nearest integer.

Dupa câteva minute de gândire mi-a venit ideea cum aș putea rezolva fără multe rânduri scrise, în JavaScript exista functia eval care transforma orice string într-o expresie, imi rămâne doar sa aduc stringul la forma normala ca în JavaScript.
sqrt trebuie înlocuit cu Math.sqrt și ridicarea la putere, în loc de (N^M) trebuie să-l înlocuiesc cu Math.pow(N, M)
am primit

function math(expression) { 
	//Înlocuim sqrt
	expression = expression.replace(/(sqrt)/g,"Math.$1");
	//înlocuim ridicarea la putere
	expression = expression.replace(/(\d+)\^(\d+)/g,"Math.pow($1,$2)");
	//ștergem egalul de la sfârșit
	expression = expression.replace("=","");
	//evaluam sirul de caractere primit
	expression = eval(expression);
	//rotungim
	expression = Math.round(expression);
	return expression;
}

Daca mai stam un pic sa reducem din script putem ajunge la ceva mai scurt

function math(expression) { 
	return Math.round(eval(expression.replace(/(sqrt)/g,"Math.$1").replace(/(\d+)\^(\d+)/g,"Math.pow($1,$2)").replace("=","")));
}

M-am bucurat c-am gasit soluția, lucrează 100% doar ca acel site nu mi-a primit-o 🙁 de asta m-am decis sa mă împart cu voi