JSFiddle - React, Tailwind, and code Playground
by Brondem Brondem
JavaScript
Object.defineProperty(Array.prototype, 'equal', {
value: function(e) {
return !( this < e || e < this );
},
enumerable: false
});
Object.defineProperty(Array.prototype, 'findIndex', {
value: function( callback ) {
for( var i in this )
if( callback(this[i],i,this) )
return i;
return -1;
},
enumerable: false
});
function esJaque( reinas, rey, index ) {
var j, k, vreina, vrey;
for( var i in reinas ) {
if( i != index ) {
var coefs = [[0,1],[1,0],[1,1],[1,-1]];
for( j in coefs ) {
for( vreina = vrey = k = 0; k < 2; ++k ) {
vreina += coefs[j][k]*reinas[i][k];
vrey += coefs[j][k]*rey[k];
}
if( vreina == vrey )
return true;
}
}
}
return false;
}
function outOfRange( pos, n ) {
return pos[0] >= n || pos[1] >= n || pos[0] < 0 || pos[1] < 0;
}
function ajedrez( reinas, rey )
{
var jaque;
var count = 0;
for( var i = -1; i <= 1; ++i )
for( var j = -1; j <= 1; ++j ) {
if( i != 0 || j != 0 ) {
var posRey = [rey[0]+i, rey[1]+j];
var index = reinas.findIndex( function(e){ return e.equal(posRey); } );
if( !outOfRange( posRey, 8 ) && !esJaque( reinas, posRey, index ) ) ++count;
}
else
jaque = esJaque( reinas, rey );
}
if( jaque )
if( count == 0 )
return "jaque mate";
else
return count;
else
if( count == 0 )
return "ahogado";
else
return "libre";
}
function tablero( reinas, rey ) {
var str = '';
for( i = 0; i < 8; ++i ) {
for( j = 0; j < 8; ++j ) {
if( reinas.findIndex( function(e){ return e.equal([i,j]); } ) != -1 )
str += 'X';
else if( rey.equal( [i,j]...