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]...