-
Notifications
You must be signed in to change notification settings - Fork 36
/
Copy pathRooks-Movements.js
82 lines (71 loc) · 2.37 KB
/
Rooks-Movements.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
// https://www.codingame.com/ide/puzzle/rooks-movements
const ascii = (a) => a.charCodeAt(0);
const toIndex = (c) => (ascii(c) - ascii('a')) % 26;
const toChar = (c) => String.fromCharCode(c + ascii('a'));
const LEGAL_MOVE = '+'; const CAPTURED = 'x'; const EMPTY = '-';
const [rCol, rRow] = readline().split('');
const pos = {col: toIndex(rCol)+1, row: +rRow};
// Board Setup
const pieces = [...Array(+readline())].map(() => {
const [color, col, row] = readline().split(' ').join('').split('');
return {color: color === '0'? 'W' : 'B', col: toIndex(col)+1, row: +row};
});
const board = [...Array(8)].map(() => Array(8).fill('-'));
pieces.forEach((c) => board[c.row-1][c.col-1] = c.color);
board[pos.row-1][pos.col-1] = 'R';
// Making a chess-like board, marking with '+' legal squares,
// then just output the '+' location and captured pieces.
// 0:c ==> --------
// 1:c ==> ---W----
// 2:c ==> ---+----
// 3:c ==> ---+----
// 4:c ==> +++R++W-
// 5:c ==> ---+----
// 6:c ==> ---B----
// 7:c ==> --------
board.reverse();
// Right
for (let j = pos.col; j < 8; j++) {
if (board[8-pos.row][j] !== EMPTY) {
if (board[8-pos.row][j] === 'B') board[8-pos.row][j] = CAPTURED;
break;
}
board[8-pos.row][j] = LEGAL_MOVE;
}
// Left
for (let j = pos.col-2; j >= 0; j--) {
if (board[8-pos.row][j] !== EMPTY) {
if (board[8-pos.row][j] === 'B') board[8-pos.row][j] = CAPTURED;
break;
}
board[8-pos.row][j] = LEGAL_MOVE;
}
// Down
for (let j = (8 - pos.row+1); j < 8; j++) {
if (board[j][pos.col-1] !== EMPTY) {
if (board[j][pos.col-1] === 'B') board[j][pos.col-1] = CAPTURED;
break;
}
board[j][pos.col-1] = LEGAL_MOVE;
}
// Up
for (let j = (8 - pos.row-1); j >= 0; j--) {
if (board[j][pos.col-1] !== EMPTY) {
if (board[j][pos.col-1] === 'B') board[j][pos.col-1] = CAPTURED;
break;
}
board[j][pos.col-1] = LEGAL_MOVE;
}
board.reverse();
const after = [];
const outString = (str, col, row) =>
`R${toChar(pos.col-1)}${pos.row}${
str === LEGAL_MOVE ? '-' : str}${toChar(col)}${row+1}`;
for (let col = 0; col < 8; col++) {
for (let row = 0; row < 8; row++) {
const curr = board[row][col];
if (curr === LEGAL_MOVE) console.log(outString(LEGAL_MOVE, col, row));
else if (curr === CAPTURED) after.push(outString(CAPTURED, col, row));
}
}
after.forEach((c) => console.log(c));