using System;
using System.Linq;
using System.Text.RegularExpressions;
using System.Diagnostics;
public class Test
{
public static void Main()
{
var sw = new Stopwatch();
string s;
Regex r;
const int n = 19;
Regex.Replace("any", ".", "x");
"any".AsEnumerable();
sw.Restart();
s = "string";
for (int q=0; q<n; ++q) s = Regex.Replace(s, "(.)(?=.)", "$1 ");
sw.Stop();
Console.WriteLine("{0} {1}", s.GetHashCode(), sw.ElapsedMilliseconds);
GC.Collect();
sw.Restart();
s = "string";
r = new Regex("(.)(?=.)");
for (int q=0; q<n; ++q) s = r.Replace(s, "$1 ");
sw.Stop();
Console.WriteLine("{0} {1}", s.GetHashCode(), sw.ElapsedMilliseconds);
GC.Collect();
sw.Restart();
s = "string";
r = new Regex("(.)(?=.)", RegexOptions.Compiled);
for (int q=0; q<n; ++q) s = r.Replace(s, "$1 ");
sw.Stop();
Console.WriteLine("{0} {1}", s.GetHashCode(), sw.ElapsedMilliseconds);
GC.Collect();
sw.Restart();
s = "string";
for (int q=0; q<n; ++q) s = String.Join(" ", s.AsEnumerable());
sw.Stop();
Console.WriteLine("{0} {1}", s.GetHashCode(), sw.ElapsedMilliseconds);
GC.Collect();
sw.Restart();
s = "string";
for (int q=0; q<n; ++q) s = String.Join(" ", s.ToCharArray());
sw.Stop();
Console.WriteLine("{0} {1}", s.GetHashCode(), sw.ElapsedMilliseconds);
GC.Collect();
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uTGlucTsKdXNpbmcgU3lzdGVtLlRleHQuUmVndWxhckV4cHJlc3Npb25zOwp1c2luZyBTeXN0ZW0uRGlhZ25vc3RpY3M7CgpwdWJsaWMgY2xhc3MgVGVzdAp7CiAgICBwdWJsaWMgc3RhdGljIHZvaWQgTWFpbigpCiAgICB7CiAgICAJdmFyIHN3ID0gbmV3IFN0b3B3YXRjaCgpOwogICAgCXN0cmluZyBzOwogICAgCVJlZ2V4IHI7CiAgICAJCiAgICAJY29uc3QgaW50IG4gPSAxOTsKCgkJUmVnZXguUmVwbGFjZSgiYW55IiwgIi4iLCAieCIpOwoJCSJhbnkiLkFzRW51bWVyYWJsZSgpOwoKCQlzdy5SZXN0YXJ0KCk7CiAgICAgICAgcyA9ICJzdHJpbmciOwogICAgICAgIGZvciAoaW50IHE9MDsgcTxuOyArK3EpIHMgPSBSZWdleC5SZXBsYWNlKHMsICIoLikoPz0uKSIsICIkMSAiKTsKICAgICAgICBzdy5TdG9wKCk7CiAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoInswfSB7MX0iLCBzLkdldEhhc2hDb2RlKCksIHN3LkVsYXBzZWRNaWxsaXNlY29uZHMpOwogICAgICAgIEdDLkNvbGxlY3QoKTsKCgkJc3cuUmVzdGFydCgpOwogICAgICAgIHMgPSAic3RyaW5nIjsKICAgICAgICByID0gbmV3IFJlZ2V4KCIoLikoPz0uKSIpOwogICAgICAgIGZvciAoaW50IHE9MDsgcTxuOyArK3EpIHMgPSByLlJlcGxhY2UocywgIiQxICIpOwogICAgICAgIHN3LlN0b3AoKTsKICAgICAgICBDb25zb2xlLldyaXRlTGluZSgiezB9IHsxfSIsIHMuR2V0SGFzaENvZGUoKSwgc3cuRWxhcHNlZE1pbGxpc2Vjb25kcyk7CiAgICAgICAgR0MuQ29sbGVjdCgpOwoKCQlzdy5SZXN0YXJ0KCk7CiAgICAgICAgcyA9ICJzdHJpbmciOwogICAgICAgIHIgPSBuZXcgUmVnZXgoIiguKSg/PS4pIiwgUmVnZXhPcHRpb25zLkNvbXBpbGVkKTsKICAgICAgICBmb3IgKGludCBxPTA7IHE8bjsgKytxKSBzID0gci5SZXBsYWNlKHMsICIkMSAiKTsKICAgICAgICBzdy5TdG9wKCk7CiAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoInswfSB7MX0iLCBzLkdldEhhc2hDb2RlKCksIHN3LkVsYXBzZWRNaWxsaXNlY29uZHMpOwogICAgICAgIEdDLkNvbGxlY3QoKTsKCgkJc3cuUmVzdGFydCgpOwogICAgICAgIHMgPSAic3RyaW5nIjsKICAgICAgICBmb3IgKGludCBxPTA7IHE8bjsgKytxKSBzID0gU3RyaW5nLkpvaW4oIiAiLCBzLkFzRW51bWVyYWJsZSgpKTsKICAgICAgICBzdy5TdG9wKCk7CiAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoInswfSB7MX0iLCBzLkdldEhhc2hDb2RlKCksIHN3LkVsYXBzZWRNaWxsaXNlY29uZHMpOwogICAgICAgIEdDLkNvbGxlY3QoKTsKICAgICAgICAKCQlzdy5SZXN0YXJ0KCk7CiAgICAgICAgcyA9ICJzdHJpbmciOwogICAgICAgIGZvciAoaW50IHE9MDsgcTxuOyArK3EpIHMgPSBTdHJpbmcuSm9pbigiICIsIHMuVG9DaGFyQXJyYXkoKSk7CiAgICAgICAgc3cuU3RvcCgpOwogICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKCJ7MH0gezF9Iiwgcy5HZXRIYXNoQ29kZSgpLCBzdy5FbGFwc2VkTWlsbGlzZWNvbmRzKTsKICAgICAgICBHQy5Db2xsZWN0KCk7CiAgICB9Cn0=