using System;
using System.Globalization;
using System.Linq;
using System.Collections.Generic;
public class Test
{
public static string TrimLength(string text, int maxLength)
{
if (text.Length > maxLength)
{
maxLength -= "...".Length;
maxLength = text.Length < maxLength ? text.Length : maxLength;
bool isLastSpace = text[maxLength] == ' ';
string part = text.Substring(0, maxLength);
if (isLastSpace)
return part + "...";
int lastSpaceIndexBeforeMax = part.LastIndexOf(' ');
if (lastSpaceIndexBeforeMax == -1)
return part + "...";
else
return text.Substring(0, lastSpaceIndexBeforeMax) + "...";
}
else
return text;
}
public static void Main()
{
Console.WriteLine(TrimLength("What can UK learn from Spanish high speed rail when its crap", 49));
Console.Write(TrimLength("What_can_UK_learn_from_Spanish_high_speed_rail_when its crap", 49));
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uR2xvYmFsaXphdGlvbjsKdXNpbmcgU3lzdGVtLkxpbnE7CnVzaW5nIFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljOwoKcHVibGljIGNsYXNzIFRlc3QKewogICAgIHB1YmxpYyBzdGF0aWMgc3RyaW5nIFRyaW1MZW5ndGgoc3RyaW5nIHRleHQsIGludCBtYXhMZW5ndGgpCiAgICB7CiAgICAgICAgaWYgKHRleHQuTGVuZ3RoID4gbWF4TGVuZ3RoKQogICAgICAgIHsKICAgICAgICAgICAgbWF4TGVuZ3RoIC09ICIuLi4iLkxlbmd0aDsKICAgICAgICAgICAgbWF4TGVuZ3RoID0gdGV4dC5MZW5ndGggPCBtYXhMZW5ndGggPyB0ZXh0Lkxlbmd0aCA6IG1heExlbmd0aDsKICAgICAgICAgICAgYm9vbCBpc0xhc3RTcGFjZSA9IHRleHRbbWF4TGVuZ3RoXSA9PSAnICc7CiAgICAgICAgICAgIHN0cmluZyBwYXJ0ID0gdGV4dC5TdWJzdHJpbmcoMCwgbWF4TGVuZ3RoKTsKICAgICAgICAgICAgaWYgKGlzTGFzdFNwYWNlKQogICAgICAgICAgICAgICAgcmV0dXJuIHBhcnQgKyAiLi4uIjsKICAgICAgICAgICAgaW50IGxhc3RTcGFjZUluZGV4QmVmb3JlTWF4ID0gcGFydC5MYXN0SW5kZXhPZignICcpOwogICAgICAgICAgICBpZiAobGFzdFNwYWNlSW5kZXhCZWZvcmVNYXggPT0gLTEpCiAgICAgICAgICAgICAgICByZXR1cm4gcGFydCArICIuLi4iOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICByZXR1cm4gdGV4dC5TdWJzdHJpbmcoMCwgbGFzdFNwYWNlSW5kZXhCZWZvcmVNYXgpICsgIi4uLiI7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICAgICAgcmV0dXJuIHRleHQ7CiAgICB9CiAgICAgICAgCglwdWJsaWMgc3RhdGljIHZvaWQgTWFpbigpCgl7CiAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoVHJpbUxlbmd0aCgiV2hhdCBjYW4gVUsgbGVhcm4gZnJvbSBTcGFuaXNoIGhpZ2ggc3BlZWQgcmFpbCB3aGVuIGl0cyBjcmFwIiwgNDkpKTsKICAgICAgICBDb25zb2xlLldyaXRlKFRyaW1MZW5ndGgoIldoYXRfY2FuX1VLX2xlYXJuX2Zyb21fU3BhbmlzaF9oaWdoX3NwZWVkX3JhaWxfd2hlbiBpdHMgY3JhcCIsIDQ5KSk7Cgl9Cn0=