Created
June 28, 2023 17:34
-
-
Save zulu15/3c72718b5d0ab578c4ef4152ab400dec to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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