Saltar al contenido

El inventario al cierre

Enunciado

Beto baja la cortina de su refaccionaria y quiere dejar apuntado qué quedó en el estante, para saber qué pedir mañana. En el día entraron piezas nuevas y salieron las que vendió, y todo eso está en su libreta. Escribe una función que reciba estante, un diccionario con lo que había al abrir (la pieza es la llave y cuántas hay es el valor; puede venir vacío), y movimientos, una lista donde cada movimiento es ["pieza", cantidad]: si la cantidad es positiva entraron piezas y si es negativa salieron. Regresa un diccionario nuevo con lo que queda al cierre, sin tocar el que recibiste: Beto conserva el de la mañana para comparar.

Una pieza que no estaba en el estante se agrega en cuanto llega, y lo que queda en cero no aparece, venga de un movimiento o de como estaba el estante al abrir. Nunca se vende más de lo que hay, así que ninguna cantidad queda negativa.

Con {"balata": 4, "bujia": 10} y los movimientos [["bujia", -10], ["filtro", 3], ["balata", 2]] regresas {"balata": 6, "filtro": 3}: las balatas subieron a 6, el filtro es pieza nueva y las bujías se acabaron.

Si el estante estaba vacío y no hubo movimientos, regresas un diccionario vacío.

Ejemplos

  • El ejemplo

    {"balata": 4, "bujia": 10}, [["bujia", -10], ["filtro", 3], ["balata", 2]] → {"balata": 6, "filtro": 3}

  • Nada se movió

    {"aceite": 2, "foco": 6}, [] → {"aceite": 2, "foco": 6}

  • Una pieza que no estaba

    {"balata": 1}, [["clavo", 5]] → {"balata": 1, "clavo": 5}

  • Se agotó lo único que había

    {"foco": 3}, [["foco", -3]] → {}

  • La misma pieza entra y sale

    {"banda": 2}, [["banda", 5], ["banda", -4]] → {"banda": 3}

Además de estas, el reto tiene pruebas ocultas que se revelan al enviar tu solución.

Empiezas con esto

Python

def cierre(estante, movimientos):
    pass

JavaScript

function cierre(estante, movimientos) {
}
Resolver este reto

Se abre en el navegador, con el editor y las pruebas. Este reto es del plan completo; los de O(1) y O(log n) son gratis.

Más retos de O(n)

Ver todos los retos →