51 lines
1.3 KiB
Go
51 lines
1.3 KiB
Go
|
package house
|
||
|
|
||
|
// ASong holds the data we need to generate a song
|
||
|
type ASong struct {
|
||
|
start string
|
||
|
clauses []string
|
||
|
end string
|
||
|
}
|
||
|
|
||
|
// Embed takes two strings and returns a string with the embedded
|
||
|
func Embed(l, p string) string {
|
||
|
return l + " " + p
|
||
|
}
|
||
|
|
||
|
// Verse takes three things and returns a verse
|
||
|
func Verse(start string, clause []string, end string) string {
|
||
|
ret := start + " "
|
||
|
for i := 0; i < len(clause); i++ {
|
||
|
ret += clause[i] + " "
|
||
|
}
|
||
|
ret += end
|
||
|
return ret
|
||
|
}
|
||
|
|
||
|
// Song generates the whole song
|
||
|
func Song() string {
|
||
|
jackSong := ASong{
|
||
|
start: "This is",
|
||
|
clauses: []string{
|
||
|
"the horse and the hound and the horn\nthat belonged to",
|
||
|
"the farmer sowing his corn\nthat kept",
|
||
|
"the rooster that crowed in the morn\nthat woke",
|
||
|
"the priest all shaven and shorn\nthat married",
|
||
|
"the man all tattered and torn\nthat kissed",
|
||
|
"the maiden all forlorn\nthat milked",
|
||
|
"the cow with the crumpled horn\nthat tossed",
|
||
|
"the dog\nthat worried",
|
||
|
"the cat\nthat killed",
|
||
|
"the rat\nthat ate",
|
||
|
"the malt\nthat lay in",
|
||
|
},
|
||
|
end: "the house that Jack built.",
|
||
|
}
|
||
|
var ret string
|
||
|
for i := len(jackSong.clauses); i >= 0; i-- {
|
||
|
ret += Verse(jackSong.start, jackSong.clauses[i:], jackSong.end) + "\n\n"
|
||
|
}
|
||
|
// Trim the trailing "\n\n"
|
||
|
return ret[:len(ret)-2]
|
||
|
}
|