The full catalog covers many products. Filter to one product first, then rank the top k brands that sell it, using v4's repeated search on the filtered lists.
You start with:
val products = Array("Laptop", "Phone", "Laptop", "Tablet", "Phone", "Laptop")
val brands = Array("TechPro", "MegaCorp", "NeoByte", "Quantum", "Zenith", "AlphaTech")
val ratings = Array(4, 5, 5, 3, 4, 4)
val target = "Laptop"
val k = 2
Build:
1. NeoByte (5) 2. TechPro (4)
Rules:
- Filter: copy the brand and the rating of every row whose product equals
targetinto two new lists, keeping the order. - From the filtered lists pick the top
kby rating, highest first, with v4's repeated search. Ties go to the entry listed first. - If fewer than
kproducts match, list only those that exist: when no brand is left, add no more lines (no extra lines, no error). - Each line is
"rank. Brand (rating)", starting at rank 1. - Print the lines, one per line, with
println(...).
Build
filteredBrands and filteredRatings first: a loop over the catalog that copies the row when products(i) == target.
Then run v4's repeated search over the filtered lists (same code, new names).
If fewer than
k products match, some round finds nobody (bestIndex stays -1): add a line only when a brand was found.
val products = Array("Laptop", "Phone", "Laptop", "Tablet", "Phone", "Laptop")
val brands = Array("TechPro", "MegaCorp", "NeoByte", "Quantum", "Zenith", "AlphaTech")
val ratings = Array(4, 5, 5, 3, 4, 4)
val target = "Laptop"
val k = 2
val filteredBrands = scala.collection.mutable.ArrayBuffer[String]()
val filteredRatings = scala.collection.mutable.ArrayBuffer[Int]()
for (i <- 0 until products.size) {
if (products(i) == target) {
filteredBrands.append(brands(i))
filteredRatings.append(ratings(i))
}
}
val used = Array.fill(filteredRatings.size)(false)
val lines = scala.collection.mutable.ArrayBuffer[String]()
for (rank <- 1 to k) {
var bestIndex = -1
for (i <- 0 until filteredRatings.size) {
if (!used(i)) {
if (bestIndex == -1 || filteredRatings(i) > filteredRatings(bestIndex)) {
bestIndex = i
}
}
}
if (bestIndex != -1) {
used(bestIndex) = true
lines.append(rank.toString() + ". " + filteredBrands(bestIndex) + " (" + filteredRatings(bestIndex) + ")")
}
}
println(lines.mkString("\n"))
Free plan: 30 tutor messages. Premium is unlimited.
Saved
Ctrl + Enter to check
