From 70581bd3636d1fe2e37512df75a5736802709ce6 Mon Sep 17 00:00:00 2001 From: Dmitry Kokorin Date: Mon, 29 Feb 2016 13:59:14 +0300 Subject: [PATCH] food chain: initial commit --- cpp/food-chain/food_chain.cpp | 79 +++++++++++++++++++++++++++++++++++ cpp/food-chain/food_chain.h | 13 ++++++ 2 files changed, 92 insertions(+) create mode 100644 cpp/food-chain/food_chain.cpp create mode 100644 cpp/food-chain/food_chain.h diff --git a/cpp/food-chain/food_chain.cpp b/cpp/food-chain/food_chain.cpp new file mode 100644 index 0000000..9934c81 --- /dev/null +++ b/cpp/food-chain/food_chain.cpp @@ -0,0 +1,79 @@ +#include "food_chain.h" + +#include + +namespace food_chain { + +using namespace std; + + +static const char *animals[] = + {"fly", "spider", "bird", "cat", "dog", "goat", "cow", "horse"}; + +static const char *verse_phrase[] = { + "", + "It wriggled and jiggled and tickled inside her.\n", + "How absurd to swallow a bird!\n", + "Imagine that, to swallow a cat!\n", + "What a hog, to swallow a dog!\n", + "Just opened her throat and swallowed a goat!\n", + "I don't know how she swallowed a cow!\n", + "She's dead, of course!\n" +}; + +static const int size_of_animals = sizeof(animals) / sizeof(*animals); + + +string verse(int index) +{ + string result; + + --index; + + result += string("I know an old lady who swallowed a ") + + animals[index] + + ".\n" + + verse_phrase[index]; + + if (index != size_of_animals - 1) { + + for (int i = index; i > 0; --i) { + + if (i == 2) { + + result += "She swallowed the bird to catch the spider " + "that wriggled and jiggled and tickled inside her.\n"; + } + else { + + result += string("She swallowed the ") + + animals[i] + + " to catch the " + + animals[i-1] + + ".\n"; + } + } + + result += "I don't know why she swallowed the fly. " + "Perhaps she'll die.\n"; + } + + return result; +} + +string verses(int from_index, int to_index) +{ + string result; + + for (int i = from_index; i <= to_index; ++i) + result += verse(i) + '\n'; + + return result; +} + +string sing() +{ + return verses(1, 8); +} + +} diff --git a/cpp/food-chain/food_chain.h b/cpp/food-chain/food_chain.h new file mode 100644 index 0000000..a4da68d --- /dev/null +++ b/cpp/food-chain/food_chain.h @@ -0,0 +1,13 @@ +#pragma once + +#define EXERCISM_RUN_ALL_TESTS + +#include + +namespace food_chain { + +std::string verse(int index); +std::string verses(int from_index, int to_index); +std::string sing(); + +}