Advertisement
Guest User

Untitled

a guest
Apr 26th, 2017
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.76 KB | None | 0 0
  1. const readline = require('readline');
  2.  
  3. const rl = readline.createInterface({
  4. input: process.stdin,
  5. output: process.stdout
  6. });
  7.  
  8.  
  9. // Формат входных данных:
  10. // [{тип, вероятность, аргументы}, ...]
  11. // Экспоненциальное - минимум, максимум, лямбда
  12. // Дискретное - число1, число2, число3, ...
  13. // Равномерное - минимум, максимум
  14. // Нормальное - минимум, максимум, дисперсия
  15. // Пример входных данных:
  16. // [{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}]
  17. var c = [];
  18. var r; // Результат
  19.  
  20. function f(x, d, c) {
  21. var res = 0.0;
  22. for (var i = 0.0; i < x; i += 0.001) {
  23. res += (1 / Math.sqrt(2 * Math.PI * d)) * Math.exp(-(i - c) * (i - c) / 2 / d) * 0.001;
  24. }
  25. return res;
  26. }
  27.  
  28. function num(q) {
  29. if (q.type === "exp") {
  30. return 1- Math.exp(-q.lambda * (Math.random() * (q.max - q.min) + q.min));
  31. }
  32. if (q.type === "unf") {
  33. return (Math.random() * (q.max - q.min)) / (q.max - q.min);
  34. }
  35. if (q.type === "dis") {
  36. return q.nums[Math.floor(Math.random() * q.nums.length)];
  37. }
  38. if (q.type === "nrm") {
  39. return f(Math.random() * (q.max - q.min) + q.min, q.disp, (q.max - q.min) / 2);
  40. }
  41. }
  42.  
  43. rl.on('line', function(answer) {
  44. c = answer.substring(1, answer.length - 1).split(';');
  45. c = c.map(function(s) {
  46. return s.trim();
  47. });
  48. for (var i = 0; i < c.length; i++) {
  49. c[i] = c[i].substring(1, c[i].length - 1).split(',');
  50. c[i] = c[i].map(function(s) {
  51. return s.trim();
  52. });
  53. c[i].type = c[i][0];
  54. c[i].p = parseFloat(c[i][1]);
  55. if (c[i].type === "unf") {
  56. c[i].min = parseFloat(c[i][2]);
  57. c[i].max = parseFloat(c[i][3]);
  58. } // непрерывное равномерное
  59. if (c[i].type === "exp") {
  60. c[i].min = parseFloat(c[i][2]);
  61. c[i].max = parseFloat(c[i][3]);
  62. c[i].lambda = parseFloat(c[i][4]);
  63. } // экспоненциальное
  64. if (c[i].type === "dis") {
  65. c[i].nums = [];
  66. for (var j = 2; j < c[i].length; j++) {
  67. c[i].nums[c[i].nums.length] = parseFloat(c[i][j]);
  68. }
  69. } // дискретное
  70. if (c[i].type === "nrm") {
  71. c[i].min = parseFloat(c[i][2]);
  72. c[i].max = parseFloat(c[i][3]);
  73. c[i].disp = parseFloat(c[i][4]);
  74. } // нормальное
  75. }
  76. i = -1;
  77. var k = Math.random() * 100;
  78. while (k > 0) {
  79. i++;
  80. k -= c[i].p;
  81. }
  82. r = num(c[i]);
  83. console.log(r);
  84. c = [];
  85. rl.close();
  86. process.exit();
  87. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement