UNPKG

binary-decision-diagram

Version:

A library to create, minimize and optimize binary decision diagrams

126 lines 3.38 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.booleanStringToBoolean = booleanStringToBoolean; exports.booleanToBooleanString = booleanToBooleanString; exports.oppositeBoolean = oppositeBoolean; exports.lastChar = lastChar; exports.nextNodeId = nextNodeId; exports.decimalToPaddedBinary = decimalToPaddedBinary; exports.oppositeBinary = oppositeBinary; exports.binaryToDecimal = binaryToDecimal; exports.minBinaryWithLength = minBinaryWithLength; exports.maxBinaryWithLength = maxBinaryWithLength; exports.getNextStateSet = getNextStateSet; exports.firstKeyOfMap = firstKeyOfMap; exports.shuffleArray = shuffleArray; exports.lastOfArray = lastOfArray; exports.splitStringToChunks = splitStringToChunks; function booleanStringToBoolean(str) { if (str === '1') { return true; } else { return false; } } function booleanToBooleanString(b) { if (b) { return '1'; } else { return '0'; } } function oppositeBoolean(input) { if (input === '1') { return '0'; } else { return '1'; } } function lastChar(str) { return str.slice(-1); } /** * @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; } /** * @link https://stackoverflow.com/a/16155417 */ function decimalToPaddedBinary(decimal, padding) { const binary = (decimal >>> 0).toString(2); const padded = binary.padStart(padding, '0'); return padded; } function oppositeBinary(i) { if (i === '1') { return '0'; } else if (i === '0') { return '1'; } else { throw new Error('non-binary given'); } } function binaryToDecimal(binary) { return parseInt(binary, 2); } function minBinaryWithLength(length) { return new Array(length).fill(0).map(() => '0').join(''); } function maxBinaryWithLength(length) { return new Array(length).fill(0).map(() => '1').join(''); } function getNextStateSet(stateSet) { const decimal = binaryToDecimal(stateSet); const increase = decimal + 1; const binary = decimalToPaddedBinary(increase, stateSet.length); return binary; } function firstKeyOfMap(map) { const iterator1 = map.keys(); return iterator1.next().value; } /** * 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; } function lastOfArray(ar) { return ar[ar.length - 1]; } /** * @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; } //# sourceMappingURL=util.js.map