Skip to content

Instantly share code, notes, and snippets.

@zulu15
Created June 28, 2023 17:34
Show Gist options
  • Save zulu15/3c72718b5d0ab578c4ef4152ab400dec to your computer and use it in GitHub Desktop.
Save zulu15/3c72718b5d0ab578c4ef4152ab400dec to your computer and use it in GitHub Desktop.
const robar = arreglo => {
const casasPorRobarOriginal = [...arreglo];
const arrDesc = [...arreglo];
//Ordenamos las casas a robar por cantidad de dinero de forma descendente
//Y lo guardamos en arrDesc, mantenemos el arrary original para poder comparar indices luego
for(let i = 0; i < arrDesc.length; i++){
for(j = i + 1; j < arrDesc.length; j++){
if(arrDesc[i] < arrDesc[j]){
const grande = arrDesc[j];
arrDesc[j] = arrDesc[i];
arrDesc[i] = grande;
}
}
}
//Acumula la cantidad de plata robada
let money = 0;
//Almacena los indices de las casas robadas, es util para saber si la casa a robar esta pegada a una casa ya robada
const casasRobadasIndex = [];
for(let index = 0; index < arrDesc.length; index++){
const plataPorRobar = arrDesc[index];
const casaPorRobarIndex = arreglo.indexOf(plataPorRobar);
//Si se robaron casas previamente
if(casasRobadasIndex.length > 0){
//Verificamos que la casa a robar no este junto a una ya robada
let isNearby = false;
for (const casaRobadaIndex of casasRobadasIndex) {
isNearby = (casaRobadaIndex - casaPorRobarIndex) == -1 || (casaRobadaIndex - casaPorRobarIndex) == 1;
if (isNearby) {
break;
}
}
//Si la casa por robar esta junto a una ya robada, continuamos a la siguiente casa
if(isNearby) continue;
}
//Si no se encuentra junto a una casa ya robada, acumulamos el dinero robado en la variable money
money = money + plataPorRobar;
//Agregamos el indice de la casa robada al array de casas Robadas
casasRobadasIndex.push(casaPorRobarIndex);
//En caso de tener mas de una casa con la misma cantidad de plata
//Esto evita que siempre devuelva el mismo indice
arreglo[casaPorRobarIndex] = "robada";
}
let cantidadRobadaPorCasa = [];
casasRobadasIndex.forEach(index => cantidadRobadaPorCasa.push(casasPorRobarOriginal[index]));
console.info(`Lo maximo posible a robar es ${money} = ${cantidadRobadaPorCasa.join("+")}`);
}
const arr = [2,7,9,3,1];
robar(arr);
robar([1,2,3,1]);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment