JSFiddle - React, Tailwind, and code Playground
by Brondem Brondem
JavaScript
function Bailarin( posicion, valor ) {
this.posicion = posicion;
this.izquierda = posicion-1;
this.derecha = posicion+1;
}
function Bailarines( n ) {
var i;
for( i = 0; i < n; ++i ) {
this.push( new Bailarin( i ) );
}
}
Bailarines.prototype = Array.prototype;
Object.defineProperty( Bailarines.prototype, 'asignarValores', {
value : function( array ) {
var n = array.length;
for( var i = 0; i < n; ++i )
this[i].valor = array[i];
}
});
function Sombrero( bailarines, primero, ultimo ){
this.bailarines = bailarines;
this.primero = primero;
this.ultimo = ultimo;
for( var i = primero; i <= ultimo; ++i ) {
this.bailarines[i].sombrero = this;
}
}
Object.defineProperty( Sombrero.prototype, 'asignarSombrero', {
value: function( color, pos ) {
if ( color === 'negro' ) {
this.negro = this.bailarines[pos];
this.negro.busca = 'menor';
this.negro.margen = [ this.negro.posicion+1,this.ultimo ];
console.log( this.negro.valor + ' se pone el sombrero negro' );
return this.negro;
} else if( color === 'granate' ) {
this.granate = this.bailarines[pos];
this.granate.hacia = 'izquierda';
console.log( this.granate.valor + ' se pone el sombrero granate' );
return this.granate;
} else throw console.error( 'El baile hungaro sólo permite sombreros granates o negros' );
}
});
Bailarin.prototype.parejaAdecuada = function( bailarin ) {
if ( this.busca === 'menor' ) {
if( bailarin.hacia === 'izquierda' || bailarin.hacia === 'derecha' )
return bailarin.valor < this.valor;
} else if( this.busca === 'mayor' ) {
if( bailarin.hacia === 'izquierda' || bailarin.hacia === 'derecha' )
return bailarin.valor > this.valor;
}
throw console.error( 'Alguno de los bailarines que bailan no tiene...