Hey guys, Leo here.
Today we’ll continue the series Algorithms, the Final Frontier. Always remember folks, this is ONE of many possible solutions for the problem. The challenge is here: The Challenge
Let’s go!
The problem: Compare and update the inventory stored in a 2D array against a second 2D array of a fresh delivery. E.G. update inventory([[21, “Bowling Ball”], [2, “Dirty Sock”], [1, “Hair Pin”], [5, “Microphone”]], [[2, “Hair Pin”], [3, “Half-Eaten Apple”], [67, “Bowling Ball”], [7, “Toothpaste”]]) should return an array with a length of 6. Solution: I divide this problem into two parts:
- Create a compiled inventory
- Sort the compiled inventory
For the first part, you can just create a dictionary for that like:
var a1 = [[2,"cafe"],[8,"water"],[2,"bola"],[2,"futebolball"],[2,"solarium"],[2,"pool"]]
var a2 = [[8,"cafe"],[3,"water"],[2,"futebolball"],[2,"solarium"],[2,"pool"]]
var dict : [String:Int] = [:]
a1.append(contentsOf: a2)
for row in a1 {
let itemNumber = row[0] as! Int
let itemName = row[1] as! String
if dict[itemName] != nil {
dict[itemName] = dict[itemName]! + itemNumber
} else {
dict[itemName] = itemNumber
}
}
and for the second part just a little FP here:
print(dict.lazy.sorted { a1, a2 -> Bool in
a1.key < a2.key
}.map { itemName, value -> [Any] in
[value,itemName]
})
Continue Algorithm Studying
If you like the solution for this inventory problem, you will probably like the “special palindrome problem”. There we use a two-pointer technique to traverse the array simultaneously from both sides.
Functional programming is a good technique to be familiar in algorithms because you can leverage your code using premade functions. For example in this solution for a “shopping cart” problem we use two functional operations to solve the whole problem.
That’s all my people, I hope you liked reading this article as much as I enjoyed writing it. If you want to support this blog you can Buy Me a Coffee or just leave a comment saying hello. You can also sponsor posts and I’m open to freelance writing! You can reach me on LinkedIn or Twitter and send me an e-mail through the contact page.
Thanks for reading and… That’s all folks.
Image Credit: Wikiart




