I have this example to solve, its quite easy but there is a lots of obstracles:
/**
* Write a JavaScript function to check
* whether it is possible to replace $
* in a given expression x $ y = z
* with one of the four signs +, -, * or /
* to obtain a correct expression.
*/
/**
* If we replace $ in input with one of + - * /
* do we get a valid mathematical expression?
* @param {string} input String that is tested
* @returns {boolean} Whether it could be valid expression
*/
const isReplacable = input => {
/**
* Please fill in your code here
*/
return false;
};
const TEST_STRINGS = [
'3 $ 5 = 8',
'2 $ 6 = 3',
'5$5=25',
'2 $ 1 = 2',
'3 $ 4 = 5',
'6 $ 4 = 3',
'3 $ 2 = 1',
'4 $6= 24',
'3$ 2= 6',
'30$ 15 =2',
];
export const runChecks = () => {
TEST_STRINGS.forEach(expression => {
console.log(`${expression}: ${isReplacable(expression) ? 'VALID' : 'INVALID'}`);
});
};
I tried to finish it like this:
1, make parser
function countIt(test) {
const numbers = test.split('');
const target = ' ';
var i = 0;
while (i < numbers.length) {
if (numbers[i] === target) {
numbers.splice(i, 1);
} else {
++i;
}
}
newNumbers = numbers;
console.log(numbers);
const newTarget = '$';
var i = 0;
while (i < newNumbers.length) {
if (newNumbers[i] === newTarget) {
newNumbers.splice(i, 1);
} else {
++i;
}
}
console.log(newNumbers);
finalNumbers = newNumbers;
const finalTarget = '=';
var i = 0;
while (i < finalNumbers.length) {
if (finalNumbers[i] === finalTarget) {
finalNumbers.splice(i, 1);
} else {
++i;
}
}
console.log(finalNumbers);
if (finalNumbers.length)
firstNumber = finalNumbers[0];
secondNumber = finalNumbers[2];
resultNumber = finalNumbers[4];
const result = parseInt(firstNumber) + parseInt(finalNumbers[1])
if (parseInt(firstNumber) + parseInt(secondNumber ) == resultNumber) {
console.log('+');
}
else if (parseInt(firstNumber) - parseInt(secondNumber ) == resultNumber) {
console.log('-');
}
else if (parseInt(firstNumber) * parseInt(secondNumber ) == resultNumber) {
console.log('*');
}
else if (parseInt(firstNumber) / parseInt(secondNumber ) == resultNumber) {
console.log('/');
}
else {
console.log('false');
}
}
But there is so many problems to solve like 2-digits, or missing white-space after expression so i think my solution it too overenginered and isnt working correctly anyway
Do u have any better solutions ? Thanks for your tips ;)