-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
1 lines (1 loc) · 8.95 KB
/
index.js
1
!function(n,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(n=n||self).JustMyLuck=t()}(this,(function(){"use strict";var n=function(n){this.random=n},t={random:{configurable:!0}};t.random.get=function(){return Math.random},n.extend=function(n){var t=this;Object.entries(n).forEach((function(n){var e=n[0],i=n[1];t[e]=i,Object.defineProperty(t.prototype,e,{get:function(){return this.constructor[e]}})}))},Object.defineProperties(n,t),n.extend({boolean:function(){return this.random()<.5}}),n.extend({booleanWeighted:function(n){return n>0&&(!(n<1/0)||(1-this.random())*(1+n)>1)}}),n.extend({chance:function(n){return n>0&&(!(n<1)||this.random()<n)}}),n.extend({float:function(n,t,e){var i=this;if(void 0===e&&(e=!1),e){if(n===t)return n;var r,u=function(){return(r=i.float(n,t))===n};return(u()||u())&&this.boolean()&&(r=t),r}if(n<t){var o=n+(t-n)*this.random();return o>n&&o<t?o:n}throw new RangeError}}),n.extend({integer:function(n,t,e){return void 0===e&&(e=!1),n=Math.ceil(n),t=Math.floor(t),e&&t++,t-n==1?n:Math.floor(this.float(n,t))}}),n.extend({date:function(n,t,e){return new Date(this.integer(n.getTime(),t.getTime(),e))}});var e,i=624;function r(n){return n&&function(n){return Number.isSafeInteger(n)&&!function(n){return n<0}(n)}(n.length)}function u(n){return r(n)?n:Array.from(n)}Object.assign(n,{MersenneTwister:function(n){for(var t=[n],e=1;e<i;e++)t[e]=1812433253*(t[e-1]^t[e-1]>>30)+e;var r=0;return function(){if(!r)for(var n=0;n<i;n++){var e=(2147483648&t[n])+(2147483647&t[(n+1)%i]),u=e>>1;e%2&&(u^=2567483615),t[n]=t[(n+397)%i]^u}var o=t[r];return o^=o>>11,o^=o<<7&2636928640,o^=o<<15&4022730752,r=(r+1)%i,(o^=o>>18)/2147483649}}}),n.extend({pickIndex:function(n){return this.integer(0,n.length)}}),n.extend({pick:function(n){var t=u(n);return t[this.pickIndex(t)]},single:(e=!0,function(){for(var n,t=[],i=arguments.length;i--;)t[i]=arguments[i];return e&&(console.warn("[JustMyLuck] The function `.single` is deprecated. Please use `.pick` instead."),e=!1),(n=this).pick.apply(n,t)})}),n.extend({pickCombination:function(n,t){var e=u(n),i=e.length;if(i>1&&t>1){if(t<i/2){for(var r=[],o=0;t>0&&i>0;o++,i--)this.chance(t/i)&&(r.push(e[o]),t--);return r}e===n&&(e=Array.from(e));for(var a=i-t;a>0;a--){var c=this.pickIndex(e);e.splice(c,1)}return e}return i>0&&t>0?[this.pick(e)]:[]},combination:function(){var n=!0;return function(){for(var t,e=[],i=arguments.length;i--;)e[i]=arguments[i];return n&&(console.warn("[JustMyLuck] The function `.combination` is deprecated. Please use `.pickCombination` instead."),n=!1),(t=this).pickCombination.apply(t,e)}}()});var o=Array.isArray;function a(n){return o(n)?n:Array.from(n)}function c(n){return n.reduce((function(n,t){return n+t}),0)}function f(n){var t=function(){for(var e=[],i=arguments.length;i--;)e[i]=arguments[i];return n.call.apply(n,[this,t].concat(e))};return t}function h(n){return Array.from({length:n})}n.extend({pickWeighted:function(n){var t,e,i=[],r=[],u=[];if(a(n).forEach((function(n){var t=n[0],e=n[1];e>0?e<1/0?i.push([t,e]):r.push(t):u.push(t)})),r.length)return this.pick(r);if(i.length){var o=[],f=i.sort((function(n,t){return t[1]-n[1]})).map((function(n){var t=n[0],e=n[1];return o.push(e),t})),h=o[0];if((t=o)[(e=t,e.length-1)]===h)return this.pick(f);var s=c(o=o.map((function(n){return n/h}))),p=this.float(0,s),l=o.findIndex((function(n){return(p-=n)<0}));return l<0&&(l=0),f[l]}return this.pick(u)},singleWeighted:function(){var n=!0;return function(){for(var t,e=[],i=arguments.length;i--;)e[i]=arguments[i];return n&&(console.warn("[JustMyLuck] The function `.singleWeighted` is deprecated. Please use `.pickWeighted` instead."),n=!1),(t=this).pickWeighted.apply(t,e)}}()}),n.extend({pickCombinationWeighted:function(n,t){var e=this,i=[],r=[],u=[],o=[];a(n).forEach((function(n,t){var e=n[0],a=n[1];o.push(e),a>0?a<1/0?i.push([t,a]):r.push(t):u.push(t)}));var h=new Set;return t>0&&r.length&&this.pickCombination(r,t).forEach((function(n){h.add(n),t--})),function(){var n,r,u=i.length;return u>0&&t>0?e.pickWeighted((n=i,r=Math.min(t,u),n.length<r?[]:f((function(n,t,e){if(--e<0)return[[]];var i=[];t=t.slice();for(var r=function(){var r=t.shift();n(t,e).forEach((function(n){n.unshift(r),i.push(n)}))};t.length-e;)r();return i}))(n,r)).map((function(n){return[n.map((function(n){return n[0]})),c(n.map((function(n){return n[1]})))]}))):[]}().forEach((function(n){h.add(n),t--})),t>0&&u.length&&this.pickCombination(u,t).forEach((function(n){h.add(n)})),o.filter((function(n,t){return h.has(t)}))},combinationWeighted:function(){var n=!0;return function(){for(var t,e=[],i=arguments.length;i--;)e[i]=arguments[i];return n&&(console.warn("[JustMyLuck] The function `.combinationWeighted` is deprecated. Please use `.pickCombinationWeighted` instead."),n=!1),(t=this).pickCombinationWeighted.apply(t,e)}}()}),n.extend({pickMulticombination:function(n,t){var e=u(n),i=e.length;if(t>0){if(i>1){for(var r=[],o=0;t>0&&i>0;)this.chance(t/(t+i-1))?(r.push(e[o]),t--):(o++,i--);return r}if(i>0){var a=e[0];return h(t).fill(a)}}return[]},multicombination:function(){var n=!0;return function(){for(var t,e=[],i=arguments.length;i--;)e[i]=arguments[i];return n&&(console.warn("[JustMyLuck] The function `.multicombination` is deprecated. Please use `.pickMulticombination` instead."),n=!1),(t=this).pickMulticombination.apply(t,e)}}()}),n.extend({pickMulticombinationWeighted:function(n,t){var e,i,r=[],u=[],o=[];return a(n).forEach((function(n){var t=n[0],e=n[1];e>0?e<1/0?r.push([t,e]):u.push(t):o.push(t)})),u.length?this.pickMulticombination(u,t):r.length?this.pickWeighted((e=r,i=t,f((function(n,t,e){if(--e<0)return[[]];var i=[];t=t.slice();for(var r=function(){var r=t[0];n(t,e).forEach((function(n){n.unshift(r),i.push(n)})),t.shift()};t.length;)r();return i}))(e,i)).map((function(n){return[n.map((function(n){return n[0]})),c(n.map((function(n){return n[1]})))]}))):this.pickMulticombination(o,t)},multicombinationWeighted:function(){var n=!0;return function(){for(var t,e=[],i=arguments.length;i--;)e[i]=arguments[i];return n&&(console.warn("[JustMyLuck] The function `.multicombinationWeighted` is deprecated. Please use `.pickMulticombinationWeighted` instead."),n=!1),(t=this).pickMulticombinationWeighted.apply(t,e)}}()}),n.extend({pickMultipermutation:function(n,t){var e=u(n),i=e.length;if(t>0){if(i>1){for(var r=[];t>0;t--)r.push(this.pick(e));return r}if(i>0){var o=e[0];return h(t).fill(o)}}return[]},multipermutation:function(){var n=!0;return function(){for(var t,e=[],i=arguments.length;i--;)e[i]=arguments[i];return n&&(console.warn("[JustMyLuck] The function `.multipermutation` is deprecated. Please use `.pickMultipermutation` instead."),n=!1),(t=this).pickMultipermutation.apply(t,e)}}()}),n.extend({pickMultipermutationWeighted:function(n,t){var e,i,r=[],u=[],o=[];return a(n).forEach((function(n){var t=n[0],e=n[1];e>0?e<1/0?r.push([t,e]):u.push(t):o.push(t)})),u.length?this.pickMultipermutation(u,t):r.length?this.pickWeighted((e=r,i=t,f((function(n,t,e){if(--e<0)return[[]];var i=[];return t.forEach((function(r){n(t,e).forEach((function(n){n.unshift(r),i.push(n)}))})),i}))(e,i)).map((function(n){return[n.map((function(n){return n[0]})),c(n.map((function(n){return n[1]})))]}))):this.pickMultipermutation(o,t)},multipermutationWeighted:function(){var n=!0;return function(){for(var t,e=[],i=arguments.length;i--;)e[i]=arguments[i];return n&&(console.warn("[JustMyLuck] The function `.multipermutationWeighted` is deprecated. Please use `.pickMultipermutationWeighted` instead."),n=!1),(t=this).pickMultipermutationWeighted.apply(t,e)}}()}),n.extend({shuffleInPlace:function(n){for(var t,e=n.length;e>1;){var i=this.integer(0,e);e--,t=[n[i],n[e]],n[e]=t[0],n[i]=t[1]}return n}}),n.extend({pickPermutation:function(n,t){return this.shuffleInPlace(this.pickCombination(n,t))},permutation:function(){var n=!0;return function(){for(var t,e=[],i=arguments.length;i--;)e[i]=arguments[i];return n&&(console.warn("[JustMyLuck] The function `.permutation` is deprecated. Please use `.pickPermutation` instead."),n=!1),(t=this).pickPermutation.apply(t,e)}}()}),n.extend({pickPermutationWeighted:function(n,t){return this.shuffleInPlace(this.pickCombinationWeighted(n,t))},permutationWeighted:function(){var n=!0;return function(){for(var t,e=[],i=arguments.length;i--;)e[i]=arguments[i];return n&&(console.warn("[JustMyLuck] The function `.permutationWeighted` is deprecated. Please use `.pickPermutationWeighted` instead."),n=!1),(t=this).pickPermutationWeighted.apply(t,e)}}()}),n.extend({shuffle:function(n){return this.shuffleInPlace(Array.from(n))}});var s="abcdefghijklmnopqrstuvwxyz".toUpperCase(),p="abcdefghijklmnopqrstuvwxyz"+s,l=p+"0123456789",d=s+"0123456789";return Object.assign(n,{alphabetic:p,alphanumeric:l,lowerCasedAlphabetic:"abcdefghijklmnopqrstuvwxyz",lowerCasedAlphanumeric:"abcdefghijklmnopqrstuvwxyz0123456789",numeric:"0123456789",upperCasedAlphabetic:s,upperCasedAlphanumeric:d}),n.extend({string:function(n,t){var e=u(n),i=e.length;if(t>0){if(i>1){for(var r="";t>0;t--)r+=this.pick(e);return r}if(i>0)return(""+e[0]).repeat(t)}return""}}),n}));