using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication
{
class Program
{
static string ConvertWord(string word, HashSet<string> discovered)
{
StringBuilder sb = new StringBuilder(word.Length);
foreach (char c in word)
{
if (discovered.Contains(c.ToString()))
{
sb.Append(c);
}
else
{
sb.Append('_');
}
}
return sb.ToString();
}
static string ConvertWord2(string word, HashSet<string> discovered)
{
return string.Concat(word.Select(p => discovered.Contains(p.ToString()) ? p : '_'));
}
static void Main(string[] args)
{
HashSet<string> discovered = new HashSet<string>(StringComparer.InvariantCultureIgnoreCase);
string word = "Hello world";
discovered.Add("l");
string convertWord = ConvertWord(word, discovered);
Console.WriteLine(convertWord);
}
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLkxpbnE7CnVzaW5nIFN5c3RlbS5UZXh0OwoKbmFtZXNwYWNlIENvbnNvbGVBcHBsaWNhdGlvbgp7CiAgICBjbGFzcyBQcm9ncmFtCiAgICB7CiAgICAgICAgc3RhdGljIHN0cmluZyBDb252ZXJ0V29yZChzdHJpbmcgd29yZCwgSGFzaFNldDxzdHJpbmc+IGRpc2NvdmVyZWQpCiAgICAgICAgewogICAgICAgICAgICBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIod29yZC5MZW5ndGgpOwoKICAgICAgICAgICAgZm9yZWFjaCAoY2hhciBjIGluIHdvcmQpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGlmIChkaXNjb3ZlcmVkLkNvbnRhaW5zKGMuVG9TdHJpbmcoKSkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgc2IuQXBwZW5kKGMpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHNiLkFwcGVuZCgnXycpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gc2IuVG9TdHJpbmcoKTsKICAgICAgICB9CgogICAgICAgIHN0YXRpYyBzdHJpbmcgQ29udmVydFdvcmQyKHN0cmluZyB3b3JkLCBIYXNoU2V0PHN0cmluZz4gZGlzY292ZXJlZCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBzdHJpbmcuQ29uY2F0KHdvcmQuU2VsZWN0KHAgPT4gZGlzY292ZXJlZC5Db250YWlucyhwLlRvU3RyaW5nKCkpID8gcCA6ICdfJykpOwogICAgICAgIH0KCiAgICAgICAgc3RhdGljIHZvaWQgTWFpbihzdHJpbmdbXSBhcmdzKQogICAgICAgIHsKICAgICAgICAgICAgSGFzaFNldDxzdHJpbmc+IGRpc2NvdmVyZWQgPSBuZXcgSGFzaFNldDxzdHJpbmc+KFN0cmluZ0NvbXBhcmVyLkludmFyaWFudEN1bHR1cmVJZ25vcmVDYXNlKTsKCiAgICAgICAgICAgIHN0cmluZyB3b3JkID0gIkhlbGxvIHdvcmxkIjsKCiAgICAgICAgICAgIGRpc2NvdmVyZWQuQWRkKCJsIik7CgogICAgICAgICAgICBzdHJpbmcgY29udmVydFdvcmQgPSBDb252ZXJ0V29yZCh3b3JkLCBkaXNjb3ZlcmVkKTsKCiAgICAgICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKGNvbnZlcnRXb3JkKTsKICAgICAgICB9CiAgICB9Cn0K