JavaScript basic function validation runtime error

Viewed 6256

I need to validate val in verify function and wrote the below verify function but it is showing runtime error

The two functions makeInputVerifier and main function are already existing.

function makeInputVerifier(minimum, maximum) {
  var mini=minimum;
  var maxi=maximum;
}

function verify(val){
  if(val<mini)return "Input is less than minimum value";
  if(val>=mini && val<=maxi)return "Input is in range";
  
  return "Input is more than maximum value";
}


function main() {
  const ws = fs.createWriteStream(process.env.OUTPUT_PATH);

  const min = parseInt(readLine().trim());
  const max = parseInt(readLine().trim());
  const verify = makeInputVerifier(min, max);

  const input = parseInt(readLine().trim());
  const result = verify(input);

  ws.write(`${result}\n`);
  ws.end();
}
3 Answers

Line const result = verify(input, min, max); is expecting makeInputVerifier to return a function in line const verify = makeInputVerifier(min, max);.

Your code was not working because you are not returning the verify function from the makeInputVerifier function.

The below code should work:

function makeInputVerifier(minimum, maximum) {
  // write your code here
  var mini=minimum;
  var maxi=maximum;

  return function verify(val){
    if(val < mini)return "Input is less than minimum value";
    if(val >= mini && val <= maxi)return "Input is in range";
    return "Input is more than maximum value";
  }
}

The verify function does not know the mini and maxi values because they are not in the same scope. Try to pass the values to the function like this:

function makeInputVerifier(minimum, maximum) {
  // write your code here
  var mini=minimum;
  var maxi=maximum;
}
function verify(val, mini, maxi){
    if(val<mini)return "Input is less than minimum value";
    if(val>=mini && val<=maxi)return "Input is in range";
    return "Input is more than maximum value";
}


function main() {
  const ws = fs.createWriteStream(process.env.OUTPUT_PATH);

  const min = parseInt(readLine().trim());
  const max = parseInt(readLine().trim());
  const verify = makeInputVerifier(min, max);

  const input = parseInt(readLine().trim());
  const result = verify(input,min, max);

  ws.write(`${result}\n`);
  ws.end();
}

or declare the values un the scope of the main function like this:

function makeInputVerifier(minimum, maximum) {
  // write your code here
  mini=minimum;
  maxi=maximum;
}
function verify(val, mini, maxi){
    if(val<mini)return "Input is less than minimum value";
    if(val>=mini && val<=maxi)return "Input is in range";
    return "Input is more than maximum value";
}


function main() {
  const ws = fs.createWriteStream(process.env.OUTPUT_PATH);

  const min = parseInt(readLine().trim());
  const max = parseInt(readLine().trim());
  var mini = 0;
  var maxi = 0;
  const verify = makeInputVerifier(min, max);

  const input = parseInt(readLine().trim());
  const result = verify(input,min, max);

  ws.write(`${result}\n`);
  ws.end();
}

This Should work in all test cases!

  function makeInputVerifier(minimum, maximum) {
      // write your code here
      var mini=minimum;
      var maxi=maximum;
    }
    function verify(val, mini, maxi){
        if(val<mini)return "Input is less than minimum value";
        if(val>=mini && val<=maxi)return "Input is in range";
   }
 function main() {
  const ws = fs.createWriteStream(process.env.OUTPUT_PATH);

  const min = parseInt(readLine().trim());
  const max = parseInt(readLine().trim());
  const verif = makeInputVerifier(min, max);

  const input = parseInt(readLine().trim());
  const result = verify(input,min, max);

  ws.write(`${result}\n`);
  ws.end();
}
 
Related