Guest User

Untitled

a guest
May 25th, 2018
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.87 KB | None | 0 0
  1. export let M = 0
  2. export let F = 0
  3. export type gender = 'm' | 'f'
  4.  
  5. export function add(gender: gender) {
  6. switch (gender) {
  7. case 'm':
  8. return M++;
  9. case 'f':
  10. return F++;
  11. default:
  12. throw new Error('unknown gender:' + gender)
  13. }
  14. }
  15.  
  16. export function join(gender: gender) {
  17. if (M === F
  18. || (M > F && gender === 'f')
  19. || (F > M && gender === 'm')
  20. ) {
  21. return add(gender);
  22. }
  23. if (M * 2 === F || F * 2 === M) {
  24. return;
  25. }
  26. let prob = (gender === 'f' ? M : F) / (M + F);
  27. if (Math.random() < prob) {
  28. return add(gender)
  29. }
  30. }
  31.  
  32. export function report(msg) {
  33. let R = F / M;
  34. if (R < 1) {
  35. R = M / F
  36. }
  37. R = Math.round(R * 100) / 100;
  38. console.log({F, M, R}, msg || '')
  39. }
  40.  
  41. export function itr(gender: gender) {
  42. let res = join(gender);
  43. let msg = (res === undefined ? 'rejected' : 'accepted') + ' ' + gender;
  44. report(msg);
  45. }
  46.  
  47. export function determine(f: number, m: number) {
  48. F = 0;
  49. M = 0;
  50. if (f === m) {
  51. F = f;
  52. M = m;
  53. return 'all accepted';
  54. }
  55. if (f > m) {
  56. F = M = m;
  57. f -= m;
  58. m = 0;
  59. }
  60. if (m > f) {
  61. F = M = f;
  62. m -= f;
  63. f = 0;
  64. }
  65. for (let i = 0; i < f; i++) {
  66. join('f')
  67. }
  68. for (let i = 0; i < m; i++) {
  69. join('m')
  70. }
  71. }
  72.  
  73. export function main_sample_case() {
  74. let f = 50;
  75. let m = 100;
  76. determine(f, m);
  77. report('all done');
  78. }
  79.  
  80. export function main_n(N?: number) {
  81. for (let n = 1; !N || n < N; n++) {
  82. let f = 0;
  83. let m = 0;
  84. for (let i = 0; i < n; i++) {
  85. let gen: gender = Math.random() < 1 / 3 ? 'f' : 'm';
  86. if (gen === 'f') {
  87. f++
  88. } else {
  89. m++
  90. }
  91. }
  92. determine(f, m);
  93. report({n, f, m})
  94. }
  95. }
  96.  
  97. main_n();
Add Comment
Please, Sign In to add comment