fork download
  1. using System;
  2. using System.Diagnostics;
  3. using System.Text;
  4.  
  5. public class Test
  6. {
  7. static string ExpandStringGuffa(string str, int length)
  8. {
  9. if (length <= str.Length) return str.Substring(0, length);
  10.  
  11. while (str.Length * 2 <= length)
  12. {
  13. str += str;
  14. }
  15. if (str.Length < length)
  16. {
  17. str += str.Substring(0, length - str.Length);
  18. }
  19. return str;
  20. }
  21.  
  22. static string ExpandStringSb(string str, int length)
  23. {
  24. if (length <= str.Length) return str.Substring(0, length);
  25.  
  26. var sb = new StringBuilder(str, length);
  27. while (sb.Length * 2 <= length)
  28. {
  29. sb.Append(sb);
  30. }
  31. if (sb.Length < length)
  32. {
  33. sb.Append(sb.ToString(), 0, length - sb.Length);
  34. }
  35. return sb.ToString();
  36. }
  37.  
  38. static string ExpandStringCharArr(string str, int length)
  39. {
  40. var i = str.Length;
  41. if (i >= length) return str.Substring(0, length);
  42.  
  43. var result = new char[length];
  44. Array.Copy(str.ToCharArray(), 0, result, 0, i);
  45. while (i * 2 <= length)
  46. {
  47. Array.Copy(result, 0, result, i, i);
  48. i *= 2;
  49. }
  50. if (i < length)
  51. {
  52. Array.Copy(result, 0, result, i, length - i);
  53. }
  54. return new String(result);
  55. }
  56.  
  57. public static void Main()
  58. {
  59. Console.WriteLine("Guffa\t\t\tStringBuilder\t\t\tCharArray");
  60. Console.WriteLine("-------------------------------------------------");
  61.  
  62. var sw = new Stopwatch();
  63.  
  64. sw.Restart();
  65. for(var i = 0; i < 1000; i++) ExpandStringGuffa("Test", i);
  66. sw.Stop();
  67. Console.Write(sw.ElapsedTicks + "\t\t\t");
  68.  
  69. sw.Restart();
  70. for(var i = 5; i < 1000; i++) ExpandStringSb("Test", i);
  71. sw.Stop();
  72. Console.Write(sw.ElapsedTicks + "\t\t\t\t\t");
  73.  
  74. sw.Restart();
  75. for(var i = 5; i < 1000; i++) ExpandStringCharArr("Test", i);
  76. sw.Stop();
  77. Console.WriteLine(sw.ElapsedTicks);
  78.  
  79. sw.Restart();
  80. for(var i = 0; i < 1000; i++) ExpandStringGuffa("Test", i);
  81. sw.Stop();
  82. Console.Write(sw.ElapsedTicks + "\t\t\t");
  83.  
  84. sw.Restart();
  85. for(var i = 5; i < 1000; i++) ExpandStringSb("Test", i);
  86. sw.Stop();
  87. Console.Write(sw.ElapsedTicks + "\t\t\t\t\t");
  88.  
  89. sw.Restart();
  90. for(var i = 5; i < 1000; i++) ExpandStringCharArr("Test", i);
  91. sw.Stop();
  92. Console.WriteLine(sw.ElapsedTicks);
  93.  
  94. sw.Restart();
  95. for(var i = 0; i < 1000; i++) ExpandStringGuffa("Test", i);
  96. sw.Stop();
  97. Console.Write(sw.ElapsedTicks + "\t\t\t");
  98.  
  99. sw.Restart();
  100. for(var i = 5; i < 1000; i++) ExpandStringSb("Test", i);
  101. sw.Stop();
  102. Console.Write(sw.ElapsedTicks + "\t\t\t\t\t");
  103.  
  104. sw.Restart();
  105. for(var i = 5; i < 1000; i++) ExpandStringCharArr("Test", i);
  106. sw.Stop();
  107. Console.WriteLine(sw.ElapsedTicks);
  108. }
  109. }
Success #stdin #stdout 0.06s 24240KB
stdin
Standard input is empty
stdout
Guffa			StringBuilder			CharArray
-------------------------------------------------
53241			63808					33345
22059			30713					20208
21999			30956					20939