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:
products := []string{"Laptop", "Phone", "Laptop", "Tablet", "Phone", "Laptop"}
brands := []string{"TechPro", "MegaCorp", "NeoByte", "Quantum", "Zenith", "AlphaTech"}
ratings := []int{4, 5, 5, 3, 4, 4}
target := "Laptop"
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
fmt.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.
products := []string{"Laptop", "Phone", "Laptop", "Tablet", "Phone", "Laptop"}
brands := []string{"TechPro", "MegaCorp", "NeoByte", "Quantum", "Zenith", "AlphaTech"}
ratings := []int{4, 5, 5, 3, 4, 4}
target := "Laptop"
k := 2
filteredBrands := []string{}
filteredRatings := []int{}
for i := 0; i < len(products); i++ {
if products[i] == target {
filteredBrands = append(filteredBrands, brands[i])
filteredRatings = append(filteredRatings, ratings[i])
}
}
used := make([]bool, len(filteredRatings))
lines := []string{}
for rank := 1; rank <= k; rank++ {
bestIndex := -1
for i := 0; i < len(filteredRatings); i++ {
if !used[i] {
if bestIndex == -1 || filteredRatings[i] > filteredRatings[bestIndex] {
bestIndex = i
}
}
}
if bestIndex != -1 {
used[bestIndex] = true
lines = append(lines, strconv.Itoa(rank) + ". " + filteredBrands[bestIndex] + " (" + strconv.Itoa(filteredRatings[bestIndex]) + ")")
}
}
fmt.Println(strings.Join(lines, "\n"))
Free plan: 30 tutor messages. Premium is unlimited.
Saved
Ctrl + Enter to check
