El inventario al cierre
- O(n) · Media
- Plan completo
- Python
- JavaScript
- diccionarios
- listas
- ciclos
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):
passJavaScript
function cierre(estante, movimientos) {
}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.