@pelevesque/has_required_substrings_after_sums

Checks if a string has required substrings after given sums.


Keywords
required, str, string, substring, sum
License
MIT
Install
npm install @pelevesque/has_required_substrings_after_sums@0.0.3

Documentation

Build Status Coverage Status JavaScript Style Guide

has_required_substrings_after_sums

Checks if a string has required substrings after given sums.

Related Packages

https://github.com/pelevesque/has_prohibited_substring_after_sums
https://github.com/pelevesque/has_required_substrings
https://github.com/pelevesque/has_prohibited_substring
https://github.com/pelevesque/has_required_substrings_at_indexes
https://github.com/pelevesque/has_prohibited_substring_at_indexes

Node Repository

https://www.npmjs.com/package/@pelevesque/has_required_substrings_after_sums

Installation

npm install @pelevesque/has_required_substrings_after_sums

Tests

Standard Style & Unit Tests

npm test

Unit Tests & Coverage

npm run cover

Usage

Parameters

str                (required)
requiredSubstrings (required)
options            (optional) default = { substringsToDigits = null, sumPlainDigits = true, allowLastSubstringToBleed = false, ignoreSumsOutsideString = false }

Requiring

const hasRequiredSubstringsAfterSums = require('@pelevesque/has_required_substrings_after_sums')

Basic Usage

@see https://github.com/pelevesque/sum-digits to understand how the sum is calculated.

requiredSubstrings is an object of sum -> substring pairs. true is returned if all substrings are found after their associated sums but before the following sums.

const str = '123a45'
const requiredSubstrings = { 1: 'a' }
const result = hasRequiredSubstringsAfterSums(str, requiredSubstrings)
// result === false
const str = '123a45'
const requiredSubstrings = { 6: 'a' }
const result = hasRequiredSubstringsAfterSums(str, requiredSubstrings)
// result === true
const str = '123bca45'
const requiredSubstrings = { 6: 'a' }
const result = hasRequiredSubstringsAfterSums(str, requiredSubstrings)
// result === true
const str = '123man45adinosaur'
const requiredSubstrings = { 6: 'man', 15: 'dinosaur' }
const result = hasRequiredSubstringsAfterSums(str, requiredSubstrings)
// result === true

Options

substringsToDigits

You can use the substringsToDigits option to give numeric values to substrings so that they are counted during summing.

const str = '123!$$$a'
const requiredSubstrings = { 15: 'a' }
const substringsToDigits = { '!': 4, '$$$': 5 }
const result = hasRequiredSubstringsAfterSums(str, requiredSubstrings, {
  substringsToDigits: substringsToDigits
})
// result === true

sumPlainDigits

You can set the sumPlainDigits option to false if you only want to sum substringsToDigits.

In the following example, 1, 2, and 3 are not summed.

const str = '123!a'
const requiredSubstrings = { 4: 'a' }
const substringsToDigits = { '!': 4 }
const sumPlainDigits = false
const result = hasRequiredSubstringsAfterSums(str, requiredSubstrings, {
  substringsToDigits: substringsToDigits,
  sumPlainDigits: sumPlainDigits
})
// result === true

allowLastSubstringToBleed

The allowLastSubstringToBleed option is false by default. It it used when you want to allow the last substring to be incomplete if the string is too short. In the following example, the last substring canal starts at the correct index, but remains incomplete since the string ends. Normally this would return false. With allowLastSubstringToBleed set to true, it returns true.

const str = '123can'
const requiredSubstrings = { 6: 'canal' }
const allowLastSubstringToBleed = true
const result = hasRequiredSubstringsAfterSums(str, requiredSubstrings, {
  allowLastSubstringToBleed: allowLastSubstringToBleed
})
// result === true

ignoreSumsOutsideString

The ignoreSumsOutsideString option is false by default. When set to true, required substring sums that fall outside the string sums will be ignored.

const str = '123a'
const requiredSubstrings = { 100: 'tree', 150: 'fig' }
const ignoreSumsOutsideString = true
const result = hasRequiredSubstringsAfterSums(str, requiredSubstrings, {
  ignoreSumsOutsideString: ignoreSumsOutsideString
})
// result === true