w3resource

JavaScript: Find all the possible options to replace the hash in a string

JavaScript Basic: Exercise-116 with Solution

Write a JavaScript program to find all the possible options to replace the hash in a string (Consists of digits and one hash (#)) with a digit to produce an integer divisible by 3.

For a string "2*0", the output should be : ["210", "240", "270"]

Sample Solution:

HTML Code:

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title> Find all the possible options to replace the hash in a string</title>
</head>
<body>

</body>
</html>

JavaScript Code:

function is_divisible_by3(mask_str) {

  var digitSum = 0,
    left = '0'.charCodeAt(),
    right = '9'.charCodeAt(),
    result = [],
    mask_data = mask_str.split(''),
    hash_pos = -1;

  for (var i = 0; i < mask_data.length; i++) {
    if (left <= mask_data[i].charCodeAt() && mask_data[i].charCodeAt() <= right)
    {
      digitSum += mask_data[i].charCodeAt() - left;
    } 
    else 
    {
      hash_pos = i;
    }
  }

  for (var i = 0; i < 10; i++) {
    if ((digitSum + i) % 3 === 0) {
      mask_data[hash_pos] = String.fromCharCode(left + i);
      result.push(mask_data.join(''));
    }
  }

  return result;
}

console.log(is_divisible_by3("2#0"))
console.log(is_divisible_by3("4#2"))

Sample Output:

["210","240","270"]
["402","432","462","492"]

Flowchart:

Flowchart: JavaScript - Find all the possible options to replace the hash in a string

ES6 Version:

function is_divisible_by3(mask_str) {
  let digitSum = 0;
  const left = '0'.charCodeAt();
  const right = '9'.charCodeAt();
  const result = [];
  const mask_data = mask_str.split('');
  let hash_pos = -1;

  for (var i = 0; i < mask_data.length; i++) {
    if (left <= mask_data[i].charCodeAt() && mask_data[i].charCodeAt() <= right)
    {
      digitSum += mask_data[i].charCodeAt() - left;
    } 
    else 
    {
      hash_pos = i;
    }
  }

  for (var i = 0; i < 10; i++) {
    if ((digitSum + i) % 3 === 0) {
      mask_data[hash_pos] = String.fromCharCode(left + i);
      result.push(mask_data.join(''));
    }
  }

  return result;
}

console.log(is_divisible_by3("2#0"))
console.log(is_divisible_by3("4#2"))

Live Demo:

See the Pen javascript-basic-exercise-116 by w3resource (@w3resource) on CodePen.


Improve this sample solution and post your code through Disqus

Previous: Write a JavaScript program to check whether a matrix is a diagonal matrix or not.
Next: Write a JavaScript program to check if a given matrix is an identity matrix.

What is the difficulty level of this exercise?

Test your Programming skills with w3resource's quiz.



JavaScript: Tips of the Day

Converts a string to title case

Example:

const toTitleCase = str =>
  str
    .match(/[A-Z]{2,}(?=[A-Z][a-z]+[0-9]*|\b)|[A-Z]?[a-z]+[0-9]*|[A-Z]|[0-9]+/g)
    .map(x => x.charAt(0).toUpperCase() + x.slice(1))
    .join(' ');
console.log(toTitleCase('some_database_field_name')); // 'Some Database Field Name'
console.log(toTitleCase('Some label that needs to be title-cased')); // 'Some Label That Needs To Be Title Cased'
console.log(toTitleCase('some-package-name')); // 'Some Package Name'
console.log(toTitleCase('some-mixed_string with spaces_underscores-and-hyphens')); // 'Some Mixed String With Spaces Underscores And Hyphens' 

Output:

"Some Database Field Name"
"Some Label That Needs To Be Title Cased"
"Some Package Name"
"Some Mixed String With Spaces Underscores And Hyphens"