@lazy-random/df-array
Version:
1 lines • 10.9 kB
Source Map (JSON)
{"version":3,"file":"index.esm.mjs","sources":["../src/util/options.ts","../src/array-index-one.ts","../src/array-index.ts","../src/array-shuffle.ts","../src/array-unique.ts","../src/array-fill.ts"],"sourcesContent":["import { ITSArrayListMaybeReadonly } from 'ts-type/lib/type/base';\nimport { expect } from '@lazy-random/expect';\n\nexport function _handleStartEnd<T extends ITSArrayListMaybeReadonly<unknown>>(arr: T, start: number = 0, end?: number, disableCheck?: boolean)\n{\n\tconst len = arr.length;\n\tconst enableCheck = !disableCheck;\n\n\tstart = Math.max(Math.floor(start), 0);\n\n\tif (typeof end !== 'undefined' && end !== null)\n\t{\n\t\tend = Math.floor(end);\n\t\tenableCheck && expect(end).integer\n\t\t\t.gt(start + 1, `END(${end}) should greater than START(${start}+1)`)\n\t\t\t.gt(0)\n\t\t\t//.gt(start, `END(${end}) should greater than START(${start})`)\n\t\t;\n\t}\n\n\tend = Math.min(Math.max(0, end ?? len), len);\n\n\tenableCheck && expect(end, `END(${end})`).integer.gte(0).lte(len);\n\tenableCheck && expect(start, `START(${start})`).integer.gte(0).lt(end);\n\n\treturn {\n\t\tstart,\n\t\tend,\n\t\tlen,\n\t}\n}\n","import { IRNGLike } from '@lazy-random/rng-abstract-core';\nimport { ITSArrayListMaybeReadonly } from 'ts-type/lib/type/base';\nimport { _handleStartEnd } from './util/options';\nimport { int } from '@lazy-random/util-distributions';\n\n/**\n * return index number form array\n */\nexport function dfArrayIndexOne<T extends ITSArrayListMaybeReadonly<unknown>>(random: IRNGLike,\n\tarr: T,\n\tstart: number = 0,\n\tend?: number\n)\n{\n\t({\n\t\tstart,\n\t\tend,\n\t} = _handleStartEnd(arr, start, end));\n\n\tif (start === end - 1)\n\t{\n\t\treturn () => start\n\t}\n\n\treturn () =>\n\t{\n\t\treturn int(random, start, end)\n\t}\n}\n\nexport default dfArrayIndexOne\n","import { expect } from '@lazy-random/expect';\nimport { IRNGLike } from '@lazy-random/rng-abstract';\nimport { _handleStartEnd } from './util/options';\nimport { dfArrayIndexOne } from './array-index-one';\nimport { ITSArrayListMaybeReadonly } from 'ts-type/lib/type/base';\n\n/**\n * return index list form array\n */\nexport function dfArrayIndex<T extends ITSArrayListMaybeReadonly<unknown>>(random: IRNGLike, arr: T, size: number = 1, start: number = 0, end?: number)\n{\n\texpect(size, `size`).integer.gt(0);\n\texpect(arr.length, `arr.length`).integer.gt(0);\n\n\tconst fn = dfArrayIndexOne(random, arr, start, end);\n\n\tlet len: number;\n\n\t({\n\t\tstart,\n\t\tend,\n\t\tlen,\n\t} = _handleStartEnd(arr, start, end, true));\n\n\tlet size_runtime = Math.max(Math.min((end - start), len, size), 0);\n\n\texpect(size_runtime, `size_runtime(${size_runtime})`).lte(size).gt(0)\n\n\tsize = size_runtime;\n\n\treturn () =>\n\t{\n\t\t/**\n\t\t * reset size_runtime\n\t\t */\n\t\tsize_runtime = size;\n\n\t\tlet ids: number[] = [];\n\t\tlet prev: number;\n\n\t\tLABEL_TOP: do\n\t\t{\n\t\t\tlet i = fn()\n\n\t\t\tif (prev === i || ids.includes(i))\n\t\t\t{\n\t\t\t\tcontinue LABEL_TOP;\n\t\t\t}\n\n\t\t\tids.push(prev = i);\n\t\t\t--size_runtime;\n\t\t}\n\t\twhile (size_runtime > 0);\n\n\t\treturn ids;\n\t}\n}\n\nexport default dfArrayIndex\n","import { ITSArrayLikeWriteable } from 'ts-type/lib/generic';\nimport { TypedArray } from 'typedarray-dts';\nimport { swapAlgorithm2 } from '@lazy-random/array-algorithm';\nimport { randIndex as _randIndex } from '@lazy-random/util-distributions';\nimport { IRNGLike } from '@lazy-random/rng-abstract';\nimport { ITSArrayListMaybeReadonly } from 'ts-type/lib/type/base';\n\nexport function dfArrayShuffle<T extends ITSArrayLikeWriteable<any> | TypedArray | Buffer | ITSArrayListMaybeReadonly<any>>(random: IRNGLike, arr: T, overwrite?: boolean): () => T\n{\n\tconst randIndex = (len: number) =>\n\t{\n\t\treturn _randIndex(random, len)\n\t};\n\n\tif (!overwrite)\n\t{\n\t\tlet cloneArrayLike: (arr: T) => T;\n\n\t\tif (Buffer.isBuffer(arr))\n\t\t{\n\t\t\t// @ts-ignore\n\t\t\tcloneArrayLike = (arr) =>\n\t\t\t{\n\t\t\t\t// @ts-ignore\n\t\t\t\treturn Buffer.from(arr)\n\t\t\t};\n\t\t}\n\t\telse\n\t\t{\n\t\t\tcloneArrayLike = (arr) =>\n\t\t\t{\n\t\t\t\t// @ts-ignore\n\t\t\t\treturn arr.slice()\n\t\t\t};\n\t\t}\n\n\t\treturn (): T =>\n\t\t{\n\t\t\treturn swapAlgorithm2(cloneArrayLike(arr), true, randIndex)\n\t\t}\n\t}\n\n\treturn (): T =>\n\t{\n\t\treturn swapAlgorithm2(arr, true, randIndex)\n\t}\n}\n\ndfArrayShuffle.memoizable = false;\n\nexport default dfArrayShuffle;\n\n\n","import { expect } from '@lazy-random/expect';\nimport { randIndex as _randIndex } from '@lazy-random/util-distributions';\nimport { IRNGLike } from '@lazy-random/rng-abstract';\nimport { ITSArrayListMaybeReadonly } from 'ts-type/lib/type/base';\n\nexport interface IRandIndex\n{\n\t(len: number): number\n\t(len: number, ...argv): number\n\t(...argv): number\n}\n\nexport interface IArrayUniqueOutOfLimitCallback<T extends unknown>\n{\n\t(arr: ITSArrayListMaybeReadonly<T>, limit: number, loop: boolean, fn: IRandIndex): T[] | boolean | void\n}\n\nexport function dfArrayUnique<T extends unknown>(random: IRNGLike, arr: ITSArrayListMaybeReadonly<T>, limit?: number, loop?: boolean, fnRandIndex?: IRandIndex, fnOutOfLimit?: IArrayUniqueOutOfLimitCallback<T>)\n{\n\tconst randIndex = (len: number) =>\n\t{\n\t\treturn _randIndex(random, len)\n\t};\n\n\tlet clone = arr.slice();\n\n\tlimit = Math.min(limit || clone.length, clone.length);\n\n\tfnRandIndex = fnRandIndex || randIndex;\n\tloop = !!loop;\n\n\t//ow(limit, ow.number.integer.gt(0));\n\t//ow(fnRandIndex, ow.function);\n\n\texpect(limit, `limit`).integer.gt(0)\n\texpect(fnRandIndex, `fnRandIndex`).function()\n\n\tlet count = limit;\n\tlet len: number;\n\n\tconst _fnClone = function _fnClone(arr: ITSArrayListMaybeReadonly<T>)\n\t{\n\t\tclone = arr.slice();\n\t\tcount = limit;\n\t\tlen = clone.length;\n\t}\n\n\treturn () =>\n\t{\n\t\tlen = clone.length;\n\n\t\tif (len === 0 || count-- === 0)\n\t\t{\n\t\t\tlet _loop: boolean = loop;\n\n\t\t\tif (fnOutOfLimit)\n\t\t\t{\n\t\t\t\tlet ret = fnOutOfLimit(arr, limit, loop, fnRandIndex);\n\n\t\t\t\tif (Array.isArray(ret) && ret.length > 0)\n\t\t\t\t{\n\t\t\t\t\t_fnClone(ret);\n\n\t\t\t\t\t_loop = null;\n\t\t\t\t}\n\t\t\t\telse if (ret == true)\n\t\t\t\t{\n\t\t\t\t\t_loop = true;\n\t\t\t\t}\n\t\t\t\telse if (typeof ret !== 'undefined')\n\t\t\t\t{\n\t\t\t\t\t_loop = false\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (_loop)\n\t\t\t{\n\t\t\t\t_fnClone(arr)\n\t\t\t}\n\t\t\telse if (_loop !== null)\n\t\t\t{\n\t\t\t\tthrow new RangeError(`can't call arrayUnique > ${limit} times`)\n\t\t\t}\n\t\t}\n\n\t\tconst i = fnRandIndex(len);\n\n\t\treturn clone\n\t\t\t.splice(i, 1)[0]\n\t\t\t;\n\t}\n}\n\nexport default dfArrayUnique\n","import { dfUniformByte, dfUniformFloat, dfUniformInt } from '@lazy-random/df-uniform';\nimport { expect } from '@lazy-random/expect';\nimport { IArrayInput02 } from '@lazy-random/shared-lib';\nimport { isUnset } from '@lazy-random/shared-lib';\nimport { IRNGLike } from '@lazy-random/rng-abstract';\n\nexport function dfArrayFill(random: IRNGLike, min?: number, max?: number, float?: boolean)\n{\n\tlet fn: () => number;\n\n\t{\n\t\tlet min_unset = isUnset(min);\n\t\tlet max_unset = isUnset(max);\n\n\t\tif (max_unset && min_unset)\n\t\t{\n\t\t\tfn = dfUniformByte(random);\n\t\t}\n\t\telse if (float)\n\t\t{\n\t\t\tfn = dfUniformFloat(random, min, max);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tfn = dfUniformInt(random, min, max);\n\t\t}\n\n\t\tmin = void 0;\n\t\tmax = void 0;\n\t}\n\n\texpect(fn).function();\n\n\treturn <T extends IArrayInput02<number>>(arr: T) =>\n\t{\n\t\tlet i = arr.length;\n\t\twhile (i--)\n\t\t{\n\t\t\tarr[i] = fn();\n\t\t}\n\t\treturn arr\n\t}\n}\n\nexport default dfArrayFill\n"],"names":["_handleStartEnd","arr","start","end","disableCheck","_end","len","length","enableCheck","Math","max","floor","expect","integer","gt","min","gte","lte","lt","dfArrayIndexOne","random","int","dfArrayIndex","size","fn","size_runtime","prev","ids","i","includes","push","dfArrayShuffle","overwrite","randIndex","_randIndex","cloneArrayLike","Buffer","isBuffer","from","slice","swapAlgorithm2","dfArrayUnique","limit","loop","fnRandIndex","fnOutOfLimit","clone","function","count","_fnClone","_loop","ret","Array","isArray","RangeError","splice","dfArrayFill","float","min_unset","isUnset","max_unset","dfUniformByte","dfUniformFloat","dfUniformInt","memoizable"],"mappings":"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"}