Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const readline = require('readline');
- const rl = readline.createInterface({
- input: process.stdin,
- output: process.stdout
- });
- // Формат входных данных:
- // [{тип, вероятность, аргументы}, ...]
- // Экспоненциальное - минимум, максимум, лямбда
- // Дискретное - число1, число2, число3, ...
- // Равномерное - минимум, максимум
- // Нормальное - минимум, максимум, дисперсия
- // Пример входных данных:
- // [{exp, 50, 0, 10, 1}; {dis, 25, 0.1, 0.3, 0.6}; {unf, 20, 2, 5}; {nrm, 5, 0.5, 1.5, 0.3}]
- var c = [];
- var r; // Результат
- function f(x, d, c) {
- var res = 0.0;
- for (var i = 0.0; i < x; i += 0.001) {
- res += (1 / Math.sqrt(2 * Math.PI * d)) * Math.exp(-(i - c) * (i - c) / 2 / d) * 0.001;
- }
- return res;
- }
- function num(q) {
- if (q.type === "exp") {
- return 1- Math.exp(-q.lambda * (Math.random() * (q.max - q.min) + q.min));
- }
- if (q.type === "unf") {
- return (Math.random() * (q.max - q.min)) / (q.max - q.min);
- }
- if (q.type === "dis") {
- return q.nums[Math.floor(Math.random() * q.nums.length)];
- }
- if (q.type === "nrm") {
- return f(Math.random() * (q.max - q.min) + q.min, q.disp, (q.max - q.min) / 2);
- }
- }
- rl.on('line', function(answer) {
- c = answer.substring(1, answer.length - 1).split(';');
- c = c.map(function(s) {
- return s.trim();
- });
- for (var i = 0; i < c.length; i++) {
- c[i] = c[i].substring(1, c[i].length - 1).split(',');
- c[i] = c[i].map(function(s) {
- return s.trim();
- });
- c[i].type = c[i][0];
- c[i].p = parseFloat(c[i][1]);
- if (c[i].type === "unf") {
- c[i].min = parseFloat(c[i][2]);
- c[i].max = parseFloat(c[i][3]);
- } // непрерывное равномерное
- if (c[i].type === "exp") {
- c[i].min = parseFloat(c[i][2]);
- c[i].max = parseFloat(c[i][3]);
- c[i].lambda = parseFloat(c[i][4]);
- } // экспоненциальное
- if (c[i].type === "dis") {
- c[i].nums = [];
- for (var j = 2; j < c[i].length; j++) {
- c[i].nums[c[i].nums.length] = parseFloat(c[i][j]);
- }
- } // дискретное
- if (c[i].type === "nrm") {
- c[i].min = parseFloat(c[i][2]);
- c[i].max = parseFloat(c[i][3]);
- c[i].disp = parseFloat(c[i][4]);
- } // нормальное
- }
- i = -1;
- var k = Math.random() * 100;
- while (k > 0) {
- i++;
- k -= c[i].p;
- }
- r = num(c[i]);
- console.log(r);
- c = [];
- rl.close();
- process.exit();
- });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement