Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const program = {
- // Greatest common denominator
- gcd(a, b){
- return b ? this.gcd(b, a%b) : a;
- },
- // Least common multiple
- lcm(...A) {
- var n = A.length, a = Math.abs(A[0]);
- for (var i = 1; i < n; i++)
- { var b = Math.abs(A[i]), c = a;
- while (a && b){ a > b ? a %= b : b %= a; }
- a = Math.abs(c*A[i])/(a+b);
- }
- return a;
- },
- boardOfSize(n) {
- let numbers = [];
- for (let row = 1; row <= n; row++) {
- for (let column = 1; column <= n; column++) {
- numbers.push({
- nominator: column,
- denominator: column + row
- });
- }
- }
- return numbers;
- },
- denominatorsForBoard(board) {
- return board.map( i => i.denominator );
- },
- lcmForBoard(board) {
- let denominators = this.denominatorsForBoard(board);
- //console.log('denominators', denominators);
- return this.lcm(...denominators);
- },
- boardToCommonDenominator(board) {
- let lcm = this.lcmForBoard(board);
- //console.log('lcm', lcm);
- return board.map( (item) => {
- let multiplier = lcm / item.denominator;
- return {
- nominator: item.nominator * multiplier,
- denominator: lcm
- }
- });
- },
- sumBoardWithCommonDenominators(board) {
- return board.reduce( (a, b) => {
- if (!a.nominator === b.nominator) { throw "Denominators not common"; }
- return {
- nominator: a.nominator + b.nominator,
- denominator: a.denominator
- };
- });
- },
- reduceFraction(fraction){
- //console.log('fraction', fraction);
- let gcd = this.gcd(fraction.nominator, fraction.denominator);
- //console.log('gcd', gcd);
- return {
- nominator: fraction.nominator / gcd,
- denominator: fraction.denominator / gcd
- };
- }
- }
- function game(n) {
- console.log('----------------------', n);
- if (n < 1) { return [0]; }
- let board = program.boardOfSize(n);
- board = program.boardToCommonDenominator(board);
- let sum = program.sumBoardWithCommonDenominators(board);
- sum = program.reduceFraction(sum);
- //console.log('sum', sum);
- let result = [sum.nominator];
- if (sum.denominator > 1) { result.push(sum.denominator); }
- return result;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement