exercism/go/grade-school/school.go
2016-09-03 09:53:54 -05:00

54 lines
1.1 KiB
Go

package school
import "sort"
// A Grade is just the grade number and a list of students
type Grade struct {
Num int
Students []string
}
// AddStudent adds a student name to a grades roster
func (g *Grade) AddStudent(name string) {
g.Students = append(g.Students, name)
}
// School is just a collection of Grades
type School struct {
grades map[int]Grade
}
// New returns a new School object
func New() *School {
return &School{
grades: make(map[int]Grade),
}
}
// Add add student 'name' to grade 'grade'
func (s *School) Add(name string, grade int) {
g := s.grades[grade]
g.Num = grade
g.AddStudent(name)
s.grades[grade] = g
}
// Grade returns a sorted list of all students in 'grade'
func (s *School) Grade(grade int) []string {
g := s.grades[grade]
sort.Strings(g.Students)
return g.Students
}
// Enrollment returns the full school's enrollment, sorted by grade then name
func (s *School) Enrollment() []Grade {
var ret []Grade
for k := 1; k <= 12; k++ {
grRoster := s.Grade(k)
if len(grRoster) > 0 {
ret = append(ret, Grade{Num: k, Students: grRoster})
}
}
return ret
}