Advertisement
Guest User

Untitled

a guest
Aug 29th, 2015
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.17 KB | None | 0 0
  1. const program = {
  2.  
  3. // Greatest common denominator
  4. gcd(a, b){
  5. return b ? this.gcd(b, a%b) : a;
  6. },
  7.  
  8. // Least common multiple
  9. lcm(...A) {
  10. var n = A.length, a = Math.abs(A[0]);
  11. for (var i = 1; i < n; i++)
  12. { var b = Math.abs(A[i]), c = a;
  13. while (a && b){ a > b ? a %= b : b %= a; }
  14. a = Math.abs(c*A[i])/(a+b);
  15. }
  16. return a;
  17. },
  18.  
  19. boardOfSize(n) {
  20. let numbers = [];
  21.  
  22. for (let row = 1; row <= n; row++) {
  23. for (let column = 1; column <= n; column++) {
  24. numbers.push({
  25. nominator: column,
  26. denominator: column + row
  27. });
  28. }
  29. }
  30.  
  31. return numbers;
  32. },
  33.  
  34. denominatorsForBoard(board) {
  35. return board.map( i => i.denominator );
  36. },
  37.  
  38. lcmForBoard(board) {
  39. let denominators = this.denominatorsForBoard(board);
  40.  
  41. //console.log('denominators', denominators);
  42. return this.lcm(...denominators);
  43. },
  44.  
  45. boardToCommonDenominator(board) {
  46. let lcm = this.lcmForBoard(board);
  47.  
  48. //console.log('lcm', lcm);
  49.  
  50. return board.map( (item) => {
  51. let multiplier = lcm / item.denominator;
  52. return {
  53. nominator: item.nominator * multiplier,
  54. denominator: lcm
  55. }
  56. });
  57. },
  58.  
  59. sumBoardWithCommonDenominators(board) {
  60. return board.reduce( (a, b) => {
  61. if (!a.nominator === b.nominator) { throw "Denominators not common"; }
  62. return {
  63. nominator: a.nominator + b.nominator,
  64. denominator: a.denominator
  65. };
  66. });
  67. },
  68.  
  69. reduceFraction(fraction){
  70. //console.log('fraction', fraction);
  71. let gcd = this.gcd(fraction.nominator, fraction.denominator);
  72. //console.log('gcd', gcd);
  73. return {
  74. nominator: fraction.nominator / gcd,
  75. denominator: fraction.denominator / gcd
  76. };
  77. }
  78. }
  79.  
  80.  
  81.  
  82. function game(n) {
  83. console.log('----------------------', n);
  84. if (n < 1) { return [0]; }
  85. let board = program.boardOfSize(n);
  86. board = program.boardToCommonDenominator(board);
  87. let sum = program.sumBoardWithCommonDenominators(board);
  88. sum = program.reduceFraction(sum);
  89.  
  90. //console.log('sum', sum);
  91.  
  92. let result = [sum.nominator];
  93. if (sum.denominator > 1) { result.push(sum.denominator); }
  94.  
  95. return result;
  96. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement