{"version":3,"sources":["../ts/modules/rng.ts"],"names":["random","minExclusive","maxExclusive","undefined","isFinite","NaN","Math","randomInt","minInclusive","maxInclusive","floor","randomElement","arr","Error","length","exports","shuffle","array","copy","let","m","Array","from","i","t","randomProperty","obj","Object","keys","pick","chances","c","r","hasOwnProperty","odds","retval","standard","stddev","mean","density","min","max","iter","randomString","charset","minLength","maxLength"],"mappings":"oEAqBA,SAAgBA,OAAQC,aAAe,EAAGC,cAEzC,OADoBC,MAAhBD,eAA4B,CAAED,aAAcC,cAAiB,CAAE,EAAGD,eAClE,CAACG,SAAUH,YAAY,GAAM,CAACG,SAAUF,YAAY,GAAsBA,cAAhBD,aAAsCI,IAE7FC,KAAKN,OAAM,GAAOE,aAAeD,cAAiBA,YAC1D,CAKA,SAAgBM,UAAWC,aAAe,EAAGC,cAE5C,OADoBN,MAAhBM,eAA4B,CAAED,aAAcC,cAAiB,CAAE,EAAGD,eAClEA,eAAiBC,aAAsBD,aACvC,CAACJ,SAAUI,YAAY,GAAM,CAACJ,SAAUK,YAAY,GAAqBA,aAAfD,aAAqCH,IAE5FC,KAAKI,MAAOV,OAAQQ,aAAcC,aAAe,CAAC,CAAE,CAC5D,CAEA,SAAgBE,cAAkBC,KACjC,GAAIA,MAAAA,IAAoC,MAAM,IAAIC,MAAO,gCAAgC,EACzF,OAAOD,IAAKL,UAAW,EAAGK,IAAIE,OAAS,CAAC,EACzC,C,4NAtCAC,QAAAC,QAAA,SAA4BC,MAAYC,KAAO,CAAA,GAE9CC,IAAIC,GADOH,MAAPC,KAAeG,MAAMC,KAAML,KAAK,EAC5BA,OAAMH,OAEd,KAAOM,CAAC,IAAK,CACZ,IAAMG,EAAIhB,UAAWa,CAAC,EACrBI,EAAIP,MAAOG,GACZH,MAAOG,GAAMH,MAAOM,GACpBN,MAAOM,GAAMC,C,CAGd,OAAOP,KACR,EAKAF,QAAAf,OAAAA,OAUAe,QAAAR,UAAAA,UAQAQ,QAAAJ,cAAAA,cAKAI,QAAAU,eAAA,SAAmCC,KAClC,OAAOf,cAAegB,OAAOC,KAAMF,GAAG,CAAE,CACzC,EAEAX,QAAAc,KAAA,SAAsBC,SACrBX,IAAIY,EAAI,EAAGC,EACX,IAAKb,IAAII,KAAKO,QAAcA,QAAQG,eAAgBV,CAAC,IACpDQ,GAAKD,QAASP,IAEfS,EAAIhC,OAAQ,EAAG+B,CAAC,EAChB,IAAKZ,IAAII,KAAKO,QAAU,GAAIA,QAAQG,eAAgBV,CAAC,IACpDS,GAAKF,QAASP,KACL,EAAI,OAAOA,CAEtB,EAEAR,QAAAmB,KAAA,SAAsBJ,SACrBX,IAAIgB,OAAmB,GAAIJ,EAAI,EAC/B,IAAKZ,IAAII,KAAKO,QAAcA,QAAQG,eAAgBV,CAAC,IACpDQ,GAAKD,QAASP,IAEf,IAAKJ,IAAII,KAAKO,QAAcA,QAAQG,eAAgBV,CAAC,IACpDY,OAAQZ,GAAMO,QAASP,GAAMQ,GAE9B,OAAOI,MACR,EAEApB,QAAAqB,SAAA,SAA0BC,OAAgBC,KAAO,EAAGC,QAAU,EAAGC,IAAcC,KAC9EtB,IAAIgB,OAAgBO,KAAO,EAC3B,EAAG,CACF,GAAa,IAATA,IAAI,GAAc,MAAM,IAAI7B,yCAA0C2B,QAAQC,MAAM,EAExF,IAAKtB,IAAII,EADTY,OAAS,EACOZ,EAAIgB,QAAS,EAAEhB,EAAIY,QAAUnC,OAAQ,CAAC,EAAG,CAAC,C,OAC1DmC,OAASA,OAASE,OAASC,KACTnC,KAAAA,IAARqC,KAAqBL,OAASK,KAAmBrC,KAAAA,IAARsC,KAAqBN,OAASM,KAClF,OAAON,MACR,EAEApB,QAAA4B,aAAA,SAA8BC,QAA4BC,UAAmBC,WAC5E,GAAIF,MAAAA,QAA4C,OAAO,KACvD,IAAM9B,OAASP,UAAWsC,UAAWC,SAAS,EAC9C3B,IAAIgB,OAAS,GACb,IAAKhB,IAAII,EAAI,EAAGA,EAAIT,OAAQ,EAAES,EAC7BY,QAAUxB,cAAeiC,OAAO,EAEjC,OAAOT,MACR","file":"rng.js","sourcesContent":["export interface IChances {\r\n\t[ choice: string ]: number;\r\n}\r\n\r\nexport function shuffle<T>( array: T[], copy = true ) {\r\n\tif( copy ) array = Array.from( array );\r\n\tlet m = array.length;\r\n\r\n\twhile( m-- ) {\r\n\t\tconst i = randomInt( m ),\r\n\t\t\tt = array[ m ];\r\n\t\tarray[ m ] = array[ i ];\r\n\t\tarray[ i ] = t;\r\n\t}\r\n\r\n\treturn array;\r\n}\r\n\r\nexport function random();\r\nexport function random( maxExclusive: number );\r\nexport function random( minExclusive: number, maxExclusive: number );\r\nexport function random( minExclusive = 1, maxExclusive?: any ) {\r\n\tif( maxExclusive == undefined ) [ minExclusive, maxExclusive ] = [ 0, minExclusive ];\r\n\tif( !isFinite( minExclusive ) || !isFinite( maxExclusive ) || minExclusive >= maxExclusive ) return NaN;\r\n\r\n\treturn Math.random() * ( maxExclusive - minExclusive ) + minExclusive;\r\n}\r\n\r\nexport function randomInt();\r\nexport function randomInt( maxInclusive: number );\r\nexport function randomInt( minInclusive: number, maxInclusive: number );\r\nexport function randomInt( minInclusive = 1, maxInclusive?: any ) {\r\n\tif( maxInclusive == undefined ) [ minInclusive, maxInclusive ] = [ 0, minInclusive ];\r\n\tif( minInclusive === maxInclusive ) return minInclusive;\r\n\tif( !isFinite( minInclusive ) || !isFinite( maxInclusive ) || minInclusive > maxInclusive ) return NaN;\r\n\r\n\treturn Math.floor( random( minInclusive, maxInclusive + 1 ) );\r\n}\r\n\r\nexport function randomElement<T>( arr: ArrayLike<T> ): T {\r\n\tif( arr === undefined || arr === null ) throw new Error( 'parameter is null or undefined' );\r\n\treturn arr[ randomInt( 0, arr.length - 1 ) ];\r\n}\r\n\r\nexport function randomProperty<T>( obj: Object ) {\r\n\treturn randomElement( Object.keys( obj ) );\r\n}\r\n\r\nexport function pick( chances: IChances ) {\r\n\tlet c = 0, r: number;\r\n\tfor( let i in chances ) if( chances.hasOwnProperty( i ) ) {\r\n\t\tc += chances[ i ];\r\n\t}\r\n\tr = random( 0, c );\r\n\tfor( let i in chances ) if( chances.hasOwnProperty( i ) ) {\r\n\t\tr -= chances[ i ];\r\n\t\tif( r <= 0 ) return i;\r\n\t}\r\n}\r\n\r\nexport function odds( chances: IChances ) {\r\n\tlet retval: IChances = {}, c = 0;\r\n\tfor( let i in chances ) if( chances.hasOwnProperty( i ) ) {\r\n\t\tc += chances[ i ];\r\n\t}\r\n\tfor( let i in chances ) if( chances.hasOwnProperty( i ) ) {\r\n\t\tretval[ i ] = chances[ i ] / c;\r\n\t}\r\n\treturn retval;\r\n}\r\n\r\nexport function standard( stddev: number, mean = 0, density = 3, min?: number, max?: number ) {\r\n\tlet retval: number, iter = 0;\r\n\tdo {\r\n\t\tif( iter++ > 100000 ) throw new Error( `Unable to satisfy random range (${min}, ${max})` );\r\n\t\tretval = 0;\r\n\t\tfor( let i = 0; i < density; ++i ) retval += random( -1, 1 );\r\n\t\tretval = retval * stddev + mean;\r\n\t} while( ( min !== undefined && retval < min ) || ( max !== undefined && retval > max ) );\r\n\treturn retval;\r\n}\r\n\r\nexport function randomString( charset: ArrayLike<string>, minLength: number, maxLength: number ) {\r\n\tif( charset === undefined || charset === null ) return null;\r\n\tconst length = randomInt( minLength, maxLength );\r\n\tlet retval = '';\r\n\tfor( let i = 0; i < length; ++i ) {\r\n\t\tretval += randomElement( charset );\r\n\t}\r\n\treturn retval;\r\n}"]}