welsonjs/lib/rand.js

125 lines
3.1 KiB
JavaScript
Raw Normal View History

2022-01-15 12:37:07 +00:00
// rand.js
2022-01-08 17:52:19 +00:00
2022-06-22 13:03:20 +00:00
var FILE = require("lib/file");
2022-01-15 10:37:49 +00:00
function randomize() {
return Math.random();
}
2022-01-08 16:42:00 +00:00
function getInt(min, max) {
min = Math.ceil(min);
max = Math.floor(max);
2022-01-15 10:37:49 +00:00
return Math.floor(randomize() * (max - min + 1)) + min;
2022-01-08 16:42:00 +00:00
}
2022-06-28 03:59:35 +00:00
function getSeed() {
2022-06-28 04:01:47 +00:00
return getInt(1000000000, 9999999999);
2022-06-28 03:59:35 +00:00
}
2022-01-08 16:42:00 +00:00
function one(arr) {
2022-01-08 17:42:45 +00:00
return arr[getInt(0, arr.length - 1)];
}
function makeString(length, characterNames) {
var result = '';
var characters = '';
for (var i = 0; i < characterNames.length; i++) {
switch (characterNames[i]) {
case 'uppercase':
characters += 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
break;
case 'lowercase':
characters += 'abcdefghijklmnopqrstuvwxyz';
break;
case 'number':
characters += '0123456789';
break;
2022-04-25 07:13:49 +00:00
case 'base64':
characters += 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
break;
case 'hex':
characters += '0123456789abcdef';
break;
2022-01-08 17:42:45 +00:00
default:
characters += characterNames[i];
}
}
var charactersLength = characters.length;
for ( var i = 0; i < length; i++ ) {
2022-01-15 10:37:49 +00:00
result += characters.charAt(Math.floor(randomize() * charactersLength));
2022-01-08 17:42:45 +00:00
}
return result;
2022-01-08 16:42:00 +00:00
}
2022-01-15 10:37:49 +00:00
// UUID v4
function uuidv4() {
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
var r = randomize() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);
return v.toString(16);
});
}
2022-01-15 12:37:07 +00:00
function shuffle(arr) {
2022-01-15 12:35:14 +00:00
return arr.sort(function() {
return randomize() - 0.5;
});
}
2022-01-15 12:41:31 +00:00
function rotate(arr, i) {
return arr[i % arr.length];
2022-01-15 12:42:33 +00:00
}
2022-01-15 12:41:31 +00:00
2022-05-02 14:56:42 +00:00
function sample(arr, length) {
return shuffle(arr).slice(0, length);
}
2022-06-22 13:43:57 +00:00
function discardCallback(callback, args, filename) {
2022-06-22 13:03:20 +00:00
if (typeof callback !== "function") return;
var discarded = splitLn(FILE.readFile(filename, FILE.CdoCharset.CdoUTF_8));
2022-06-22 13:43:57 +00:00
var chosen = callback.apply(null, args);
2022-06-22 13:03:20 +00:00
while (chosen == null || discarded.indexOf(chosen) > -1) {
2022-06-22 13:43:57 +00:00
console.log("다른 항목을 찾습니다.");
chosen = callback.apply(null, args);
2022-06-22 13:03:20 +00:00
}
FILE.appendFile(filename, "\r\n" + chosen, FILE.CdoCharset.CdoUTF_8);
2022-06-22 13:03:20 +00:00
return chosen;
}
function discardOne(arr, filename) {
var discarded = splitLn(FILE.readFile(filename, FILE.CdoCharset.CdoUTF_8));
2022-06-22 13:43:57 +00:00
var _arr = arr.reduce(function(a, x) {
if (discarded.indexOf(x) < 0) a.push(x);
return a;
}, []);
return discardCallback(one, [_arr], filename);
2022-06-22 13:03:20 +00:00
}
2022-01-15 10:37:49 +00:00
exports.randomize = randomize;
2022-01-08 16:42:00 +00:00
exports.getInt = getInt;
2022-06-28 03:59:35 +00:00
exports.getSeed = getSeed;
2022-01-08 16:42:00 +00:00
exports.one = one;
2022-01-08 17:42:45 +00:00
exports.makeString = makeString;
2022-01-15 10:37:49 +00:00
exports.uuidv4 = uuidv4;
2022-01-15 12:37:07 +00:00
exports.shuffle = shuffle;
2022-01-15 12:41:31 +00:00
exports.rotate = rotate;
2022-05-02 14:56:42 +00:00
exports.sample = sample;
2022-06-22 13:03:20 +00:00
exports.discardOne = discardOne;
exports.discardCallback = discardCallback;
2022-01-08 16:42:00 +00:00
exports.VERSIONINFO = "Random Module (rand.js) version 0.6.1";
2022-01-08 16:42:00 +00:00
exports.global = global;
exports.require = global.require;