From 4b662dda79dc59f5255cd447c4ac2192536d489d Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Fri, 11 Nov 2016 17:18:39 +0100 Subject: Solve School --- go/grade-school/grade_school.go | 42 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 go/grade-school/grade_school.go diff --git a/go/grade-school/grade_school.go b/go/grade-school/grade_school.go new file mode 100644 index 0000000..1f2b9f1 --- /dev/null +++ b/go/grade-school/grade_school.go @@ -0,0 +1,42 @@ +package school + +import "sort" + +type Grade struct { + Grade int + Names []string +} + +type School struct { + grades map[int][]string +} + +func New() *School { + return &School{grades: make(map[int][]string)} +} + +func (s *School) Add(name string, grade int) { + g := s.grades[grade] + g = append(g, name) + sort.Strings(g) + s.grades[grade] = g +} + +func (s *School) Grade(grade int) []string { + return s.grades[grade] +} + +type ByGrade []Grade + +func (g ByGrade) Len() int { return len(g) } +func (g ByGrade) Less(i, j int) bool { return g[i].Grade < g[j].Grade } +func (g ByGrade) Swap(i, j int) { g[i], g[j] = g[j], g[i] } + +func (s *School) Enrollment() []Grade { + g := []Grade{} + for k, v := range s.grades { + g = append(g, Grade{Grade: k, Names: v}) + } + sort.Sort(ByGrade(g)) + return g +} -- cgit v1.2.3