Program.cs 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. using Day6;
  2. if (args.Length < 1)
  3. {
  4. Console.WriteLine("Requires 1 args: inputFileName");
  5. return -1;
  6. }
  7. var inputFile = args[0];
  8. var parser = new RaceTimeParser();
  9. var races = parser.Parse(inputFile);
  10. var total = 1L;
  11. foreach (var race in races)
  12. {
  13. var bound = race.LowerBound();
  14. Console.WriteLine($"{race.Duration} / {race.Distance} => {bound}");
  15. var options = race.Duration - 2 * bound + 1;
  16. Console.WriteLine($"Options: {options}");
  17. total *= options;
  18. }
  19. Console.WriteLine();
  20. Console.WriteLine($"Total: {total}");
  21. var combinedTime = 0L;
  22. var combinedDistance = 0L;
  23. foreach (var race in races)
  24. {
  25. combinedTime = combinedTime * (long)Math.Pow(10, (int)Math.Ceiling(Math.Log10(race.Duration))) + race.Duration;
  26. combinedDistance = combinedDistance * (long)Math.Pow(10, (int)Math.Ceiling(Math.Log10(race.Distance))) + race.Distance;
  27. }
  28. var actualRace = new RaceStats(combinedTime, combinedDistance);
  29. var actualBound = actualRace.LowerBound();
  30. Console.WriteLine($"{actualRace.Duration} / {actualRace.Distance} => {actualBound}");
  31. var actualOptions = actualRace.Duration - 2 * actualBound + 1;
  32. Console.WriteLine($"Options: {actualOptions}");
  33. return 0;