fork(1) download
  1. using System;
  2. using System.Security.Cryptography;
  3. using System.Text;
  4. using System.Collections.Generic;
  5. using System.IO;
  6. using System.Linq;
  7. using System.Net;
  8.  
  9. namespace nboard
  10. {
  11. class Program
  12. {
  13. static void Main()
  14. {
  15. var roothash = HashCalculator.Calculate(new string('0',32)+"{Welcome to Nanoboard}");
  16. byte[] bytes = NanoEncoding.GetBytes(roothash+@"Свидетельство на товарный знак выдаётся в РФ сроком на 10 лет. В дальнейшем оно может быть по соответствующему заявлению в регистрирующий орган и уплаты соответствующей государственной пошлины продлено ещё на 10 лет, и так неограниченное число раз[18].
  17. Чтобы товарный знак приобрел известность и признание, требуются значительные капиталовложения и, обычно, значительный период времени. Поэтому в интересах каждого, кто стремится использовать товарный знак, быть уверенным, что ему предоставляется охрана как ценному объекту интеллектуальной собственности.
  18. Это зависит от законов о товарных знаках, однако наиболее общепринятым способом охраны товарного знака является его регистрация в Реестре товарных знаков, и большое число стран ставит эту регистрацию условием охраны товарных знаков. Сначала знак должен быть зарегистрирован, и как только он зарегистрирован, он охраняется, и его владелец имеет право воспрепятствовать другим лицам в его использовании.
  19. Однако регистрация не является единственным способом охраны товарного знака. В некоторых странах также охраняются незарегистрированные товарные знаки, однако это менее надёжная форма охраны, поскольку незарегистрированный товарный знак не защищен до тех пор, пока он не приобрел достаточную узнаваемость и репутацию на рынке, на что может уйти значительное время после первоначального выпуска на рынок.
  20. Если вы начинаете предлагать на рынке ваши продукты под новым товарным знаком, о котором никто не знает, этот товарный знак будет очень уязвимым. Можно претендовать на охрану, предоставляемую законами о недобросовестной конкуренции, однако в этом случае наиболее важным моментом является то, что знак должен приобрести репутацию.");
  21. Console.WriteLine(Convert.ToBase64String(bytes));
  22. }
  23. }
  24.  
  25. static class NanoEncoding
  26. {
  27. static string charset =
  28. "?!\"#$%&'()*+,-./0123456789:;<=> @ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~"+
  29. "ЎўЄєІіЇїАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюяčšžćśźńŭłČŠŽĆŚŽŽŬŁ" +
  30. "№©«»±®Ґґ°™—“”’‘…–\n\r\t";
  31.  
  32. public static byte[] GetBytes(string str)
  33. {
  34. byte[] bytes = new byte[str.Length];
  35. int i = 0;
  36.  
  37. foreach (var c in str)
  38. {
  39. int iof = charset.IndexOf(c);
  40. if (iof == -1) bytes[i++] = 0;
  41. else bytes[i++] = (byte)iof;
  42. }
  43.  
  44. return bytes;
  45. }
  46.  
  47. public static string GetString(byte[] bytes)
  48. {
  49. char[] chars = new char[bytes.Length];
  50. int i = 0;
  51.  
  52. foreach (var b in bytes)
  53. {
  54. if (b > charset.Length) chars[i++] = '?';
  55. else chars[i++] = charset[b];
  56. }
  57.  
  58. return new string(chars);
  59. }
  60. }
  61.  
  62. static class HashCalculator
  63. {
  64. public const int HashCrop = 16;
  65.  
  66. public static string Calculate(string raw)
  67. {
  68. byte[] bhash = MD5.Create().ComputeHash(NanoEncoding.GetBytes(raw));
  69. StringBuilder sb = new StringBuilder();
  70.  
  71. for (int i = 0; i < HashCrop; i++)
  72. {
  73. sb.Append(bhash[i].ToString("x2"));
  74. }
  75.  
  76. return sb.ToString();
  77. }
  78. }
  79. }
Success #stdin #stdout 0.13s 24320KB
stdin
Standard input is empty
stdout
REMYEBRFFhAVGUYVQURDQUEUFxZGQkUVQRhEFRcRREN5ipGMjZuNlKWam4qXH5aIH5uXioiZlqSSH5CWiJMfiqSMiI6bmqgfih94fB+amZeTl5UflogfERAflI2bDh9pH4yIlKWWjZKhjZUfl5aXH5WXj42bH4mkm6UfmJcfmpeXm4qNm5qbipynoo2VnB+QiKiKlI2Wkacfih+ZjYuRmpuZkZmcp6KRkh+XmYuIlh+RH5yYlIibpB+al5ebio2bmpuKnKeijZIfi5eanIyImZqbio2WlpeSH5iXoZSRlqQfmJmXjJSNlpcfjaKOH5aIHxEQH5SNmwwfkR+biJMflo2Xi5mIlpGgjZaWl40foJGalJcfmYiQOxEYPQ7Mf5uXiaQfm5eKiJmWpJIfkJaIkx+YmZGXiZmNlB+RkIqNmpuWl5qbpR+RH5iZkZCWiJaRjQwfm5mNiZynm5qoH5CWiKCRm42UpZakjR+TiJiRm4iUl4qUl4+NlpGoH5EMH5eJpKCWlwwfkJaIoJGbjZSllqSSH5iNmZGXjB+KmY2VjZaRDh93l6abl5WcH4ofkZabjZmNmoieH5OIj4yXi5cMH5Oblx+am5mNlZGbmqgfkZqYl5SlkJeKiJulH5uXioiZlqSSH5CWiJMMH4mkm6UfnIqNmY2WlqSVDB+gm5cfjZWcH5iZjYyXmpuIipSojZuaqB+XnpmIlogfk4iTH5+NlpaXlZwfl4mjjZObnB+RlpuNlJSNk5uciJSllpeSH5qXiZqbio2Wlpeam5EOzIWblx+QiIqRmpGbH5ebH5CIk5eWl4oflx+bl4qImZaknh+QloiTiJ4MH5eMloiTlx+WiJGJl5SNjR+XiaKNmJmRlqibpJUfmpiXmpeJl5Ufl56ZiJakH5uXioiZlpeLlx+QloiTiB+oipSojZuaqB+Ni5cfmY2LkZqbmYifkagfih94jY2am5mNH5uXioiZlqSeH5CWiJOXigwfkR+Jl5SloZeNH6CRmpSXH5qbmYiWH5qbiIqRmx+mm5wfmY2LkZqbmYifkacfnJqUl4qRjZUfl56ZiJakH5uXioiZlqSeH5CWiJOXig4feZaIoIiUiB+QloiTH4yXlI+Nlh+JpJulH5CImY2LkZqbmZGZl4qIlgwfkR+TiJMfm5eUpZOXH5eWH5CImY2LkZqbmZGZl4qIlgwfl5Yfl56ZiJaojZuaqAwfkR+Ni5cfipSIjI2UjZ8fkZWNjZsfmJmIipcfipeamJmNmKibmpuKl4qIm6UfjJmci5GVH5SRn4iVH4ofjYuXH5GamJeUpZCXioiWkZEOzHaMloiTlx+ZjYuRmpuZiJ+RqB+WjR+oipSojZuaqB+NjJGWmpuKjZaWpJUfmpiXmpeJl5Ufl56ZiJakH5uXioiZlpeLlx+QloiTiA4faR+WjZOXm5eZpJ4fmpuZiJaInh+biJOPjR+XnpmIlqinm5qoH5aNkIiZjYuRmpuZkZmXioiWlqSNH5uXioiZlqSNH5CWiJORDB+XjJaIk5cfppuXH5WNlo2NH5aIjI6PloioH52XmZWIH5eemYiWpAwfmJeak5eUpZOcH5aNkIiZjYuRmpuZkZmXioiWlqSSH5uXioiZlqSSH5CWiJMflo0fkIiikaKNlh+Mlx+bjZ4fmJeZDB+Yl5OIH5eWH5aNH5iZkZeJmY2UH4yXmpuIm5eglpynH5yQloiKiI2Vl5qbpR+RH5mNmJybiJ+Rpx+WiB+ZpJaTjQwflogfoJuXH5WXj42bH5ySm5EfkJaIoJGbjZSllpeNH4qZjZWoH5iXmpSNH5iNmYqXloigiJSllpeLlx+KpJicmpOIH5aIH5mklpeTDsxsmpSRH4qkH5aIoJGWiI2bjR+YmY2MlIiLiJulH5aIH5mklpONH4qIoZEfmJmXjJyTm6QfmJeMH5aXiqSVH5uXioiZlqSVH5CWiJOXlQwflx+Tl5uXmZeVH5aRk5uXH5aNH5CWiI2bDB+mm5ebH5uXioiZlqSSH5CWiJMfiZyMjZsfl6CNlqUfnKiQipGVpJUOH3SXj5aXH5iZjZuNloyXioibpR+WiB+XnpmIlpwMH5iZjYyXmpuIipSojZWcpx+QiJOXloiVkR+XH5aNjJeJmZeal4qNmpuWl5Ifk5eWk5yZjZafkZEMH5eMloiTlx+KH6abl5UfmpScoIiNH5aIkYmXlI2NH4qIj5aklR+Vl5WNlpuXlR+oipSojZuaqB+blwwfoJuXH5CWiJMfjJeUj42WH5iZkZeJmY2am5EfmY2YnJuIn5GnDg==