UNPKG

binary-decision-diagram

Version:

A library to create, minimize and optimize binary decision diagrams

127 lines 3.79 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.splitStringToChunks = exports.lastOfArray = exports.shuffleArray = exports.firstKeyOfMap = exports.getNextStateSet = exports.maxBinaryWithLength = exports.minBinaryWithLength = exports.binaryToDecimal = exports.oppositeBinary = exports.decimalToPaddedBinary = exports.nextNodeId = exports.lastChar = exports.oppositeBoolean = exports.booleanToBooleanString = exports.booleanStringToBoolean = void 0; function booleanStringToBoolean(str) { if (str === '1') { return true; } else { return false; } } exports.booleanStringToBoolean = booleanStringToBoolean; function booleanToBooleanString(b) { if (b) { return '1'; } else { return '0'; } } exports.booleanToBooleanString = booleanToBooleanString; function oppositeBoolean(input) { if (input === '1') { return '0'; } else { return '1'; } } exports.oppositeBoolean = oppositeBoolean; function lastChar(str) { return str.slice(-1); } exports.lastChar = lastChar; /** * @link https://stackoverflow.com/a/1349426 */ function makeid(length = 6) { let result = ''; const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; const charactersLength = characters.length; for (let i = 0; i < length; i++) { result += characters.charAt(Math.floor(Math.random() * charactersLength)); } return result; } const nodeIdPrefix = makeid(4); let lastIdGen = 0; function nextNodeId() { const ret = 'node_' + nodeIdPrefix + '_' + lastIdGen; lastIdGen++; return ret; } exports.nextNodeId = nextNodeId; /** * @link https://stackoverflow.com/a/16155417 */ function decimalToPaddedBinary(decimal, padding) { const binary = (decimal >>> 0).toString(2); const padded = binary.padStart(padding, '0'); return padded; } exports.decimalToPaddedBinary = decimalToPaddedBinary; function oppositeBinary(i) { if (i === '1') { return '0'; } else if (i === '0') { return '1'; } else { throw new Error('non-binary given'); } } exports.oppositeBinary = oppositeBinary; function binaryToDecimal(binary) { return parseInt(binary, 2); } exports.binaryToDecimal = binaryToDecimal; function minBinaryWithLength(length) { return new Array(length).fill(0).map(() => '0').join(''); } exports.minBinaryWithLength = minBinaryWithLength; function maxBinaryWithLength(length) { return new Array(length).fill(0).map(() => '1').join(''); } exports.maxBinaryWithLength = maxBinaryWithLength; function getNextStateSet(stateSet) { const decimal = binaryToDecimal(stateSet); const increase = decimal + 1; const binary = decimalToPaddedBinary(increase, stateSet.length); return binary; } exports.getNextStateSet = getNextStateSet; function firstKeyOfMap(map) { const iterator1 = map.keys(); return iterator1.next().value; } exports.firstKeyOfMap = firstKeyOfMap; /** * Shuffles array in place. ES6 version * @link https://stackoverflow.com/a/6274381 */ function shuffleArray(a) { for (let i = a.length - 1; i > 0; i--) { const j = Math.floor(Math.random() * (i + 1)); [a[i], a[j]] = [a[j], a[i]]; } return a; } exports.shuffleArray = shuffleArray; function lastOfArray(ar) { return ar[ar.length - 1]; } exports.lastOfArray = lastOfArray; /** * @link https://stackoverflow.com/a/6259536 */ function splitStringToChunks(str, chunkSize) { const chunks = []; for (let i = 0, charsLength = str.length; i < charsLength; i += chunkSize) { chunks.push(str.substring(i, i + chunkSize)); } return chunks; } exports.splitStringToChunks = splitStringToChunks; //# sourceMappingURL=util.js.map