Skip to content

Instantly share code, notes, and snippets.

@gopigujjula
Last active August 29, 2015 14:22
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save gopigujjula/76baf6c38b3c5f89445c to your computer and use it in GitHub Desktop.
Save gopigujjula/76baf6c38b3c5f89445c to your computer and use it in GitHub Desktop.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace HorseRaceProblem
{
public class HorseRace
{
static void Main(string[] args)
{
HorseRace objHorseRace = new HorseRace();
Dictionary<string, int> lstHorse = new Dictionary<string, int>();
Console.WriteLine("Please enter 25 horses randome speeds in numbers");
for (int j = 0; j < 25; j++)
{
try
{
lstHorse.Add("H" + (j+1), Convert.ToInt32(Console.ReadLine()));
}
catch (FormatException)
{
Console.WriteLine("Input is not a valid integer, please press enter to exit.");
Console.ReadLine();
return;
}
}
//Creating horses with static data (randome speeds)
//Dictionary<string, int> lstHorse = new Dictionary<string, int>()
// {
// {"H1",10},{"H2",5},{"H3",1},{"H4",45},{"H5",57},
// {"H6",60},{"H7",3},{"H8",4},{"H9",2},{"H10",8},
// {"H11",15},{"H12",18},{"H13",12},{"H14",20},{"H15",25},
// {"H16",87},{"H17",40},{"H18",19},{"H19",60},{"H20",47},
// {"H21",33},{"H22",22},{"H23",11},{"H24",77},{"H25",66}
// };
Console.Clear();
Console.WriteLine(objHorseRace.GetRaceHorseText("Inputted values:", lstHorse));
Console.ReadLine();
//split the data into 5 lists
List<Dictionary<string, int>> lstHorseBatch = new List<Dictionary<string, int>>();
for (int i = 0; i < 5; i++)
{
lstHorseBatch.Add(lstHorse.Skip(i * 5).Take(5).ToDictionary(S => S.Key, S => S.Value));
}
//First race from (H1 - H5)
var firstRaceResult = lstHorseBatch[0].OrderByDescending(F => F.Value).Take(3).ToDictionary(S => S.Key, S => S.Value);
var firstRaceResultHorses = new List<string>(firstRaceResult.Keys);
var firstRaceResultValues = new List<int>(firstRaceResult.Values);
//Second race from (H6 - H10)
var secondRaceResult = lstHorseBatch[1].OrderByDescending(F => F.Value).Take(3).ToDictionary(S => S.Key, S => S.Value);
var secondRaceResultHorses = new List<string>(secondRaceResult.Keys);
var secondRaceResultValues = new List<int>(secondRaceResult.Values);
//Third race from (H11 - H15)
var thirdRaceResult = lstHorseBatch[2].OrderByDescending(F => F.Value).Take(3).ToDictionary(S => S.Key, S => S.Value);
var thirdRaceResultHorses = new List<string>(thirdRaceResult.Keys);
var thirdRaceResultValues = new List<int>(thirdRaceResult.Values);
//Fourth race from (H16 - H20)
var fourthRaceResult = lstHorseBatch[3].OrderByDescending(F => F.Value).Take(3).ToDictionary(S => S.Key, S => S.Value);
var fourthRaceResultHorses = new List<string>(fourthRaceResult.Keys);
var fourthRaceResultValues = new List<int>(fourthRaceResult.Values);
//Fifth race from (H21 - H25)
var fifthRaceResult = lstHorseBatch[4].OrderByDescending(F => F.Value).Take(3).ToDictionary(S => S.Key, S => S.Value);
var fifthRaceResultHorses = new List<string>(fifthRaceResult.Keys);
var fifthRaceResultValues = new List<int>(fifthRaceResult.Values);
Console.WriteLine("Races conducted:\n");
Console.WriteLine(objHorseRace.GetRaceHorseText("Race 1 Horses:", lstHorseBatch[0]));
Console.WriteLine("Race 1 Result(1st, 2nd, 3rd ranking horses) :" + firstRaceResultHorses[0] + "," + firstRaceResultHorses[1] + "," + firstRaceResultHorses[2]);
Console.ReadLine();
Console.WriteLine(objHorseRace.GetRaceHorseText("Race 2 Horses:", lstHorseBatch[1]));
Console.WriteLine("Race 2 Result(1st, 2nd, 3rd ranking horses) :" + secondRaceResultHorses[0] + "," + secondRaceResultHorses[1] + "," + secondRaceResultHorses[2]);
Console.ReadLine();
Console.WriteLine(objHorseRace.GetRaceHorseText("Race 3 Horses:", lstHorseBatch[2]));
Console.WriteLine("Race 3 Result(1st, 2nd, 3rd ranking horses) :" + thirdRaceResultHorses[0] + "," + thirdRaceResultHorses[1] + "," + thirdRaceResultHorses[2]);
Console.ReadLine();
Console.WriteLine(objHorseRace.GetRaceHorseText("Race 4 Horses:", lstHorseBatch[3]));
Console.WriteLine("Race 4 Result(1st, 2nd, 3rd ranking horses) :" + fourthRaceResultHorses[0] + "," + fourthRaceResultHorses[1] + "," + fourthRaceResultHorses[2]);
Console.ReadLine();
Console.WriteLine(objHorseRace.GetRaceHorseText("Race 5 Horses:", lstHorseBatch[4]));
Console.WriteLine("Race 5 Result(1st, 2nd, 3rd ranking horses) :" + fifthRaceResultHorses[0] + "," + fifthRaceResultHorses[1] + "," + fifthRaceResultHorses[2]);
Console.ReadLine();
//Sixth race between the winning horses in the first five races.
var sixthRaceHorses = new Dictionary<string, int>()
{
{firstRaceResultHorses[0],firstRaceResultValues[0]},
{secondRaceResultHorses[0],secondRaceResultValues[0]},
{thirdRaceResultHorses[0],thirdRaceResultValues[0]},
{fourthRaceResultHorses[0],fourthRaceResultValues[0]},
{fifthRaceResultHorses[0],fifthRaceResultValues[0]}
};
var sixthRaceResult = sixthRaceHorses.OrderByDescending(F => F.Value).Take(3).ToDictionary(S => S.Key, S => S.Value);
var sixthRaceResultHorses = new List<string>(sixthRaceResult.Keys);
var sixthRaceResultValues = new List<int>(sixthRaceResult.Values);
Console.WriteLine("Sixth race between the winning horses in the first five races.\n");
Console.WriteLine(objHorseRace.GetRaceHorseText("Race 6 Horses:", sixthRaceHorses));
Console.WriteLine("Race 6 Result(1st, 2nd, 3rd ranking horses) :" + sixthRaceResultHorses[0] + "," + sixthRaceResultHorses[1] + "," + sixthRaceResultHorses[2]);
Console.ReadLine();
List<Dictionary<string, int>> lstHorseResultBatch = new List<Dictionary<string, int>>()
{
firstRaceResult, secondRaceResult, thirdRaceResult,
fourthRaceResult, fifthRaceResult
};
List<Dictionary<string, int>> lstHorseNewBatch = new List<Dictionary<string, int>>();
foreach (string key in sixthRaceResultHorses)
{
for (int i = 0; i < lstHorseResultBatch.Count; i++)
{
if (lstHorseResultBatch[i].Keys.Contains(key))
{
lstHorseNewBatch.Add(lstHorseResultBatch[i]);
}
}
}
var resultKeys1 = new List<string>(lstHorseNewBatch[0].Keys);
var resultKeys2 = new List<string>(lstHorseNewBatch[1].Keys);
var resultKeys3 = new List<string>(lstHorseNewBatch[2].Keys);
var resultValues1 = new List<int>(lstHorseNewBatch[0].Values);
var resultValues2 = new List<int>(lstHorseNewBatch[1].Values);
var resultValues3 = new List<int>(lstHorseNewBatch[2].Values);
var seventhRaceHorses = new Dictionary<string, int>()
{
{resultKeys1[1],resultValues1[1]},
{resultKeys1[2],resultValues1[2]},
{resultKeys2[0],resultValues2[0]},
{resultKeys2[1],resultValues2[1]},
{resultKeys3[0],resultValues3[0]},
};
var seventhRaceResult = seventhRaceHorses.OrderByDescending(F => F.Value).Take(3).ToDictionary(S => S.Key, S => S.Value);
var seventhRaceResultHorses = new List<string>(seventhRaceResult.Keys);
var seventhRaceResultValues = new List<int>(seventhRaceResult.Values);
Console.WriteLine(objHorseRace.GetRaceHorseText("Race 7 Horses:", seventhRaceHorses));
Console.WriteLine("Race 7 Result(1st, 2nd, 3rd ranking horses) :" + seventhRaceResultHorses[0] + "," + seventhRaceResultHorses[1] + "," + seventhRaceResultHorses[2]);
Console.WriteLine();
Console.WriteLine("Total number of races coducted: 7");
Console.ReadLine();
Console.WriteLine("Final Result(1st, 2nd, 3rd ranking horses) :" + resultKeys1[0] + "," + seventhRaceResultHorses[0] + "," + seventhRaceResultHorses[1]);
Console.WriteLine();
Console.ReadLine();
}
public string GetRaceHorseText(string race, Dictionary<string, int> lstRaceHorse)
{
StringBuilder objRace = new StringBuilder(race);
foreach (KeyValuePair<string, int> pair in lstRaceHorse)
{
objRace.Append(" " + pair.Key + "[" + pair.Value + "],");
}
race = objRace.ToString();
race = race.Substring(0, race.Length - 1);
return race;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment