Last active
August 29, 2015 14:22
-
-
Save gopigujjula/76baf6c38b3c5f89445c to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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