FilePipeline.cs 905 B

1234567891011121314151617181920212223242526272829303132
  1. using System.Text.RegularExpressions;
  2. namespace Day1;
  3. public partial class FilePipeline
  4. {
  5. private readonly string _fileName;
  6. private readonly IStringTransform[] _transforms;
  7. public FilePipeline(string fileName, params IStringTransform[] transforms)
  8. {
  9. _fileName = fileName;
  10. _transforms = transforms;
  11. }
  12. public IEnumerable<int> Extract()
  13. {
  14. using var reader = File.OpenText(_fileName);
  15. while (!reader.EndOfStream)
  16. {
  17. var line = reader.ReadLine();
  18. var result = _transforms.Aggregate(line!, (prev, transform) => transform.Transform(prev));
  19. if (result.Length < 1)
  20. {
  21. throw new InvalidOperationException($"Not enough digits: '{line}'");
  22. }
  23. yield return int.Parse(new string(new char[] { result.First(), result.Last() }));
  24. }
  25. }
  26. }