Sha256: 4b8378366c8914ec47f6f152acc22e84acf803657f5913a1234168249bd3394a

Contents?: true

Size: 1.83 KB

Versions: 159

Compression:

Stored size: 1.83 KB

Contents

package beer

import (
	"bytes"
	"fmt"
)

const testVersion = 1

// Song returns the full lyrics for 99 bottles of beer
func Song() (result string) {
	result, _ = Verses(99, 0)
	return
}

// Verses returns an excerpt of the lyrics of 99 bottles of beer
// between verse start and stop. The verse numbers count backwards, so the
// first verse sung will be verse 99, and the last will be verse 0
func Verses(start, stop int) (string, error) {
	switch {
	case 0 > start || start > 99:
		return "", fmt.Errorf("start value[%d] is not a valid verse", start)
	case 0 > stop || stop > 99:
		return "", fmt.Errorf("stop value[%d] is not a valid verse", stop)
	case start < stop:
		return "", fmt.Errorf("start value[%d] is less than stop value[%d]", start, stop)
	}

	var buff bytes.Buffer
	for i := start; i >= stop; i-- {
		v, _ := Verse(i)
		buff.WriteString(v)
		buff.WriteString("\n")
	}
	return buff.String(), nil
}

// Verse returns a single verse of the lyrics of 99 bottles of beer. The verse
// numbers count backwards, so the first verse sung will be verse 99, and the
// last will be verse 0
func Verse(n int) (string, error) {
	result := ""
	switch {
	case 0 > n || n > 99:
		return "", fmt.Errorf("%d is not a valid verse", n)
	case n == 0:
		result = "No more bottles of beer on the wall, no more bottles of beer.\nGo to the store and buy some more, 99 bottles of beer on the wall.\n"
	case n == 1:
		result = "1 bottle of beer on the wall, 1 bottle of beer.\nTake it down and pass it around, no more bottles of beer on the wall.\n"
	case n == 2:
		result = "2 bottles of beer on the wall, 2 bottles of beer.\nTake one down and pass it around, 1 bottle of beer on the wall.\n"
	default:
		result = fmt.Sprintf("%d bottles of beer on the wall, %d bottles of beer.\nTake one down and pass it around, %d bottles of beer on the wall.\n", n, n, n-1)
	}
	return result, nil
}

Version data entries

159 entries across 159 versions & 1 rubygems

Version Path
trackler-2.2.1.56 tracks/go/exercises/beer-song/example.go
trackler-2.2.1.55 tracks/go/exercises/beer-song/example.go
trackler-2.2.1.54 tracks/go/exercises/beer-song/example.go
trackler-2.2.1.53 tracks/go/exercises/beer-song/example.go
trackler-2.2.1.52 tracks/go/exercises/beer-song/example.go
trackler-2.2.1.51 tracks/go/exercises/beer-song/example.go
trackler-2.2.1.50 tracks/go/exercises/beer-song/example.go
trackler-2.2.1.49 tracks/go/exercises/beer-song/example.go
trackler-2.2.1.48 tracks/go/exercises/beer-song/example.go
trackler-2.2.1.47 tracks/go/exercises/beer-song/example.go
trackler-2.2.1.46 tracks/go/exercises/beer-song/example.go
trackler-2.2.1.45 tracks/go/exercises/beer-song/example.go
trackler-2.2.1.44 tracks/go/exercises/beer-song/example.go
trackler-2.2.1.43 tracks/go/exercises/beer-song/example.go
trackler-2.2.1.42 tracks/go/exercises/beer-song/example.go
trackler-2.2.1.41 tracks/go/exercises/beer-song/example.go
trackler-2.2.1.40 tracks/go/exercises/beer-song/example.go
trackler-2.2.1.39 tracks/go/exercises/beer-song/example.go
trackler-2.2.1.38 tracks/go/exercises/beer-song/example.go
trackler-2.2.1.37 tracks/go/exercises/beer-song/example.go