package main import ( "fmt" "sort" ) var ORDER = []string{"R", "A", "M"} func tricolor_flag(lst []string) []string { result := append([]string(nil), lst...) // copy (like Python sorted) order := make(map[string]int, len(ORDER)) for i, v := range ORDER { order[v] = i } sort.SliceStable(result, func(i int, j int) bool { return order[result[i]] < order[result[j]] }) return result } func main() { check := []string{"M","R","A","A","R","R","A","M","M"} fmt.Println(tricolor_flag(check)) // [R,R,R,A,A,A,M,M,M] check = []string{"M", "R", "A", "R", "R", "A"} fmt.Println(tricolor_flag(check)) // [R,R,R,A,A,M] }