using System.Collections.Generic;
public Dictionary<string, List<string>> ZooAnimals = new Dictionary<string, List<string>>();
ZooAnimals.Add("antelope", new List<string>(){"grass"});
ZooAnimals.Add("big-fish", new List<string>(){"litte-fish"});
ZooAnimals.Add("bug", new List<string>(){"bug", "leaves"});
ZooAnimals.Add("bear", new List<string>(){"big-fish", "bug", "chicken", "cow", "leaves", "sheep"});
ZooAnimals.Add("chicken", new List<string>(){"bug"});
ZooAnimals.Add("cow", new List<string>(){"grass"});
ZooAnimals.Add("fox", new List<string>(){"chicken", "sheep"});
ZooAnimals.Add("giraffe", new List<string>(){"leaves"});
ZooAnimals.Add("lion", new List<string>(){"antelope", "cow"});
ZooAnimals.Add("panda", new List<string>(){"leave"});
ZooAnimals.Add("sheep", new List<string>(){"grass"});
public static List<string> eatingOutput = new List<string>();
public static void Main() {
Console.WriteLine("Please enter your list of animals");
string input = Console.ReadLine();
List<string> animalList = input.Split(',').ToList();
List<string> output = new List<string>();
output.Add(string.Join(",", animalList));
Program.EatEverythingPossible(animalList);
output.AddRange(Program.eatingOutput);
output.ForEach(i => Console.WriteLine(i));
static public void EatEverythingPossible(List<string> animalList) {
for(int i = 0; i < animalList.Count(); i++) {
animalList = LeftHandEatingRule(animalList, animalList[i]);
animalList = RightHandEatingRule(animalList, animalList[i]);
Program.eatingOutput.Add(string.Join(",", animalList));
static public List<string> RightHandEatingRule(List<string> animalList, string animal) {
Dictionary<string, List<string>> zooAnimals = new Animals().ZooAnimals;
int index = animalList.FindIndex(x => x.Contains(animal));
string currentAnimal = animalList[index];
for(int j = index + 1; j < animalList.Count(); j++) {
if (zooAnimals.ContainsKey(currentAnimal) && zooAnimals[currentAnimal].Contains(animalList[j])) {
Program.eatingOutput.Add(string.Format("{0} eats {1}", currentAnimal, animalList[j]));
static public List<string> LeftHandEatingRule(List<string> animalList, string animal) {
Dictionary<string, List<string>> zooAnimals = new Animals().ZooAnimals;
int index = animalList.FindIndex(x => x.Contains(animal));
string currentAnimal = animalList[index];
for(int j = 0; j < index; j++) {
if (zooAnimals.ContainsKey(currentAnimal) && zooAnimals[currentAnimal].Contains(animalList[j])) {
Program.eatingOutput.Add(string.Format("{0} eats {1}", currentAnimal, animalList[j]));