Пример #1
0
        public void Run(string[] args)
        {
            IReader reader;

            if (args.Length > 0)
            {
                reader = new FileReader(args[0]);
            }
            else
            {
                reader = new ConsoleReader();
            }

            List <RainDeer> raindeers = new List <RainDeer>();
            //int time = int.Parse(reader.ReadLine());
            int time = 2503;

            while (!reader.EndOfStream)
            {
                var input = reader.ReadLine();
                if (string.IsNullOrEmpty(input))
                {
                    break;
                }

                var split = input.Split(' ');
                var deer  = new RainDeer()
                {
                    Name     = split[0],
                    Speed    = int.Parse(split[3]),
                    RaceTime = int.Parse(split[6]),
                    RestTime = int.Parse(split[13])
                };

                raindeers.Add(deer);
            }

            long   maxDistance = 0;
            string winner      = string.Empty;

            foreach (var deer in raindeers)
            {
                var distance = CalculateDistance(deer, time);
                if (distance > maxDistance)
                {
                    maxDistance = distance;
                    winner      = deer.Name;
                }
                WriteLine($"{deer.Name} traveled {distance} km.");
            }

            WriteLine();
            WriteLine($"Winner: {winner} with {maxDistance} km.");
        }
Пример #2
0
        public void Day14Part2()
        {
            var rainDeers = new RainDeer[]
            {
                new RainDeer("Comet", 14, 10, 127),
                new RainDeer("Dancer", 16, 11, 162)
            }.ToList();

            Day14.Race(rainDeers, 1000);

            Assert.AreEqual(689, rainDeers[1].Points);
            Assert.AreEqual(312, rainDeers[0].Points);
        }
Пример #3
0
        public void Day14Part1()
        {
            var comet = new RainDeer("Comet", 14, 10, 127);

            comet.TravelForSeconds(1000);
            Assert.AreEqual(1120, comet.TotalDistance);


            var dancer = new RainDeer("Dancer", 16, 11, 162);

            dancer.TravelForSeconds(1000);
            Assert.AreEqual(1056, dancer.TotalDistance);
        }
Пример #4
0
        long CalculateDistance(RainDeer deer, int time)
        {
            long totalDistance = 0;

            while (time > 0)
            {
                var timeToRace = time < deer.RaceTime ? time : deer.RaceTime;
                totalDistance += deer.Speed * timeToRace;
                time          -= timeToRace;

                time -= deer.RestTime;
            }

            return(totalDistance);
        }
Пример #5
0
        public void Run(string[] args)
        {
            IReader reader;

            if (args.Length > 0)
            {
                reader = new FileReader(args[0]);
            }
            else
            {
                reader = new ConsoleReader();
            }

            List <RainDeer> raindeers = new List <RainDeer>();
            //int time = int.Parse(reader.ReadLine());
            int time = 2503;

            while (!reader.EndOfStream)
            {
                var input = reader.ReadLine();
                if (string.IsNullOrEmpty(input))
                {
                    break;
                }

                var split = input.Split(' ');
                var deer  = new RainDeer()
                {
                    Name     = split[0],
                    Speed    = int.Parse(split[3]),
                    RaceTime = int.Parse(split[6]),
                    RestTime = int.Parse(split[13])
                };

                raindeers.Add(deer);
            }

            for (int i = 0; i < time; i++)
            {
                foreach (var deer in raindeers)
                {
                    if (deer.Statistics.CurrentRaceTime >= deer.RaceTime)
                    {
                        deer.Statistics.CurrentRestTime++;
                        if (deer.Statistics.CurrentRestTime >= deer.RestTime)
                        {
                            deer.Statistics.CurrentRaceTime = 0;
                            deer.Statistics.CurrentRestTime = 0;
                        }
                    }
                    else
                    {
                        deer.Statistics.CurrentRaceTime++;
                        deer.Statistics.TotalDistance += deer.Speed;
                    }
                }

                var ordered = raindeers.OrderByDescending(x => x.Statistics.TotalDistance);
                var max     = ordered.First().Statistics.TotalDistance;

                foreach (var deer in ordered)
                {
                    if (deer.Statistics.TotalDistance == max)
                    {
                        deer.Statistics.Score++;
                    }
                    else
                    {
                        break;
                    }
                }
            }

            var raceResult = raindeers.OrderByDescending(x => x.Statistics.Score);

            foreach (var deer in raceResult)
            {
                WriteLine($"{deer.Name} scored {deer.Statistics.Score}.");
            }
        }