CalibrationExtractor.cs 1.1 KB

1234567891011121314151617181920212223242526272829303132333435
  1. using System.Text.RegularExpressions;
  2. namespace Day1;
  3. public class CalibrationExtractor
  4. {
  5. private readonly string _fileName;
  6. private readonly DigitTransformer _transformer;
  7. private readonly Regex _nonDigit = new Regex(@"[^\d]", RegexOptions.Compiled);
  8. public CalibrationExtractor(string fileName, DigitTransformer transformer = null)
  9. {
  10. _fileName = fileName;
  11. _transformer = transformer;
  12. }
  13. public IEnumerable<int> Extract()
  14. {
  15. using var reader = File.OpenText(_fileName);
  16. while (!reader.EndOfStream)
  17. {
  18. var line = reader.ReadLine();
  19. if (_transformer != null)
  20. {
  21. line = _transformer.Replace(line);
  22. }
  23. var calibrationValueStr = _nonDigit.Replace(line, "");
  24. if (calibrationValueStr.Length < 1)
  25. {
  26. throw new InvalidOperationException($"Not enough digits: '{line}'");
  27. }
  28. yield return int.Parse(new string(new char[] { calibrationValueStr.First(), calibrationValueStr.Last() }));
  29. }
  30. }
  31. }