UNPKG

ucsc-xena-client

Version:

UCSC Xena Client. Functional genomics visualizations.

56 lines (45 loc) 1.6 kB
'use strict'; function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } var _ = require('./underscore_ext'); function permuteCaseArray(str) { var i = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; if (i === str.length) { return ['']; } var c = str[i], u = c.toLowerCase(), l = c.toUpperCase(); return u === l ? _.flatmap(permuteCaseArray(str, i + 1), function (suffix) { return [[c].concat(_toConsumableArray(suffix))]; }) : _.flatmap(permuteCaseArray(str, i + 1), function (suffix) { return [[u].concat(_toConsumableArray(suffix)), [l].concat(_toConsumableArray(suffix))]; }); } var permuteCase = function permuteCase(str) { return _.map(permuteCaseArray(_.map(str.split(''))), function (arr) { return arr.join(''); }); }; var hasCase = function hasCase(s) { return s.toLowerCase() === s.toUpperCase() ? 0 : 1; }; // Number of chars in str having case ('a' has case, '5' does not, so // "a5a" returns 2, for example) function permuteBitCount(str) { return _.sum(_.map(str, hasCase)); } // prefix of str having at most n chars with case. var prefixBitLimit = _.curry(function (n, str) { var counts = _.scan(str, function (count, c) { return hasCase(c) ? count + 1 : count; }, 0), l = _.findLastIndex(counts, function (c) { return c <= n; }); return str.slice(0, l); }); module.exports = { prefixBitLimit: prefixBitLimit, permuteCase: permuteCase, permuteBitCount: permuteBitCount };