fork download
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. class Program
  5. {
  6. static IEnumerable<string> Parts(string input, out int i)
  7. {
  8. var list = new List<string>();
  9. int level = 1, start = 1;
  10. i = 1;
  11. for (; i < input.Length && level > 0; i++)
  12. {
  13. if (input[i] == '[')
  14. level++;
  15. else if (input[i] == ']')
  16. level--;
  17.  
  18. if (input[i] == '/' && level == 1 || input[i] == ']' && level == 0)
  19. {
  20. if (start == i)
  21. list.Add(string.Empty);
  22. else
  23. list.Add(input.Substring(start, i - start));
  24. start = i + 1;
  25. }
  26. }
  27. return list;
  28. }
  29.  
  30. static IEnumerable<string> Combinations(string input, string current = "")
  31. {
  32. if (input == string.Empty)
  33. {
  34. if (current.Contains("["))
  35. return Combinations(current, string.Empty);
  36. return new List<string> { current };
  37. }
  38. else if (input[0] == '[')
  39. {
  40. int end;
  41. var parts = Parts(input, out end);
  42. return parts.SelectMany(x => Combinations(input.Substring(end, input.Length - end), current + x)).ToList();
  43. }
  44. else
  45. return Combinations(input.Substring(1, input.Length - 1), current + input[0]);
  46. }
  47.  
  48. static void Main(string[] args)
  49. {
  50. //string s = "[CST/] [bombay/mumbai/] [Airport/] [overseas[flight/]/International[ flight/]] Terminal[1/ 1]";
  51. //string s = "[where is/address of/] [Airport_Name_IATA_Code/] [City_Name/] [Airport/] [overseas/International/domestic] [terminal/terminals/terminals t/terminal t/t] [integer/space_integer/word/space_word/] [in/at]";
  52. //string s = "[where is/address of/] [MAA/] [chennai/] [Airport/] [overseas/International/] [terminal/terminals/terminals t/terminal t/t][1/ 1/one/ one/] [in/at]";
  53. //string s = "[MAA/] [chennai/] [Airport/] [overseas/International/] [terminal/terminals/terminals t/terminal t/t][1/ 1/one/ one/] [in/at]";
  54. string s = "[MAA/] [chennai [in/at/]/] [Airport/] [terminal t/t][1/ 1/ one/]";
  55. //string s = "[where is/address of/] [Airport_Name_IATA_Code/] [City_Name/] [Airport/] [overseas [flight/]/International [flight/]] Terminal[integer/space_integer/space_word]";
  56. var list = Combinations(s);
  57. foreach(string ss in list)
  58. Console.WriteLine(ss);
  59. }
  60. }
  61.  
Success #stdin #stdout 0.05s 23952KB
stdin
Standard input is empty
stdout
MAA chennai in Airport terminal t1
MAA chennai at Airport terminal t1
MAA chennai  Airport terminal t1
MAA chennai in Airport terminal t 1
MAA chennai at Airport terminal t 1
MAA chennai  Airport terminal t 1
MAA chennai in Airport terminal t one
MAA chennai at Airport terminal t one
MAA chennai  Airport terminal t one
MAA chennai in Airport terminal t
MAA chennai at Airport terminal t
MAA chennai  Airport terminal t
MAA chennai in Airport t1
MAA chennai at Airport t1
MAA chennai  Airport t1
MAA chennai in Airport t 1
MAA chennai at Airport t 1
MAA chennai  Airport t 1
MAA chennai in Airport t one
MAA chennai at Airport t one
MAA chennai  Airport t one
MAA chennai in Airport t
MAA chennai at Airport t
MAA chennai  Airport t
MAA chennai in  terminal t1
MAA chennai at  terminal t1
MAA chennai   terminal t1
MAA chennai in  terminal t 1
MAA chennai at  terminal t 1
MAA chennai   terminal t 1
MAA chennai in  terminal t one
MAA chennai at  terminal t one
MAA chennai   terminal t one
MAA chennai in  terminal t
MAA chennai at  terminal t
MAA chennai   terminal t
MAA chennai in  t1
MAA chennai at  t1
MAA chennai   t1
MAA chennai in  t 1
MAA chennai at  t 1
MAA chennai   t 1
MAA chennai in  t one
MAA chennai at  t one
MAA chennai   t one
MAA chennai in  t
MAA chennai at  t
MAA chennai   t
MAA  Airport terminal t1
MAA  Airport terminal t 1
MAA  Airport terminal t one
MAA  Airport terminal t
MAA  Airport t1
MAA  Airport t 1
MAA  Airport t one
MAA  Airport t
MAA   terminal t1
MAA   terminal t 1
MAA   terminal t one
MAA   terminal t
MAA   t1
MAA   t 1
MAA   t one
MAA   t
 chennai in Airport terminal t1
 chennai at Airport terminal t1
 chennai  Airport terminal t1
 chennai in Airport terminal t 1
 chennai at Airport terminal t 1
 chennai  Airport terminal t 1
 chennai in Airport terminal t one
 chennai at Airport terminal t one
 chennai  Airport terminal t one
 chennai in Airport terminal t
 chennai at Airport terminal t
 chennai  Airport terminal t
 chennai in Airport t1
 chennai at Airport t1
 chennai  Airport t1
 chennai in Airport t 1
 chennai at Airport t 1
 chennai  Airport t 1
 chennai in Airport t one
 chennai at Airport t one
 chennai  Airport t one
 chennai in Airport t
 chennai at Airport t
 chennai  Airport t
 chennai in  terminal t1
 chennai at  terminal t1
 chennai   terminal t1
 chennai in  terminal t 1
 chennai at  terminal t 1
 chennai   terminal t 1
 chennai in  terminal t one
 chennai at  terminal t one
 chennai   terminal t one
 chennai in  terminal t
 chennai at  terminal t
 chennai   terminal t
 chennai in  t1
 chennai at  t1
 chennai   t1
 chennai in  t 1
 chennai at  t 1
 chennai   t 1
 chennai in  t one
 chennai at  t one
 chennai   t one
 chennai in  t
 chennai at  t
 chennai   t
  Airport terminal t1
  Airport terminal t 1
  Airport terminal t one
  Airport terminal t
  Airport t1
  Airport t 1
  Airport t one
  Airport t
   terminal t1
   terminal t 1
   terminal t one
   terminal t
   t1
   t 1
   t one
   t