WordToDigitTransform.cs 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. using System.Text.RegularExpressions;
  2. namespace Day1;
  3. public partial class WordToDigitTransform : IStringTransform
  4. {
  5. [GeneratedRegex("one|two|three|four|five|six|seven|eight|nine", RegexOptions.IgnoreCase, "en-US")]
  6. private static partial Regex NumberWords();
  7. private static readonly Dictionary<string, char> Digits = new()
  8. {
  9. ["one"] = '1',
  10. ["two"] = '2',
  11. ["three"] = '3',
  12. ["four"] = '4',
  13. ["five"] = '5',
  14. ["six"] = '6',
  15. ["seven"] = '7',
  16. ["eight"] = '8',
  17. ["nine"] = '9',
  18. };
  19. public string Transform(string input)
  20. {
  21. var result = new List<char>();
  22. for (var i = 0; i < input.Length; i++)
  23. {
  24. var current = input.Substring(i);
  25. var next = false;
  26. foreach (var kvp in Digits)
  27. {
  28. if (current.StartsWith(kvp.Key))
  29. {
  30. result.Add(kvp.Value);
  31. next = true;
  32. break;
  33. }
  34. }
  35. if (!next)
  36. {
  37. result.Add(current[0]);
  38. }
  39. }
  40. return string.Concat(result);
  41. }
  42. }