Sha256: 56c4e3be198049ca1350165aea5e93705fdf24aa2cf1ae65774839437a34bb1b

Contents?: true

Size: 1.21 KB

Versions: 211

Compression:

Stored size: 1.21 KB

Contents

const W = 8,
  H = 8,
  STARTING = { black : [7,3], white: [0,3] };

const QueenAttack = ( params = STARTING )  => {
  const self = this instanceof QueenAttack ? this : Object.getPrototypeOf(QueenAttack);
  if (params && params.white === params.black){
    throw new Error("Queens cannot share the same space");
  }

  self.black=params.black;
  self.white=params.white;
  self.board = constructBoard();
  placePieces(self);

  self.canAttack = () => {
    if (self.black[0] === self.white[0] || self.black[1] === self.white[1]){
      return true;
    }
    return Math.abs(self.black[0]-self.white[0]) === Math.abs(self.black[1]-self.white[1]);
  };

  self.toString = () => self.board.join('');

  return self;
};

function constructBoard(){
  let row = buildRow("_ ", W).join('');
  row = row.substring(0, row.length-1)+"\n";
  return concatRows(row, H);
}

function placePieces(self){
  self.board[self.black[0]*W*2+self.black[1]*2]='B';
  self.board[self.white[0]*W*2+self.white[1]*2]='W';
}

function buildRow(cell, colCount){
  return Array.apply(null, Array(colCount)).map(() => cell);
}

function concatRows(row, rowCount){
  return [...Array.prototype.concat.apply(buildRow(row, rowCount)).join('')];
}

export default QueenAttack;

Version data entries

211 entries across 211 versions & 1 rubygems

Version Path
trackler-2.2.0.0 tracks/ecmascript/exercises/queen-attack/example.js
trackler-2.1.0.55 tracks/ecmascript/exercises/queen-attack/example.js
trackler-2.1.0.54 tracks/ecmascript/exercises/queen-attack/example.js
trackler-2.1.0.53 tracks/ecmascript/exercises/queen-attack/example.js
trackler-2.1.0.52 tracks/ecmascript/exercises/queen-attack/example.js
trackler-2.1.0.51 tracks/ecmascript/exercises/queen-attack/example.js
trackler-2.1.0.50 tracks/ecmascript/exercises/queen-attack/example.js
trackler-2.1.0.49 tracks/ecmascript/exercises/queen-attack/example.js
trackler-2.1.0.48 tracks/ecmascript/exercises/queen-attack/example.js
trackler-2.1.0.47 tracks/ecmascript/exercises/queen-attack/example.js
trackler-2.1.0.46 tracks/ecmascript/exercises/queen-attack/example.js
trackler-2.1.0.45 tracks/ecmascript/exercises/queen-attack/example.js
trackler-2.1.0.44 tracks/ecmascript/exercises/queen-attack/example.js
trackler-2.1.0.43 tracks/ecmascript/exercises/queen-attack/example.js
trackler-2.1.0.42 tracks/ecmascript/exercises/queen-attack/example.js
trackler-2.1.0.41 tracks/ecmascript/exercises/queen-attack/example.js
trackler-2.1.0.40 tracks/ecmascript/exercises/queen-attack/example.js
trackler-2.1.0.39 tracks/ecmascript/exercises/queen-attack/example.js
trackler-2.1.0.38 tracks/ecmascript/exercises/queen-attack/example.js
trackler-2.1.0.37 tracks/ecmascript/exercises/queen-attack/example.js