summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2016-11-11 17:18:39 +0100
committerDimitri Sokolyuk <demon@dim13.org>2016-11-11 17:18:39 +0100
commit4b662dda79dc59f5255cd447c4ac2192536d489d (patch)
treedc1e0fde3ca8f80a4eae49363ce44db6c392fb9f
parent366d79482f4bb1cb9d93e8dbf620c83821870b63 (diff)
Solve School
-rw-r--r--go/grade-school/grade_school.go42
1 files changed, 42 insertions, 0 deletions
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
+}