From 8f80dbbd9e9f5d4d62888b327e2abd23337588ad Mon Sep 17 00:00:00 2001 From: romanPashnitskyi Date: Mon, 12 Nov 2018 18:20:45 +0200 Subject: [PATCH] finish home task --- .babelrc | 3 ++ .travis.yml | 3 ++ package.json | 4 +++ src/dragon-curve/index.js | 49 ++++++++++++++++++++++++++++++++- src/dragon-curve/index.spec.js | 9 ++++-- src/rotate-matrix/index.js | 18 +++++++++++- src/rotate-matrix/index.spec.js | 23 ++++++++++++++-- 7 files changed, 103 insertions(+), 6 deletions(-) create mode 100644 .babelrc create mode 100644 .travis.yml diff --git a/.babelrc b/.babelrc new file mode 100644 index 0000000..002b4aa --- /dev/null +++ b/.babelrc @@ -0,0 +1,3 @@ +{ + "presets": ["env"] +} diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..9ef0fde --- /dev/null +++ b/.travis.yml @@ -0,0 +1,3 @@ +language: node_js +node_js: + - "lts/*" diff --git a/package.json b/package.json index 5961ab2..395e93f 100644 --- a/package.json +++ b/package.json @@ -23,6 +23,10 @@ }, "homepage": "https://github.com/front-camp-2018/project-scaffoldings#readme", "devDependencies": { + "babel-cli": "^6.26.0", + "babel-core": "^6.26.3", + "babel-jest": "^23.6.0", + "babel-preset-env": "^1.7.0", "css-loader": "^1.0.0", "eslint": "^5.6.1", "eslint-plugin-jest": "^21.25.1", diff --git a/src/dragon-curve/index.js b/src/dragon-curve/index.js index e652f2e..2f52c3c 100644 --- a/src/dragon-curve/index.js +++ b/src/dragon-curve/index.js @@ -1,3 +1,50 @@ export const dragonCurve = n => { - // logic... + let size = Math.pow(2, n); + let arr = []; + arr.length = --size; + arr = getDirections(n); + const result = Number(arr.join('')); + + return result; }; + +const getDirections = number => { + let size = Math.pow(2, number); + const arr = []; + arr.length = --size; + + if (number === 1) { + arr[0] = 1; + return arr; + } else { + let sizeOther = Math.pow(2, number - 1); + let arrOther = []; + arrOther.length = --sizeOther; + arrOther = getDirections(number - 1); + + for (let i = 0; i < sizeOther; i++) { + arr[i] = arrOther[i]; + } + + arr[sizeOther] = 1; + + for (let i = 0; i < sizeOther; i++) { + if (arrOther[i] === 1) { + arrOther[i] = 0; + } else { + arrOther[i] = 1; + } + } + + let index = 0; + + for (let i = size - 1; i > size / 2; i--) { + arr[i] = arrOther[index]; + index++; + } + + return arr; + } + +}; + diff --git a/src/dragon-curve/index.spec.js b/src/dragon-curve/index.spec.js index 84c6e42..c702b31 100644 --- a/src/dragon-curve/index.spec.js +++ b/src/dragon-curve/index.spec.js @@ -1,5 +1,10 @@ -import {dragonCurve} from './index' +import {dragonCurve} from './index'; describe('dragonCurve::', () => { - // need to implement + it('Should return number as is', () => { + expect(dragonCurve(1)).toEqual(1); + expect(dragonCurve(2)).toEqual(110); + expect(dragonCurve(3)).toEqual(1101100); + expect(dragonCurve(4)).toEqual(110110011100100); + }); }); diff --git a/src/rotate-matrix/index.js b/src/rotate-matrix/index.js index d1ef07d..bf37101 100644 --- a/src/rotate-matrix/index.js +++ b/src/rotate-matrix/index.js @@ -1,4 +1,20 @@ export const rotateMatrix = arr => { - // logic... + const width = arr.length || 0; + const height = arr[0] instanceof Array ? arr[0].length : 0; + + if (height === 0 || width === 0) { + return []; + } + + const transformation = []; + + for (let i = 0; i < height; i++) { + transformation[i] = []; + for (let j = 0; j < width; j++) { + transformation[i][j] = arr[j][i]; + } + } + + return transformation; }; diff --git a/src/rotate-matrix/index.spec.js b/src/rotate-matrix/index.spec.js index 1485bc9..c988fe7 100644 --- a/src/rotate-matrix/index.spec.js +++ b/src/rotate-matrix/index.spec.js @@ -1,5 +1,24 @@ -import {rotateMatrix} from './index' +import {rotateMatrix} from './index'; describe('rotateMatrix::', () => { - // need to implement + const arr1 = [ + [1, 2], + [3, 4] + ]; + const arr2 = [ + [1, 2, 3], + [4, 5, 6], + [7, 8, 9] + ]; + it('Should return', () => { + expect(rotateMatrix(arr1)).toEqual([ + [1,3], + [2,4] + ]); + expect(rotateMatrix(arr2)).toEqual([ + [1,4,7], + [2,5,8], + [3,6,9] + ]); + }); });