Skip to content

Instantly share code, notes, and snippets.

@maxchehab
Created September 30, 2017 19:09
Show Gist options
  • Save maxchehab/d50c68fddb71b291585398cfed648d1d to your computer and use it in GitHub Desktop.
Save maxchehab/d50c68fddb71b291585398cfed648d1d to your computer and use it in GitHub Desktop.
process.stdin.resume();
process.stdin.setEncoding('ascii');
var input_stdin = "";
var input_stdin_array = "";
var input_currentline = 0;
process.stdin.on('data', function (data) {
input_stdin += data;
});
process.stdin.on('end', function () {
input_stdin_array = input_stdin.split("\n");
main();
});
function readLine() {
return input_stdin_array[input_currentline++];
}
/////////////// ignore above this line ////////////////////
function main() {
var q = parseInt(readLine());
for(var a0 = 0; a0 < q; a0++){
var n = parseInt(readLine());
var board = [];
for(var board_i = 0; board_i < n; board_i++){
board.push([]);
var elem = readLine().split('');
for(var i = 0; i < elem.length; i++){
board[board_i].push(elem[i]);
}
}
var wins = firstMove(board);
if(wins > 0){
console.log("WIN " + wins)
}else{
console.log("LOSE");
}
//console.log(board);
//console.log(doMove(board, {x:1,y:1}, {y:0,x:0}));
//console.log(firstMove(board));
// Write Your Code Here
//console.log(possibleMoves(board, {y: 1, x: 1}));
//console.log(board);
}
}
function firstMove(board){
var board = JSON.parse(JSON.stringify(board));
var wins = 0;
var kings = getKings(board);
for(var i = 0; i < kings.length; i++){
var moves = possibleMoves(board, kings[i], 0);
//console.log("Kings");
// console.log(kings[i]);
// console.log(moves);
if(moves.length > 0){
for(var j = 0; j < moves.length; j++){
//console.log("Checking initial move: " + JSON.stringify(moves[j]));
if(move(doMove(board, kings[i], moves[j]), 1)){
wins++;
}
}
}
}
return wins;
}
var move = function m(board, time){
// console.log(time);
var board = JSON.parse(JSON.stringify(board));
var kings = getKings(board);
// console.log("init");
// console.log(board);
for(var i = 0; i < kings.length; i++){
var moves = possibleMoves(board, kings[i], time);
// console.log(JSON.stringify(moves) + ": " + moves.length);
if(moves.length > 0){
for(var j = 0; j < moves.length; j++){
// console.log("executed");
var newBoard = doMove(board, kings[i], moves[j])
// console.log(newBoard);
return move(newBoard, ++time);
}
}else if(time % 2 == 0){
return false;
}else{
return true;
}
}
}
function getKings(board){
var board = JSON.parse(JSON.stringify(board));
var kings = [];
for(var i = 0; i < board.length; i++){
for(var j = 0; j < board[i].length; j++){
if(board[i][j].includes('K')){
for(var k = 0; k < board[i][j].length; k++){
kings.push({y:i, x:j});
}
}
}
}
return kings;
}
function doMove(board, oldKing, newKing){
var board = JSON.parse(JSON.stringify(board));
var kings = board[oldKing.y][oldKing.x];
if(kings.length == 1){
board[oldKing.y][oldKing.x] = '.';
}else{
board[oldKing.y][oldKing.x] = kings.substring(0, kings.length - 1);
}
if(board[newKing.y][newKing.x] == '.'){
board[newKing.y][newKing.x] = 'K';
}else{
board[newKing.y][newKing.x] += 'K';
}
return board;
}
function possibleMoves(board, king, time){
var board = JSON.parse(JSON.stringify(board));
var returnMoves = [];
if(inBounds(board, {y: king.y - 1, x: king.x})){
if(board[king.y - 1][king.x] != 'X'){
returnMoves.push({y: king.y - 1, x: king.x});
}
}
if(inBounds(board, {y: king.y, x: king.x - 1})){
if(board[king.y][king.x - 1] != 'X'){
returnMoves.push({y: king.y, x: king.x - 1});
}
}
if(inBounds(board, {y: king.y - 1, x: king.x - 1})){
if(board[king.y - 1][king.x - 1] != 'X'){
returnMoves.push({y: king.y - 1, x: king.x - 1});
}
}
// console.log(returnMoves);
return returnMoves;
}
function inBounds(board, king){
var board = JSON.parse(JSON.stringify(board));
if(king.y < 0 || king.x < 0){
return false;
}
if(king.y < board.length && king.x < board[king.y].length){
return true;
}else{
return false;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment