fork(67) download
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4.  
  5. class Program
  6. {
  7. static void Main(string[] args)
  8. {
  9. new Program().Run();
  10. }
  11.  
  12. void Run()
  13. {
  14. string line;
  15. while ((line = Console.ReadLine()) != null)
  16. {
  17. var parts = line.Split('-');
  18. RunTest(parts[0], parts[1]);
  19. }
  20. }
  21.  
  22. void RunTest(string start, string end)
  23. {
  24. if (start.Length != end.Length)
  25. throw new ArgumentException();
  26.  
  27. Console.WriteLine("Testing range: {0}-{1}", start, end);
  28.  
  29. var results = GetPatterns(start, end);
  30. foreach(var pattern in results)
  31. Console.WriteLine(pattern);
  32. }
  33.  
  34. IEnumerable<string> GetPatterns(string start, string end)
  35. {
  36. if (start.Length == 0)
  37. {
  38. yield return "";
  39. yield break;
  40. }
  41. var startPrefix = start.Substring(0, start.Length - 1);
  42. var endPrefix = end.Substring(0, end.Length - 1);
  43.  
  44. var startSuffix = start.Last();
  45. var endSuffix = end.Last();
  46.  
  47. var rec = GetPatterns(startPrefix, endPrefix).ToList();
  48. for (int i = 0; i < rec.Count; i++)
  49. {
  50. char startDigit = (i == 0) ? startSuffix : '0';
  51. char endDigit = (i == rec.Count - 1) ? endSuffix : '9';
  52.  
  53. if (startDigit == '0' && endDigit == '9')
  54. {
  55. yield return rec[i] + '*';
  56. }
  57. else
  58. {
  59. for (var digit = startDigit; digit <= endDigit; digit++)
  60. yield return rec[i] + digit;
  61. }
  62. }
  63. }
  64. }
  65.  
Success #stdin #stdout 0.04s 33888KB
stdin
777120000-777259999
777120000-777359999
555000000-555999999
stdout
Testing range: 777120000-777259999
77712****
77713****
77714****
77715****
77716****
77717****
77718****
77719****
77720****
77721****
77722****
77723****
77724****
77725****
Testing range: 777120000-777359999
77712****
77713****
77714****
77715****
77716****
77717****
77718****
77719****
7772*****
77730****
77731****
77732****
77733****
77734****
77735****
Testing range: 555000000-555999999
555******