Hackerrank: Equals.

En este post te voy a explicar como resolví el problema de HackerRank: Equals.

Primeros pasos.

Antes de empezar. La solución de este problema la tome del artículo de Nikoo28. El problema en cuestión, consiste en nivelar una serie de valores usando incrementos o decrementos de 1, 2 y 5.

El problema describe la problemática de Christine. Ella debe asegurarse que todos sus compañeros tienen el mismo número de chocolates. Para lograr esto, ella puede agregar el mismo número de chocolates a todos sus compañeros, excepto uno; la segunda opción es remover chocolates de un compañero.

El problema tiene dos enfoques. Resolver el problema igualando el número de chocolates al valor máximo, o igualar el número de chocolates alcanzando el valor mínimo.

Como vas a emplear los mismos números para igualar, el resultado. Es posible que tengas diferencias de 1 a 4 elementos. El algoritmo en cuestión, valida estas posibilidades para elegir la mejor solución.

Solución.

def equal(arr:Array[Int]) = {
val possibilities: Array[Int] = Array.ofDim(5)
var minimum = arr.min
possibilities.indices.foreach(currentPossibility => {
arr.foreach(colleagueAmount => {
val difference = colleagueAmount - minimum
val stepsRequired = getStepsRequired(difference)
updatePossibilitiesArray(currentPossibility, stepsRequired)
})
minimum -= 1
})
def updatePossibilitiesArray(currentIndex:Int, stepsRequired:Int): Unit = {
possibilities.update(currentIndex, possibilities(currentIndex) + stepsRequired)
}
def getStepsRequired(chocolatesAmount:Int) =
chocolatesAmount / 5 +
(chocolatesAmount % 5) / 2 +
((chocolatesAmount % 5) % 2) / 1
possibilities.min
}
println(equal(Array(2,6,6)))
view raw equals.sc hosted with ❤ by GitHub

Gustavo Sánchez

Soy especialista en escribir software de calidad. Mediante el uso de marcos de trabajo, técnicas y automatización de procesos he podido reducir los costes operativos de los sistemas de la empresa. Sistemas confiables y adaptables producen clientes felices.

Site Footer