jimi
9 years ago
commit
726d24e5eb
3 changed files with 178 additions and 0 deletions
-
80README.md
-
3food_chain.go
-
95food_chain_test.go
@ -0,0 +1,80 @@ |
|||||
|
# Food Chain |
||||
|
|
||||
|
Write a program that generates the lyrics of the song 'I Know an Old Lady Who Swallowed a Fly' |
||||
|
|
||||
|
Write a program that generates the lyrics to the song |
||||
|
"I know an old lady who swallowed a fly". While you could |
||||
|
copy/paste the lyrics, or read them from a file, this |
||||
|
problem is much more interesting if you approach it |
||||
|
algorithmically. |
||||
|
|
||||
|
This is a [cumulative song](http://en.wikipedia.org/wiki/Cumulative_song) of unknown origin. |
||||
|
|
||||
|
This is one of many common variants. |
||||
|
|
||||
|
```plain |
||||
|
I know an old lady who swallowed a fly. |
||||
|
I don't know why she swallowed the fly. Perhaps she'll die. |
||||
|
|
||||
|
I know an old lady who swallowed a spider. |
||||
|
It wriggled and jiggled and tickled inside her. |
||||
|
She swallowed the spider to catch the fly. |
||||
|
I don't know why she swallowed the fly. Perhaps she'll die. |
||||
|
|
||||
|
I know an old lady who swallowed a bird. |
||||
|
How absurd to swallow a bird! |
||||
|
She swallowed the bird to catch the spider that wriggled and jiggled and tickled inside her. |
||||
|
She swallowed the spider to catch the fly. |
||||
|
I don't know why she swallowed the fly. Perhaps she'll die. |
||||
|
|
||||
|
I know an old lady who swallowed a cat. |
||||
|
Imagine that, to swallow a cat! |
||||
|
She swallowed the cat to catch the bird. |
||||
|
She swallowed the bird to catch the spider that wriggled and jiggled and tickled inside her. |
||||
|
She swallowed the spider to catch the fly. |
||||
|
I don't know why she swallowed the fly. Perhaps she'll die. |
||||
|
|
||||
|
I know an old lady who swallowed a dog. |
||||
|
What a hog, to swallow a dog! |
||||
|
She swallowed the dog to catch the cat. |
||||
|
She swallowed the cat to catch the bird. |
||||
|
She swallowed the bird to catch the spider that wriggled and jiggled and tickled inside her. |
||||
|
She swallowed the spider to catch the fly. |
||||
|
I don't know why she swallowed the fly. Perhaps she'll die. |
||||
|
|
||||
|
I know an old lady who swallowed a goat. |
||||
|
Just opened her throat and swallowed a goat! |
||||
|
She swallowed the goat to catch the dog. |
||||
|
She swallowed the dog to catch the cat. |
||||
|
She swallowed the cat to catch the bird. |
||||
|
She swallowed the bird to catch the spider that wriggled and jiggled and tickled inside her. |
||||
|
She swallowed the spider to catch the fly. |
||||
|
I don't know why she swallowed the fly. Perhaps she'll die. |
||||
|
|
||||
|
I know an old lady who swallowed a cow. |
||||
|
I don't know how she swallowed a cow! |
||||
|
She swallowed the cow to catch the goat. |
||||
|
She swallowed the goat to catch the dog. |
||||
|
She swallowed the dog to catch the cat. |
||||
|
She swallowed the cat to catch the bird. |
||||
|
She swallowed the bird to catch the spider that wriggled and jiggled and tickled inside her. |
||||
|
She swallowed the spider to catch the fly. |
||||
|
I don't know why she swallowed the fly. Perhaps she'll die. |
||||
|
|
||||
|
I know an old lady who swallowed a horse. |
||||
|
She's dead, of course! |
||||
|
``` |
||||
|
|
||||
|
To run the tests simply run the command `go test` in the exercise directory. |
||||
|
|
||||
|
If the test suite contains benchmarks, you can run these with the `-bench` |
||||
|
flag: |
||||
|
|
||||
|
go test -bench . |
||||
|
|
||||
|
For more detailed info about the Go track see the [help |
||||
|
page](http://exercism.io/languages/go). |
||||
|
|
||||
|
## Source |
||||
|
|
||||
|
Wikipedia [view source](http://en.wikipedia.org/wiki/There_Was_an_Old_Lady_Who_Swallowed_a_Fly) |
@ -0,0 +1,3 @@ |
|||||
|
package foodchain |
||||
|
|
||||
|
const testVersion = 2 |
@ -0,0 +1,95 @@ |
|||||
|
package foodchain |
||||
|
|
||||
|
import ( |
||||
|
"strings" |
||||
|
"testing" |
||||
|
) |
||||
|
|
||||
|
const targetTestVersion = 2 |
||||
|
|
||||
|
func TestTestVersion(t *testing.T) { |
||||
|
if testVersion != targetTestVersion { |
||||
|
t.Errorf("Found testVersion = %v, want %v.", testVersion, targetTestVersion) |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
var ref = []string{``, |
||||
|
|
||||
|
`I know an old lady who swallowed a fly. |
||||
|
I don't know why she swallowed the fly. Perhaps she'll die.`, |
||||
|
|
||||
|
`I know an old lady who swallowed a spider. |
||||
|
It wriggled and jiggled and tickled inside her. |
||||
|
She swallowed the spider to catch the fly. |
||||
|
I don't know why she swallowed the fly. Perhaps she'll die.`, |
||||
|
|
||||
|
`I know an old lady who swallowed a bird. |
||||
|
How absurd to swallow a bird! |
||||
|
She swallowed the bird to catch the spider that wriggled and jiggled and tickled inside her. |
||||
|
She swallowed the spider to catch the fly. |
||||
|
I don't know why she swallowed the fly. Perhaps she'll die.`, |
||||
|
|
||||
|
`I know an old lady who swallowed a cat. |
||||
|
Imagine that, to swallow a cat! |
||||
|
She swallowed the cat to catch the bird. |
||||
|
She swallowed the bird to catch the spider that wriggled and jiggled and tickled inside her. |
||||
|
She swallowed the spider to catch the fly. |
||||
|
I don't know why she swallowed the fly. Perhaps she'll die.`, |
||||
|
|
||||
|
`I know an old lady who swallowed a dog. |
||||
|
What a hog, to swallow a dog! |
||||
|
She swallowed the dog to catch the cat. |
||||
|
She swallowed the cat to catch the bird. |
||||
|
She swallowed the bird to catch the spider that wriggled and jiggled and tickled inside her. |
||||
|
She swallowed the spider to catch the fly. |
||||
|
I don't know why she swallowed the fly. Perhaps she'll die.`, |
||||
|
|
||||
|
`I know an old lady who swallowed a goat. |
||||
|
Just opened her throat and swallowed a goat! |
||||
|
She swallowed the goat to catch the dog. |
||||
|
She swallowed the dog to catch the cat. |
||||
|
She swallowed the cat to catch the bird. |
||||
|
She swallowed the bird to catch the spider that wriggled and jiggled and tickled inside her. |
||||
|
She swallowed the spider to catch the fly. |
||||
|
I don't know why she swallowed the fly. Perhaps she'll die.`, |
||||
|
|
||||
|
`I know an old lady who swallowed a cow. |
||||
|
I don't know how she swallowed a cow! |
||||
|
She swallowed the cow to catch the goat. |
||||
|
She swallowed the goat to catch the dog. |
||||
|
She swallowed the dog to catch the cat. |
||||
|
She swallowed the cat to catch the bird. |
||||
|
She swallowed the bird to catch the spider that wriggled and jiggled and tickled inside her. |
||||
|
She swallowed the spider to catch the fly. |
||||
|
I don't know why she swallowed the fly. Perhaps she'll die.`, |
||||
|
|
||||
|
`I know an old lady who swallowed a horse. |
||||
|
She's dead, of course!`, |
||||
|
} |
||||
|
|
||||
|
func TestVerse(t *testing.T) { |
||||
|
for v := 1; v <= 8; v++ { |
||||
|
if ret := Verse(v); ret != ref[v] { |
||||
|
t.Fatalf("Verse(%d) =\n%s\n want:\n%s", v, ret, ref[v]) |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
func TestVerses(t *testing.T) { |
||||
|
if ret, want := Verses(1, 2), ref[1]+"\n\n"+ref[2]; ret != want { |
||||
|
t.Fatalf("Verses(1, 2) =\n%s\n want:\n%s", ret, want) |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
|
||||
|
func TestSong(t *testing.T) { |
||||
|
if ret, want := Song(), strings.Join(ref[1:], "\n\n"); ret != want { |
||||
|
t.Fatalf("Song() =\n%s\n want:\n%s", ret, want) |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
func BenchmarkSong(b *testing.B) { |
||||
|
for i := 0; i < b.N; i++ { |
||||
|
Song() |
||||
|
} |
||||
|
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue