JavaScript icon indicating copy to clipboard operation
JavaScript copied to clipboard

feat: added SubsetSum algo and its tests in Recursive Algos

Open HRIDYANSHU054 opened this issue 1 year ago • 3 comments

Open in Gitpod know more

Describe your change:

  • [x] Add an algorithm? Added SubsetSum algorithm and its tests in Recursive Alogrithms.
/**
 * @function subsetSum
 * @description This function recursively calculates the count of subsets whose sum equals the given target sum.
 * @param {number[]} arr - The input array of numbers.
 * @param {number} sum - The target sum we want to find in the subsets.
 * @param {number} ind - The current index.
 * @return {number} The count of subsets whose sum equals the target sum.
 *
 */

export function subsetSum(arr, sum, ind = 0) {
  //input validation only in the inital call
  if (
    ind === 0 &&
    (!Array.isArray(arr) || !arr.every((elem) => typeof elem === 'number'))
  ) {
    throw new TypeError('arr should be an array of numbers')
  }

  if (ind === 0 && typeof sum !== 'number') {
    throw new TypeError('sum should be a number')
  }

  if (ind === arr.length) {
    return sum === 0 ? 1 : 0
  }

  return subsetSum(arr, sum, ind + 1) + subsetSum(arr, sum - arr[ind], ind + 1)
}

Checklist:

  • [x] I have read CONTRIBUTING.md.
  • [x] This pull request is all my own work -- I have not plagiarized.
  • [x] I know that pull requests will not be merged if they fail the automated tests.
  • [x] This PR only changes one algorithm file. To ease review, please open separate PRs for separate algorithms.
  • [x] All new JavaScript files are placed inside an existing directory.
  • [x] All filenames should use the UpperCamelCase (PascalCase) style. There should be no spaces in filenames. Example:UserProfile.js is allowed but userprofile.js,Userprofile.js,user-Profile.js,userProfile.js are not
  • [x] All new algorithms have a URL in their comments that points to Wikipedia or another similar explanation.
  • [x] If this pull request resolves one or more open issues then the commit message contains Fixes: #{$ISSUE_NO}.

HRIDYANSHU054 avatar Oct 17 '24 13:10 HRIDYANSHU054

Codecov Report

All modified and coverable lines are covered by tests :white_check_mark:

Project coverage is 84.81%. Comparing base (ff314a2) to head (5426682). Report is 1 commits behind head on master.

Additional details and impacted files
@@            Coverage Diff             @@
##           master    #1734      +/-   ##
==========================================
+ Coverage   84.76%   84.81%   +0.04%     
==========================================
  Files         378      379       +1     
  Lines       19742    19799      +57     
  Branches     2955     2967      +12     
==========================================
+ Hits        16735    16792      +57     
  Misses       3007     3007              

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.

codecov-commenter avatar Oct 17 '24 13:10 codecov-commenter

@appgurueu kindly see if this should be added to recursive algorithms

HRIDYANSHU054 avatar Oct 18 '24 12:10 HRIDYANSHU054

@appgurueu @raklaptudirm Can you check this and let me know if this can be added to Recursive Algorithms?

HRIDYANSHU054 avatar Oct 21 '24 20:10 HRIDYANSHU054