Advertisement
Prohause

Game of Epiccness

Jun 10th, 2018
163
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.14 KB | None | 0 0
  1. function game(arr, moves) {
  2. let kingdoms = {};
  3.  
  4. for (const json of arr) {
  5. if (!kingdoms.hasOwnProperty(json.kingdom)) {
  6. kingdoms[json.kingdom] = {};
  7. }
  8.  
  9. if (!kingdoms[json.kingdom].hasOwnProperty(json.general)) {
  10. kingdoms[json.kingdom][json.general] = {army: 0, won: 0, lost: 0};
  11. }
  12.  
  13. kingdoms[json.kingdom][json.general].army += json.army;
  14. }
  15.  
  16. for (const move of moves) {
  17. let [kingdom1, general1, kingdom2, general2] = move;
  18. if (kingdom1 === kingdom2) {
  19. continue;
  20. }
  21. let atacking = kingdoms[kingdom1][general1].army;
  22. let defending = kingdoms[kingdom2][general2].army;
  23.  
  24. if (atacking === defending) {
  25. continue;
  26. }
  27.  
  28. if (atacking > defending) {
  29. atacking = Math.floor(atacking * 1.10);
  30. defending = Math.floor(defending * 0.9);
  31. kingdoms[kingdom1][general1].army = atacking;
  32. kingdoms[kingdom1][general1].won += 1;
  33.  
  34. kingdoms[kingdom2][general2].army = defending;
  35. kingdoms[kingdom2][general2].lost += 1;
  36. }
  37. else {
  38. atacking = Math.floor(atacking * 0.9);
  39. defending = Math.floor(defending * 1.1);
  40. kingdoms[kingdom1][general1].army = atacking;
  41. kingdoms[kingdom1][general1].lost += 1;
  42.  
  43. kingdoms[kingdom2][general2].army = defending;
  44. kingdoms[kingdom2][general2].won += 1;
  45. }
  46. }
  47.  
  48. let result = Object.keys(kingdoms);
  49. result.sort(function (x, y) {
  50. function calculateWins(generals) {
  51. let sum = 0;
  52. let currentGen = Object.keys(generals);
  53.  
  54. for (const gen of currentGen) {
  55. sum += generals[gen].won;
  56. }
  57. return sum;
  58. }
  59.  
  60. let wins1 = calculateWins(kingdoms[x]);
  61. let wins2 = calculateWins(kingdoms[y]);
  62.  
  63. function calculateLost(generals) {
  64. let sum = 0;
  65.  
  66. let currentGen = Object.keys(generals);
  67.  
  68. for (const gen of currentGen) {
  69. sum += generals[gen].lost;
  70. }
  71.  
  72. return sum;
  73. }
  74.  
  75. if (wins2 !== wins1) {
  76. return wins2 - wins1;
  77. }
  78. else {
  79. let losses1 = calculateLost(kingdoms[x]);
  80. let losses2 = calculateLost(kingdoms[y]);
  81.  
  82. if (losses1 !== losses2) {
  83. return losses1 - losses2;
  84. }
  85. else {
  86. return x.localeCompare(y)
  87. }
  88. }
  89.  
  90. })
  91.  
  92. let victor = result[0];
  93.  
  94. console.log(`Winner: ${victor}`);
  95. let victorGenerals = kingdoms[victor];
  96. let finalOrder = Object.keys(victorGenerals).sort(function (x, y) {
  97. return victorGenerals[y].army - victorGenerals[x].army
  98. })
  99. for (const string of finalOrder) {
  100. console.log(`/\\general: ${string}`);
  101. console.log(`---army: ${victorGenerals[string].army}`);
  102. console.log(`---wins: ${victorGenerals[string].won}`);
  103. console.log(`---losses: ${victorGenerals[string].lost}`);
  104. }
  105. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement