Sha256: 49ad10d929eb63798642d3a20047a307a43c9a6fa39f5807d32f15b1e125347c

Contents?: true

Size: 1.25 KB

Versions: 122

Compression:

Stored size: 1.25 KB

Contents

package kindergarten

import (
	"errors"
	"sort"
	"strings"
)

type Garden map[string][]string

func (g *Garden) Plants(child string) ([]string, bool) {
	p, ok := (*g)[child]
	return p, ok
}

func NewGarden(diagram string, children []string) (*Garden, error) {
	rows := strings.Split(diagram, "\n")
	if len(rows) != 3 || len(rows[0]) != 0 {
		return nil, errors.New("diagram must have two rows")
	}
	if len(rows[1]) != len(rows[2]) {
		return nil, errors.New("diagram rows must be same length")
	}
	if len(rows[1]) != 2*len(children) {
		return nil, errors.New("each diagram row must have two cups per child")
	}
	g := Garden{}
	alpha := append([]string{}, children...)
	sort.Strings(alpha)
	for _, n := range alpha {
		g[n] = make([]string, 0, 4)
	}
	if len(g) != len(alpha) {
		return nil, errors.New("no two children can have the same name")
	}
	for _, row := range rows[1:] {
		for nx, n := range alpha {
			for cx := range rows[1:] { // a little hack
				var p string
				switch row[2*nx+cx] {
				case 'G':
					p = "grass"
				case 'C':
					p = "clover"
				case 'R':
					p = "radishes"
				case 'V':
					p = "violets"
				default:
					return nil, errors.New("plant codes must be one of G, C, R, or V")
				}
				g[n] = append(g[n], p)
			}
		}
	}
	return &g, nil
}

Version data entries

122 entries across 122 versions & 1 rubygems

Version Path
trackler-2.2.1.180 tracks/go/exercises/kindergarten-garden/example.go
trackler-2.2.1.179 tracks/go/exercises/kindergarten-garden/example.go
trackler-2.2.1.178 tracks/go/exercises/kindergarten-garden/example.go
trackler-2.2.1.177 tracks/go/exercises/kindergarten-garden/example.go
trackler-2.2.1.176 tracks/go/exercises/kindergarten-garden/example.go
trackler-2.2.1.175 tracks/go/exercises/kindergarten-garden/example.go
trackler-2.2.1.174 tracks/go/exercises/kindergarten-garden/example.go
trackler-2.2.1.173 tracks/go/exercises/kindergarten-garden/example.go
trackler-2.2.1.172 tracks/go/exercises/kindergarten-garden/example.go
trackler-2.2.1.171 tracks/go/exercises/kindergarten-garden/example.go
trackler-2.2.1.170 tracks/go/exercises/kindergarten-garden/example.go
trackler-2.2.1.169 tracks/go/exercises/kindergarten-garden/example.go
trackler-2.2.1.167 tracks/go/exercises/kindergarten-garden/example.go
trackler-2.2.1.166 tracks/go/exercises/kindergarten-garden/example.go
trackler-2.2.1.165 tracks/go/exercises/kindergarten-garden/example.go
trackler-2.2.1.164 tracks/go/exercises/kindergarten-garden/example.go
trackler-2.2.1.163 tracks/go/exercises/kindergarten-garden/example.go
trackler-2.2.1.162 tracks/go/exercises/kindergarten-garden/example.go
trackler-2.2.1.161 tracks/go/exercises/kindergarten-garden/example.go
trackler-2.2.1.160 tracks/go/exercises/kindergarten-garden/example.go