Advertisement
Guest User

Untitled

a guest
Jun 29th, 2017
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.40 KB | None | 0 0
  1. // array[i] gives the number of players on team i
  2. function permuteTeams(array, callback)
  3. {
  4. let n = 0;
  5. result = []
  6. for (let i = 0; i < array.length; i++)
  7. {
  8. n += array[i];
  9. result = result.concat(new Array(array[i]).fill(i));
  10. }
  11. teamsUsed = clone(array);
  12. while (true)
  13. {
  14. callback(clone(array));
  15. let x = n-2;
  16. teamsUsed[result[x+1]] -= 1;
  17. teamsUsed[result[x]] -= 1;
  18. while (true)
  19. {
  20. if (result[x] < result[x+1])
  21. {
  22. firstX = teamsUsed[result[x]] == 0;
  23. var swap = 9999;
  24. var validSwap = false;
  25. for (let y = x+1; y < n; y++)
  26. {
  27. if (result[y] < swap && result[y] > result[x] && (!firstX || array[result[y]] != array[result[x]]))
  28. {
  29. if (teamsUsed[result[y]] == 0)
  30. {
  31. let ok = true;
  32. for (let t = 0; t < result[y]; t++)
  33. {
  34. if (teamsUsed[t] == 0 && categories[result[y]] == categories[t])
  35. {
  36. ok = false;
  37. }
  38. }
  39. if (ok)
  40. {
  41. swap = result[y];
  42. validSwap = true;
  43. }
  44. }
  45. }
  46. }
  47. if (validSwap)
  48. {
  49. teamsUsed[swap]++;
  50. result[x] = swap;
  51. z = 0;
  52. for (y = x+1; y < n; y++)
  53. {
  54. while (teamsUsed[z] == categories[z])
  55. z++;
  56. result[y] = z;
  57. teamsUsed[z]++;
  58. }
  59. break;
  60. }
  61. }
  62. x--;
  63. if (x < 0)
  64. break;
  65. teamsUsed[result[x]]--;
  66. }
  67. if (x < 0)
  68. break;
  69. }
  70. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement