Advertisement
Guest User

Untitled

a guest
Jul 16th, 2019
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.02 KB | None | 0 0
  1. let input = "1d6 + 2d8 + 5";
  2.  
  3. //let rollEXP = /[^ ,.+]+/gi;
  4. const rollEXP = /(?:[0-9]*d[0-9]+)|(?:[0-9]+)/gi;
  5.  
  6. let segments = input.match(rollEXP);
  7.  
  8. let max = new Array(segments.length);
  9. let min = new Array(segments.length);
  10. let avg = new Array(segments.length);
  11.  
  12. const segmentEXP = /([0-9]*)d([0-9]+)/i;
  13.  
  14. function parz(i)
  15. {
  16. let segment = segments[i];
  17.  
  18. let parts = segment.match(segmentEXP);
  19. if (parts != null)
  20. {
  21. let numDice;
  22. let numFace = parseInt(parts[2]);
  23.  
  24. if (parts[1] === "") numDice = 1;
  25. else numDice = parseInt(parts[1]);
  26.  
  27. max[i] = numFace*numDice;
  28. min[i] = numDice;
  29. avg[i] = (numDice*(numFace+1))/2;
  30. } else
  31. {
  32. min[i] = max[i] = avg[i] = parseInt(segment);
  33. }
  34. }
  35.  
  36. for (let i = 0; i < segments.length; ++i) parz(i);
  37.  
  38. function sum(array) {
  39. let t = 0;
  40. array.forEach((val) => {
  41. t += val;
  42. });
  43.  
  44. return t;
  45. }
  46.  
  47. let MAX = sum(max);
  48. let MIN = sum(min);
  49. let AVG = sum(avg);
  50.  
  51. /*
  52. For input = "1d6 + 2d8 + 5"
  53. MAX = 27
  54. MIN = 8
  55. AVG = 17.5
  56. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement