{"id":349544,"date":"2023-06-29T15:00:39","date_gmt":"2023-06-29T15:00:39","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=349544"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=349544","title":{"rendered":"<span>\u041a\u0430\u0436\u0435\u0442\u0441\u044f, \u0432\u044b \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0434\u0430\u0432\u0430\u0442\u044c \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0435 \u0437\u0430\u0434\u0430\u043d\u0438\u044f \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442\u0430\u043c \u043d\u0430 \u0434\u043e\u043c<\/span>"},"content":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-1\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0412 2023 \u0433\u043e\u0434\u0443, \u0432 \u044d\u043f\u043e\u0445\u0443 \u0432\u0437\u0440\u044b\u0432\u043d\u043e\u0433\u043e \u0440\u043e\u0441\u0442\u0430 \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u0435\u0439, \u0432\u0441\u044f IT-\u043e\u0442\u0440\u0430\u0441\u043b\u044c \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442 \u0434\u0430\u0432\u0430\u0442\u044c \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442\u0430\u043c \u0432 \u0441\u0442\u0430\u0436\u0451\u0440\u044b (\u0438 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e) \u0434\u043e\u043c\u0430\u0448\u043d\u0438\u0435 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0435 \u0437\u0430\u0434\u0430\u043d\u0438\u044f. \u041a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u0442\u0440\u0430\u0442\u044f\u0442 \u0432\u0440\u0435\u043c\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u0442\u044c \u044d\u0442\u0438 \u0437\u0430\u0434\u0430\u043d\u0438\u044f, \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u044b \u0442\u0440\u0430\u0442\u044f\u0442 \u0432\u0440\u0435\u043c\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e\u0431\u044b \u0438\u0445 \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u043f\u043e\u0442\u043e\u043c \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u0441\u043d\u043e\u0432\u0430 \u0442\u0440\u0430\u0442\u044f\u0442 \u0432\u0440\u0435\u043c\u044f \u043d\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443\u2026 \u0412 \u044d\u0442\u043e\u0439 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0437\u0430\u043c\u0435\u0442\u043a\u0435 \u044f \u043f\u0440\u043e\u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u0443\u044e, \u0447\u0442\u043e \u0432\u0441\u0435 \u0437\u0430\u0434\u0430\u0447\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u043b\u0435\u0442 \u0440\u0435\u0448\u0430\u044e\u0442\u0441\u044f \u0437\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u0438\u043d\u0443\u0442 \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u043d\u0435\u0439\u0440\u043e\u043d\u043a\u0438, \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043a\u0430\u0436\u0434\u044b\u0439.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/4z\/en\/kp\/4zenkpzw1sqzh7jblxtxvdddfdy.png\" data-src=\"https:\/\/habrastorage.org\/webt\/4z\/en\/kp\/4zenkpzw1sqzh7jblxtxvdddfdy.png\"\/><\/p>\n<p>\u042f \u0432\u043e\u0437\u044c\u043c\u0443 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0435 \u0437\u0430\u0434\u0430\u043d\u0438\u044f \u043d\u0430 Python, C++, Go \u0438 C#\u00a0 \u0438 \u0431\u0443\u0434\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0435 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0438, \u0443\u0431\u0440\u0430\u0432 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0439 \u0438 \u043f\u0440\u044f\u043c\u044b\u0435 \u0441\u0441\u044b\u043b\u043a\u0438, \u0447\u0442\u043e\u0431\u044b \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043b\u044e\u0431\u044b\u0435 \u043f\u043e\u0434\u043e\u0437\u0440\u0435\u043d\u0438\u044f \u0432 \u043f\u0440\u0435\u0434\u0432\u0437\u044f\u0442\u043e\u0441\u0442\u0438.<\/p>\n<p>  <\/p>\n<p>\u0410 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043d\u0435\u0439\u0440\u043e\u043d\u043a\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e ChatGPT Plus (GPT 4). \u041e\u043d\u0430 \u0432\u0441\u0451 \u0435\u0449\u0435 \u043e\u0447\u0435\u043d\u044c \u0433\u043b\u0443\u043f\u0430, \u043c\u043d\u043e\u0433\u043e \u0432\u044b\u0434\u0443\u043c\u044b\u0432\u0430\u0435\u0442 \u0438 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u0441\u043c\u0435\u0448\u043d\u043e \u043e\u0448\u0438\u0431\u0430\u0435\u0442\u0441\u044f, \u043d\u043e \u043a\u0430\u043a \u0440\u0430\u0437 \u0434\u043b\u044f \u0442\u0430\u043a\u0438\u0445 \u0437\u0430\u0434\u0430\u0447 \u0433\u043e\u0434\u0438\u0442\u0441\u044f \u0445\u043e\u0440\u043e\u0448\u043e.<\/p>\n<p>  <\/p>\n<p>\u0418 \u0434\u0430, \u0432\u043c\u0435\u0441\u0442\u043e \u0434\u0438\u0441\u043a\u043b\u0435\u0439\u043c\u0435\u0440\u0430. \u0415\u0441\u043b\u0438 \u0432\u044b \u0445\u043e\u0442\u044c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0443\u0441\u043f\u0435\u043b\u0438 \u00ab\u043f\u043e\u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u0447\u0430\u0442\u044c\u00bb \u0441 ChatGPT, \u0442\u043e \u0441\u0442\u0430\u0442\u044c\u044f \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u0432\u0430\u043c \u0433\u043b\u0443\u0431\u043e\u043a\u043e \u043a\u0430\u043f\u0438\u0442\u0430\u043d\u0441\u043a\u043e\u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e\u0439 (\u043e\u043d\u0430 \u0442\u0430\u043a\u0430\u044f \u0438 \u0435\u0441\u0442\u044c, \u0431\u0435\u0437\u0443\u0441\u043b\u043e\u0432\u043d\u043e). \u041d\u043e \u0435\u0441\u043b\u0438 \u0432\u044b \u0432\u043c\u0435\u0441\u0442\u043e \u0445\u0430\u0439\u043f\u0430 \u043f\u043e \u043d\u0435\u0439\u0440\u043e\u043d\u043a\u0430\u043c \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0438\u0442\u0430\u0435\u0442\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c, \u0442\u043e \u0443 \u0432\u0430\u0441 \u043d\u0435\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043d\u0430 \u0442\u0430\u043a\u0438\u0435 \u0440\u0430\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u044f. \u0422\u0430\u043a \u0447\u0442\u043e, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u0438\u043d\u0443\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b \u0441\u0435\u0439\u0447\u0430\u0441 \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u0442\u0435 \u043d\u0430 \u043f\u0440\u043e\u0447\u0442\u0435\u043d\u0438\u0435, \u0441\u044d\u043a\u043e\u043d\u043e\u043c\u044f\u0442 \u0432\u0430\u043c \u043c\u043d\u043e\u0433\u043e \u0447\u0430\u0441\u043e\u0432 \u0438\u043d\u0432\u0435\u0441\u0442\u0438\u0446\u0438\u0439 \u0432 \u00ab\u043d\u0435\u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0445 \u0441\u0442\u0430\u0436\u0435\u0440\u043e\u0432\u00bb \u0438 \u00ab\u043d\u0435\u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0445 \u0434\u0436\u0443\u043d\u043e\u0432\u00bb. \u0418 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043f\u043e\u043c\u043e\u0433\u0443\u0442 \u043d\u0435 \u043d\u0430\u0434\u0435\u043b\u0430\u0442\u044c \u043e\u0448\u0438\u0431\u043e\u043a \u043f\u0440\u0438 \u043d\u0430\u0439\u043c\u0435.<\/p>\n<p><a name=\"habracut\"><\/a>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">TL;DR<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<p>\u0421\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u0432\u0441\u0435 \u0432\u0430\u0448\u0438 \u0437\u0430\u0434\u0430\u043d\u0438\u044f \u0440\u0435\u0448\u0430\u044e\u0442\u0441\u044f \u043d\u0435\u0439\u0440\u043e\u043d\u043a\u043e\u0439.<\/p>\n<p>  <\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u0434\u0443\u043c\u0430\u0435\u0442\u0435, \u0447\u0442\u043e \u0432\u0430\u0448\u0435 \u0437\u0430\u0434\u0430\u043d\u0438\u0435 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u043d\u043e\u0435, \u0447\u0442\u043e\u0431\u044b \u0435\u0433\u043e \u043c\u043e\u0433\u043b\u0430 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u0439\u0440\u043e\u043d\u043a\u0430, \u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435:<\/p>\n<p>  <\/p>\n<ul>\n<li><a href=\"#go_random_gen\">\u0421\u0435\u0440\u0432\u0438\u0441 \u2014 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u2014 GO \u2014 \u0441\u0435\u0440\u0432\u0438\u0441 \u0438 \u0434\u043e\u043a\u0435\u0440 \u0434\u043b\u044f \u043d\u0435\u0433\u043e<\/a><\/li>\n<li><a href=\"#cpp_ping_pong\">\u041a\u043b\u0438\u0435\u043d\u0442-\u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0439 \u043f\u0438\u043d\u0433 \u043f\u043e\u043d\u0433 \u2014 \u0421++ \u2014 \u0434\u0432\u0430 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a\u0430 \u0441 \u0434\u043e\u043f\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438e\u043c, cmake<\/a><\/li>\n<li><a href=\"#csharp_rss\">RSS feed reader<\/a><\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u0434\u0443\u043c\u0430\u0435\u0442\u0435, \u0447\u0442\u043e \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c (\u0432\u044b \u0441\u0430\u043c\u0438 \u0435\u0433\u043e \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u043b\u0438) \u0437\u0430\u0434\u0430\u043d\u0438\u044f, \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u0435\u0433\u043e \u043d\u0435\u0440\u0435\u0448\u0430\u0435\u043c\u043e\u0441\u0442\u044c \u043d\u0435\u0439\u0440\u043e\u043d\u043a\u043e\u0439, \u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435:<\/p>\n<p>  <\/p>\n<ul>\n<li><a href=\"#cpp_scanner\">\u0421\u043a\u0430\u043d\u0435\u0440 \u043e\u043f\u0430\u0441\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u2014 \u0421++ \u2014 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u0430\u044f \u0448\u0442\u0443\u043a\u0430<\/a><\/li>\n<li><a href=\"#py_cache_dec\">\u041c\u043e\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u0432 \u0418 \u0447\u0442\u043e \u0436\u0435 \u0434\u0435\u043b\u0430\u0442\u044c? \u00a0\u2014 \u043d\u0435 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u043b \u0437\u0430\u0434\u0430\u0447\u0443 \u0432 \u0442\u0430\u043a\u043e\u0439 \u0444\u043e\u0440\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u043a\u0435<\/a><\/li>\n<\/ul>\n<\/div><\/div>\n<p>  <\/p>\n<h1 id=\"zadachi\">\u0417\u0430\u0434\u0430\u0447\u0438<\/h1>\n<p>  <\/p>\n<h2 id=\"chislo-vhozhdeniy-massiva-v-podmassiv---python\">\u0427\u0438\u0441\u043b\u043e \u0432\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0439 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0432 \u043f\u043e\u0434\u043c\u0430\u0441\u0441\u0438\u0432 \u2014 Python<\/h2>\n<p>  <\/p>\n<p>\u041d\u0430 \u0432\u0445\u043e\u0434 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435 \u043f\u043e\u0434\u0430\u044e\u0442\u0441\u044f \u0434\u0432\u0430 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0446\u0435\u043b\u044b\u0445 \u0447\u0438\u0441\u0435\u043b, \u0440\u0430\u0437\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u0431\u0435\u043b\u043e\u043c. \u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043d\u0430\u0439\u0442\u0438 \u0447\u0438\u0441\u043b\u043e \u0432\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0439 \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0432 \u043f\u0435\u0440\u0432\u044b\u0439. \u0422\u043e \u0435\u0441\u0442\u044c \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0442\u044c, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0447\u0438\u0441\u0435\u043b \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u0430 (\u0431\u0435\u0437 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043d\u043e\u0432\u043e\u043a) \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u043f\u0435\u0440\u0432\u043e\u043c.<\/p>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041e\u0442\u0432\u0435\u0442 \u0440\u043e\u0431\u043e\u0442\u0430<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<p>\u0414\u0430\u043d\u043d\u043e\u0435 \u0437\u0430\u0434\u0430\u043d\u0438\u0435 \u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0448\u0438\u0442\u044c \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u043c\u0438, \u043d\u043e \u043e\u0434\u043d\u0438\u043c \u0438\u0437 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0438 \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u044b\u0445 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u043f\u043e \u0432\u0441\u0435\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0438 \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u0442 \u0438\u0445 \u0441 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u0430. \u0412\u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043d\u0430 Python:<\/p>\n<p>  <\/p>\n<pre><code class=\"python\">def count_subarray(array1, array2):     count = 0     len2 = len(array2)      for i in range(len(array1)):         if array1[i:i+len2] == array2:             count += 1      return count  # \u041f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f array1 = [1, 2, 3, 1, 2, 3, 4, 1, 2] array2 = [1, 2, 3]  print(count_subarray(array1, array2))  # \u0412\u044b\u0432\u0435\u0434\u0435\u0442 2<\/code><\/pre>\n<p>  <\/p>\n<p>\u042d\u0442\u043e\u0442 \u043a\u043e\u0434 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code>count_subarray<\/code>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0434\u0432\u0430 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432. \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u0441\u0447\u0451\u0442\u0447\u0438\u043a \u0432\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0439 <code>count<\/code> \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c 0. \u0417\u0430\u0442\u0435\u043c \u043e\u043d\u0430 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u043f\u043e \u0432\u0441\u0435\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c <code>array1<\/code> \u0438 \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u0442 \u043f\u043e\u0434\u043c\u0430\u0441\u0441\u0438\u0432 \u0434\u043b\u0438\u043d\u044b <code>array2<\/code>, \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u0439\u0441\u044f \u0441 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430, \u0441 <code>array2<\/code>. \u0415\u0441\u043b\u0438 \u043e\u043d\u0438 \u0440\u0430\u0432\u043d\u044b, \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u0447\u0451\u0442\u0447\u0438\u043a <code>count<\/code>. \u0412 \u043a\u043e\u043d\u0446\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>count<\/code>, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0439 <code>array2<\/code> \u0432 <code>array1<\/code>.<\/p>\n<p>  <\/p>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0434\u043b\u044f \u043d\u0435\u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043c\u044b \u0438\u0449\u0435\u043c \u0442\u043e\u0447\u043d\u044b\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0447\u0438\u0441\u0435\u043b.<\/p>\n<\/div><\/div>\n<p>  <\/p>\n<p><strong>\u0418\u0442\u043e\u0433:<\/strong> \u043e\u0442\u0432\u0435\u0442 \u0432\u0435\u0440\u043d\u044b\u0439.<\/p>\n<p>  <\/p>\n<h2 id=\"kanonichnyy-put-unix--python\">\u041a\u0430\u043d\u043e\u043d\u0438\u0447\u043d\u044b\u0439 \u043f\u0443\u0442\u044c UNIX \u2014 Python<\/h2>\n<p>  <\/p>\n<p>\u0414\u0430\u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u044b\u043c \u043f\u0443\u0442\u0435\u043c \u043a \u0444\u0430\u0439\u043b\u0443 \u0438\u043b\u0438 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 Unix.<\/p>\n<p>  <\/p>\n<p>\u041d\u0443\u0436\u043d\u043e \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u044d\u0442\u0443 \u0441\u0442\u0440\u043e\u043a\u0443 \u0434\u043e \u043a\u0430\u043d\u043e\u043d\u0438\u0447\u043d\u043e\u0433\u043e \u043f\u0443\u0442\u0438.<\/p>\n<p>  <\/p>\n<p>\u041a\u0430\u043d\u043e\u043d\u0438\u0447\u043d\u044b\u0439 \u043f\u0443\u0442\u044c \u2014 \u044d\u0442\u043e \u0442\u043e\u0442 \u043f\u0443\u0442\u044c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u0438 \u0441\u0442\u0440\u043e\u0433\u0438\u043c, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u041f\u0443\u0442\u044c \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 \u0435\u0434\u0438\u043d\u0438\u0447\u043d\u043e\u0433\u043e \u0441\u043b\u0435\u0448\u0430 \/<\/li>\n<li>\u041b\u044e\u0431\u044b\u0435 \u0434\u0432\u0435 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u044e\u0442\u0441\u044f \u043e\u0434\u0438\u043d\u043e\u0447\u043d\u044b\u043c \u0441\u043b\u0435\u0448\u0435\u043c<\/li>\n<li>\u041f\u0443\u0442\u044c \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u043e\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0441\u043b\u0435\u0448\u0435\u043c \/<\/li>\n<li>\u041f\u0443\u0442\u044c \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0441\u0442\u0438\u043d\u043d\u044b\u0435 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u043a \u043d\u0443\u0436\u043d\u043e\u043c\u0443 \u0444\u0430\u0439\u043b\u0443 (\u0442\u043e \u0435\u0441\u0442\u044c \u0432 \u043f\u0443\u0442\u0438 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c &#8216;.&#8217; \u0438\u043b\u0438 &#8216;..&#8217;)<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u041d\u0430 \u0432\u0445\u043e\u0434 \u043f\u043e\u0434\u0430\u0435\u0442\u0441\u044f \u043f\u0443\u0442\u044c \u043a \u0444\u0430\u0439\u043b\u0443 \u0438\u043b\u0438 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 Unix.<\/p>\n<p>  <\/p>\n<p>\u041d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u043e\u0436\u0438\u0434\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043d\u043e\u043d\u0438\u0447\u043d\u044b\u0439 \u043f\u0443\u0442\u044c.<\/p>\n<p>  <\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<p>  <\/p>\n<p>\u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u044b\u0439 \u043f\u0443\u0442\u044c: \/home\/abc\/..\/abc\/file.txt<\/p>\n<p>  <\/p>\n<p>\u043a\u0430\u043d\u043e\u043d\u0438\u0447\u043d\u044b\u0439 \u043f\u0443\u0442\u044c: \/home\/abc\/file.txt<\/p>\n<p>  <\/p>\n<p>\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u043d\u044b\u0439 \u043a\u0430\u043d\u043e\u043d\u0438\u0447\u043d\u044b\u0439 \u043f\u0443\u0442\u044c \u0434\u043e \u0444\u0430\u0439\u043b\u0430 \u0438\u043b\u0438 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438<\/p>\n<p>  <\/p>\n<p>Sample Input:<br \/>  <code>\/..\/<\/code><br \/>  Sample Output:<br \/>  <code>\/<\/code><\/p>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041e\u0442\u0432\u0435\u0442 \u0440\u043e\u0431\u043e\u0442\u0430<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<p>\u0417\u0430\u0434\u0430\u0447\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0440\u0435\u0448\u0435\u043d\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u0442\u0435\u043a\u0430. \u041c\u044b \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043c \u043f\u043e \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0443 \u043f\u0443\u0442\u0438 (\u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u0438\u043b\u0438 \u0444\u0430\u0439\u043b\u0443), \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u044f \u0441\u0442\u0440\u043e\u043a\u0443 \u043f\u043e \u0441\u043b\u0435\u0448\u0430\u043c. \u0415\u0441\u043b\u0438 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u2014 \u044d\u0442\u043e &#171;..&#187;, \u0442\u043e \u043c\u044b \u0432\u044b\u0445\u043e\u0434\u0438\u043c \u0438\u0437 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 (\u0435\u0441\u043b\u0438 \u043e\u043d\u0430 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442). \u0415\u0441\u043b\u0438 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u2014 \u044d\u0442\u043e &#171;.&#187; \u0438\u043b\u0438 \u043f\u0443\u0441\u0442\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430, \u043c\u044b \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u044d\u0442\u043e\u0442 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442. \u0418\u043d\u0430\u0447\u0435, \u043c\u044b \u0432\u0445\u043e\u0434\u0438\u043c \u0432 \u0434\u0430\u043d\u043d\u0443\u044e \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e (\u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0435\u0451 \u0432 \u0441\u0442\u0435\u043a). \u0412 \u043a\u043e\u043d\u0446\u0435, \u0441\u0442\u0435\u043a \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043a\u0430\u043d\u043e\u043d\u0438\u0447\u043d\u044b\u0439 \u043f\u0443\u0442\u044c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u0435\u043c \u0432 \u043e\u0434\u043d\u0443 \u0441\u0442\u0440\u043e\u043a\u0443.<\/p>\n<p>  <\/p>\n<pre><code class=\"python\">def simplify_path(path):     path_parts = path.split(\"\/\")     stack = []      for part in path_parts:         if part == \"..\":             if stack:                 stack.pop()         elif part and part != \".\":             stack.append(part)      return \"\/\" + \"\/\".join(stack)  # \u041f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f: print(simplify_path(\"\/home\/abc\/..\/abc\/file.txt\"))  # \u0412\u044b\u0432\u0435\u0434\u0435\u0442: \/home\/abc\/file.txt print(simplify_path(\"\/..\/\"))  # \u0412\u044b\u0432\u0435\u0434\u0435\u0442: \/ <\/code><\/pre>\n<p>  <\/p>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u044d\u0442\u043e\u0442 \u043f\u043e\u0434\u0445\u043e\u0434 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u044b\u0445 \u043f\u0443\u0442\u0435\u0439 \u0438 \u043d\u0435 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u0443\u0442\u0438. \u0415\u0441\u043b\u0438 \u0432\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0438 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u0443\u0442\u0438, \u0432\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u043b\u043e\u0433\u0438\u043a\u0430 \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0442\u0430\u043a\u0438\u0445 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0439. \u00a0<\/p>\n<\/div><\/div>\n<p>  <\/p>\n<p><strong>\u0418\u0442\u043e\u0433:<\/strong> \u041d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0445\u043e\u0440\u043e\u0448\u0435\u0435, \u0432\u0441\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u0441\u043e\u0431\u043b\u044e\u0434\u0435\u043d\u044b.<\/p>\n<p>  <\/p>\n<h2 id=\"opredelenie-chastoty-vstrechaemosti-ip-adresov---python\">\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0447\u0430\u0441\u0442\u043e\u0442\u044b \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u043c\u043e\u0441\u0442\u0438 IP \u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u2014 Python<\/h2>\n<p>  <\/p>\n<p>\u0414\u0430\u043d \u043b\u043e\u0433 \u0441\u0435\u0440\u0432\u0435\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043b\u043e\u0433\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0441 \u043c\u0430\u0448\u0438\u043d\u0430\u043c\u0438. \u0414\u043b\u044f \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u043c\u0430\u0448\u0438\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f IPv4 \u0430\u0434\u0440\u0435\u0441\u0430.<\/p>\n<p>  <\/p>\n<p>\u041d\u0443\u0436\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0447\u0430\u0441\u0442\u043e\u0442\u0443 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u043c\u043e\u0441\u0442\u0438 IP \u0430\u0434\u0440\u0435\u0441\u043e\u0432.<\/p>\n<p>  <\/p>\n<p>\u041d\u0430 \u0432\u0445\u043e\u0434 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u043b\u043e\u0433.<\/p>\n<p>  <\/p>\n<p>\u041d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u043e\u0436\u0438\u0434\u0430\u0435\u0442\u0441\u044f \u0441\u043f\u0438\u0441\u043e\u043a \u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u0441 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u043d\u0438\u0439 \u0430\u0434\u0440\u0435\u0441\u0430 (\u0441\u043f\u0438\u0441\u043e\u043a IP-\u0430\u0434\u0440\u0435\u0441\u043e\u0432, \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u0443\u0431\u044b\u0432\u0430\u043d\u0438\u044f \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u043d\u0438\u0439). \u0415\u0441\u043b\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e IP-\u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u0438\u043c\u0435\u044e\u0442 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u043d\u0438\u0439, \u0442\u043e \u043a \u043d\u0438\u043c \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430 \u0441\u0442\u0440\u043e\u043a \u043f\u043e \u0443\u0431\u044b\u0432\u0430\u043d\u0438\u044e.<\/p>\n<p>  <\/p>\n<p>\u0412\u0430\u0436\u043d\u043e:<br \/>  \u0412 \u043b\u043e\u0433\u0435 \u043c\u043e\u0436\u0435\u0442 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0442\u044c\u0441\u044f \u0442\u0435\u043a\u0441\u0442 \u043f\u043e\u0445\u043e\u0436\u0438\u0439 \u043d\u0430 IP, \u043d\u043e \u043d\u0435 \u044f\u0432\u043b\u044f\u044e\u0449\u0438\u043c\u0441\u044f \u0438\u043c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, 0.0.0.1000<br \/>  \u0422\u0430\u043a\u0436\u0435 \u0432 \u043b\u043e\u0433\u0430\u0445 \u043c\u043e\u0433\u0443\u0442 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0442\u044c\u0441\u044f \u043c\u0430\u0441\u043a\u0438 \u043f\u043e\u0434\u0441\u0435\u0442\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 192.168.0.0\/16. \u0418\u0445 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u043a\u0430\u043a ip.<br \/>  \u0421\u0442\u0440\u043e\u043a\u0438 \u043b\u043e\u0433\u043e\u0432 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043f\u0443\u0441\u0442\u044b\u0435.<br \/>  \u0421\u0442\u0440\u043e\u043a\u0430 \u043b\u043e\u0433\u0430 \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 ip, \u043d\u043e \u0432 \u043b\u043e\u0433\u0430\u0445 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u0445\u043e\u0442\u044f \u0431\u044b \u043e\u0434\u0438\u043d ip.<\/p>\n<p>  <\/p>\n<p>\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u043b\u043e\u0433 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0437\u0430\u043f\u0438\u0441\u0438:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">[2019-08-29 13:00:13] login to 10.64.64.8 [2019-08-29 13:15:35] logout from 95.213.255.16 [2019-08-29 14:14:33] ssh connection to 10.64.64.8 [2019-09-01 14:14:35] request from 35.228.158.140 to 10.64.65.8 [2019-09-01 14:14:35] login to 35.228.158.140 [2019-09-01 15:29:01] login to 35.228.158.140<\/code><\/pre>\n<p>  <\/p>\n<p>\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0432\u044b\u0432\u0435\u0441\u0442\u0438 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">35.228.158.140 3 10.64.64.8 2 95.213.255.16 1 10.64.65.8 1<\/code><\/pre>\n<p>  <\/p>\n<p>Sample Input:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">[2019-08-29 13:00:13] login to 10.64.64.8 [2019-08-29 13:15:35] logout from 95.213.255.16 [2019-08-29 14:14:33] ssh connection to 10.64.64.8 [2019-09-01 14:14:35] request from 35.228.158.140 to 10.64.65.8 [2019-09-01 14:14:35] login to 35.228.158.140 [2019-09-01 15:29:01] login to 35.228.158.140<\/code><\/pre>\n<p>  <\/p>\n<p>Sample Output:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">35.228.158.140 3 10.64.64.8 2 95.213.255.16 1 10.64.65.8 1<\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041e\u0442\u0432\u0435\u0442 \u0440\u043e\u0431\u043e\u0442\u0430<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<p>\u042d\u0442\u0430 \u0437\u0430\u0434\u0430\u0447\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0440\u0435\u0448\u0435\u043d\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0438 \u0441\u043b\u043e\u0432\u0430\u0440\u044f \u0434\u043b\u044f \u043f\u043e\u0434\u0441\u0447\u0451\u0442\u0430 \u0432\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0439 \u043a\u0430\u0436\u0434\u043e\u0433\u043e IP-\u0430\u0434\u0440\u0435\u0441\u0430. \u0412\u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043d\u0430 Python:<\/p>\n<p>  <\/p>\n<pre><code class=\"python\">import re from collections import Counter  def parse_logs(logs):     # \u0420\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 IPv4-\u0430\u0434\u0440\u0435\u0441\u043e\u0432     ip_pattern = re.compile(r'\\b(?:[0-9]{1,3}\\.){3}[0-9]{1,3}\\b')      # \u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0430 \u0434\u043b\u044f \u043f\u043e\u0434\u0441\u0447\u0435\u0442\u0430 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u043c\u043e\u0441\u0442\u0438 IP-\u0430\u0434\u0440\u0435\u0441\u043e\u0432     ip_counter = Counter()      # \u041f\u0440\u043e\u0445\u043e\u0434 \u043f\u043e \u0432\u0441\u0435\u043c \u043b\u043e\u0433\u0430\u043c \u0438 \u043f\u043e\u0434\u0441\u0447\u0435\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 IP-\u0430\u0434\u0440\u0435\u0441\u043e\u0432     for log in logs:         ip_addresses = ip_pattern.findall(log)         for ip in ip_addresses:             # \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u0438 \u043f\u043e\u0434\u0441\u0442\u0440\u043e\u043a\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c IP-\u0430\u0434\u0440\u0435\u0441\u043e\u043c             parts = list(map(int, ip.split('.')))             if all(map(lambda part: 0 &lt;= part &lt; 256, parts)):                 ip_counter[ip] += 1      # \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043f\u043e \u0443\u0431\u044b\u0432\u0430\u043d\u0438\u044e \u0441\u043f\u0438\u0441\u043e\u043a IP-\u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u0438 \u0438\u0445 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430     return sorted(ip_counter.items(), key=lambda item: (-item[1], -int(item[0].replace('.', ''))))  # \u041f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f logs = [     '[2019-08-29 13:00:13] login to 10.64.64.8',     '[2019-08-29 13:15:35] logout from 95.213.255.16',     '[2019-08-29 14:14:33] ssh connection to 10.64.64.8',     '[2019-09-01 14:14:35] request from 35.228.158.140 to 10.64.65.8',     '[2019-09-01 14:14:35] login to 35.228.158.140',     '[2019-09-01 15:29:01] login to 35.228.158.140' ] print(parse_logs(logs)) <\/code><\/pre>\n<p>  <\/p>\n<p>\u0412 \u044d\u0442\u043e\u043c \u043a\u043e\u0434\u0435 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u0432\u0441\u0435\u0445 IP-\u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u043b\u043e\u0433\u0435. \u0417\u0430\u0442\u0435\u043c \u043c\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u0447\u0442\u043e \u043a\u0430\u0436\u0434\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0430\u0434\u0440\u0435\u0441\u0430 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u043e\u043c \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435 (\u043e\u0442 0 \u0434\u043e 255). \u0415\u0441\u043b\u0438 \u0430\u0434\u0440\u0435\u0441 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u0435\u043d, \u043c\u044b \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u043c \u0435\u0433\u043e \u0441\u0447\u0451\u0442\u0447\u0438\u043a \u0432 <code>Counter<\/code>. \u0412 \u043a\u043e\u043d\u0446\u0435 \u043c\u044b \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u0441\u043f\u0438\u0441\u043e\u043a IP-\u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u0438 \u0438\u0445 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430, \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u0443\u0431\u044b\u0432\u0430\u043d\u0438\u044f \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0438 \u043f\u043e \u0441\u0430\u043c\u043e\u043c\u0443 \u0430\u0434\u0440\u0435\u0441\u0443, \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u043c\u0443 \u0432 \u0447\u0438\u0441\u043b\u043e, \u0435\u0441\u043b\u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442. \u00a0<\/p>\n<\/div><\/div>\n<p>  <\/p>\n<p>\u0412\u0438\u0434\u0438\u043c \u043f\u0440\u043e\u043a\u043e\u043b: \u043d\u0435 \u0443\u0447\u0442\u0435\u043d\u044b \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u2014 \u043f\u043e\u0434\u0441\u0435\u0442\u0438 \u043f\u043e\u043f\u0430\u0434\u0443\u0442 \u0432 \u043e\u0442\u0432\u0435\u0442. \u041d\u043e \u0435\u0441\u043b\u0438 \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442 \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u0442 \u0445\u043e\u0442\u044f \u0431\u044b \u043c\u0438\u043d\u0443\u0442\u0443 \u043d\u0430 \u0447\u0442\u0435\u043d\u0438\u0435 \u0437\u0430\u0434\u0430\u043d\u0438\u044f \u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u043e\u043d \u044d\u0442\u043e \u0443\u0432\u0438\u0434\u0438\u0442.<br \/>  \u041d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u043c \u0440\u043e\u0431\u043e\u0442\u0443 \u043f\u0440\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u044f, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043d\u043e\u0432\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435.<\/p>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041e\u0442\u0432\u0435\u0442 \u0440\u043e\u0431\u043e\u0442\u0430<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">import re from collections import Counter  def parse_logs(logs):     # \u0420\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 IPv4-\u0430\u0434\u0440\u0435\u0441\u043e\u0432     ip_pattern = re.compile(r'\\b(?:[0-9]{1,3}\\.){3}[0-9]{1,3}\\b')      # \u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0430 \u0434\u043b\u044f \u043f\u043e\u0434\u0441\u0447\u0435\u0442\u0430 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u043c\u043e\u0441\u0442\u0438 IP-\u0430\u0434\u0440\u0435\u0441\u043e\u0432     ip_counter = Counter()      # \u041f\u0440\u043e\u0445\u043e\u0434 \u043f\u043e \u0432\u0441\u0435\u043c \u043b\u043e\u0433\u0430\u043c \u0438 \u043f\u043e\u0434\u0441\u0447\u0435\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 IP-\u0430\u0434\u0440\u0435\u0441\u043e\u0432     for log in logs:         ip_addresses = ip_pattern.findall(log)         for ip in ip_addresses:             # \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u0438 \u043f\u043e\u0434\u0441\u0442\u0440\u043e\u043a\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c IP-\u0430\u0434\u0440\u0435\u0441\u043e\u043c             parts = list(map(int, ip.split('.')))             if all(map(lambda part: 0 &lt;= part &lt; 256, parts)) and '\/' not in log:                 ip_counter[ip] += 1      # \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043f\u043e \u0443\u0431\u044b\u0432\u0430\u043d\u0438\u044e \u0441\u043f\u0438\u0441\u043e\u043a IP-\u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u0438 \u0438\u0445 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430     return sorted(ip_counter.items(), key=lambda item: (-item[1], -int(item[0].replace('.', ''))))  # \u041f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f logs = [     '[2019-08-29 13:00:13] login to 10.64.64.8',     '[2019-08-29 13:15:35] logout from 95.213.255.16',     '[2019-08-29 14:14:33] ssh connection to 10.64.64.8',     '[2019-09-01 14:14:35] request from 35.228.158.140 to 10.64.65.8',     '[2019-09-01 14:14:35] login to 35.228.158.140',     '[2019-09-01 15:29:01] login to 35.228.158.140',     '[2019-09-01 15:29:01] invalid ip 0.0.0.1000',     '[2019-09-01 15:29:01] subnet mask 192.168.0.0\/16',     'empty log',     '[2019-09-01 15:29:01] no ip here' ] print(parse_logs(logs))<\/code><\/pre>\n<\/div><\/div>\n<p>  <\/p>\n<p><strong>\u0418\u0442\u043e\u0433:<\/strong> \u0437\u0430\u0434\u0430\u0447\u0430 \u0440\u0435\u0448\u0435\u043d\u0430, \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u0443\u0447\u0442\u0435\u043d\u044b.<\/p>\n<p>  <\/p>\n<h2 id=\"samyy-vmestitelnyy-konteyner--s\">\u0421\u0430\u043c\u044b\u0439 \u0432\u043c\u0435\u0441\u0442\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u2014 \u0421++<\/h2>\n<p>  <\/p>\n<p>\u0414\u0430\u043d\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c h \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0430\u044f n \u0446\u0435\u043b\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0445 \u0432\u044b\u0441\u043e\u0442.<\/p>\n<p>  <\/p>\n<p>\u041d\u0430 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u043d\u043e\u0439 \u043f\u043b\u043e\u0441\u043a\u043e\u0441\u0442\u0438 \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u043d\u043e n \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u043b\u0438\u043d\u0438\u0439,<br \/>  i-\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u043b\u0438\u043d\u0438\u044e \u043e\u0442 \u0442\u043e\u0447\u043a\u0438 (i, 0) \u0434\u043e \u0442\u043e\u0447\u043a\u0438 (i, h[i]).<\/p>\n<p>  <\/p>\n<p>\u041d\u0430\u0439\u0434\u0438\u0442\u0435 \u0434\u0432\u0435 \u043b\u0438\u043d\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0431\u0440\u0430\u0437\u0443\u044e\u0442 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043e\u0441\u044c\u044e x &#171;\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440&#187;,<br \/>  \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043d\u0430\u0438\u0431\u043e\u043b\u044c\u0448\u0435\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e &#171;\u0434\u0432\u0443\u043c\u0435\u0440\u043d\u043e\u0439 \u0432\u043e\u0434\u044b&#187; \u0442\u0430\u043a,<br \/>  \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0430 \u043d\u0435 \u0432\u044b\u043b\u0438\u0432\u0430\u043b\u0430\u0441\u044c \u0437\u0430 \u0435\u0433\u043e \u043f\u0440\u0435\u0434\u0435\u043b\u044b. \u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u043d\u0430\u043a\u043b\u043e\u043d\u044f\u0442\u044c \u043d\u0435\u043b\u044c\u0437\u044f.<\/p>\n<p>  <\/p>\n<p>\u0412\u0440\u043e\u0434\u0435 \u043a\u0430\u043a\u0430\u044f-\u0442\u043e \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0451\u043d\u043d\u0430\u044f \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430.<\/p>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041e\u0442\u0432\u0435\u0442 \u0440\u043e\u0431\u043e\u0442\u0430<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<p>\u042d\u0442\u0430 \u0437\u0430\u0434\u0430\u0447\u0430 \u2014 \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0448\u0438\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u0435\u0442\u043e\u0434\u0430 \u0434\u0432\u0443\u0445 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439. \u0421\u0443\u0442\u044c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0447\u0430\u0442\u044c \u0441 \u0441\u0430\u043c\u043e\u0433\u043e \u0448\u0438\u0440\u043e\u043a\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 \u0438 \u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u0448\u0438\u0440\u0438\u043d\u0443 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 \u0432 \u043d\u0430\u0434\u0435\u0436\u0434\u0435 \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u043c\u044b \u043d\u0430\u0439\u0434\u0435\u043c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0441 \u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u0432\u044b\u0441\u043e\u0442\u043e\u0439. \u0417\u0434\u0435\u0441\u044c \u0432\u0430\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0432\u044b\u0441\u043e\u0442\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430.<\/p>\n<p>  <\/p>\n<p>\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434 \u043d\u0430 C++ \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u044d\u0442\u043e\u0442 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c:<\/p>\n<p>  <\/p>\n<pre><code class=\"python\">#include &lt;vector> #include &lt;algorithm> #include &lt;iostream>  using namespace std;  int maxArea(vector&lt;int>&amp; height) {     int max_area = 0;     int left = 0;     int right = height.size() - 1;      while (left &lt; right) {         \/\/ \u0412\u044b\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c \u043f\u043b\u043e\u0449\u0430\u0434\u044c         int area = min(height[left], height[right]) * (right - left);         max_area = max(max_area, area);          \/\/ \u0415\u0441\u043b\u0438 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0441\u043b\u0435\u0432\u0430 \u043c\u0435\u043d\u044c\u0448\u0435, \u0447\u0435\u043c \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0441\u043f\u0440\u0430\u0432\u0430, \u0441\u043c\u0435\u0449\u0430\u0435\u043c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u0441\u043b\u0435\u0432\u0430 \u0432\u043f\u0440\u0430\u0432\u043e         if (height[left] &lt; height[right]) {             left++;         } else {             \/\/ \u0412 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u043c\u0435\u0449\u0430\u0435\u043c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u0441\u043f\u0440\u0430\u0432\u0430 \u0432\u043b\u0435\u0432\u043e             right--;         }     }      return max_area; }  int main() {     vector&lt;int> heights1 = {1,8,6,2,5,4,8,3,7};     vector&lt;int> heights2 = {1,1};     vector&lt;int> heights3 = {4,3,2,1,4};     vector&lt;int> heights4 = {1,2,1};      cout &lt;&lt; \"Maximum water that can be contained: \" &lt;&lt; endl;     cout &lt;&lt; \"Example 1: \" &lt;&lt; maxArea(heights1) &lt;&lt; endl;  \/\/ Expected output: 49     cout &lt;&lt; \"Example 2: \" &lt;&lt; maxArea(heights2) &lt;&lt; endl;  \/\/ Expected output: 1     cout &lt;&lt; \"Example 3: \" &lt;&lt; maxArea(heights3) &lt;&lt; endl;  \/\/ Expected output: 16     cout &lt;&lt; \"Example 4: \" &lt;&lt; maxArea(heights4) &lt;&lt; endl;  \/\/ Expected output: 2      return 0; } <\/code><\/pre>\n<p>  <\/p>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u044f <code>maxArea<\/code> \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0432\u0435\u043a\u0442\u043e\u0440 <code>height<\/code>, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u0432\u044b\u0441\u043e\u0442\u044b \u043b\u0438\u043d\u0438\u0439. \u041e\u043d\u0430 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 <code>max_area<\/code> (\u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u043b\u043e\u0449\u0430\u0434\u0438 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430), <code>left<\/code> \u0438 <code>right<\/code> (\u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 \u043b\u0435\u0432\u043e\u0439 \u0438 \u043f\u0440\u0430\u0432\u043e\u0439 \u0433\u0440\u0430\u043d\u0438\u0446 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430). \u0417\u0430\u0442\u0435\u043c \u0432 \u0446\u0438\u043a\u043b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442 \u043f\u043b\u043e\u0449\u0430\u0434\u044c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0442\u0435\u043a\u0443\u0449\u0438\u0435 \u0433\u0440\u0430\u043d\u0438\u0446\u044b, \u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442 <code>max_area<\/code>, \u0435\u0441\u043b\u0438 \u0442\u0435\u043a\u0443\u0449\u0430\u044f \u043f\u043b\u043e\u0449\u0430\u0434\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0439. \u0415\u0441\u043b\u0438 \u043b\u0435\u0432\u0430\u044f \u0433\u0440\u0430\u043d\u0438\u0446\u0430 \u043c\u0435\u043d\u044c\u0448\u0435 \u043f\u0440\u0430\u0432\u043e\u0439, \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0441\u0434\u0432\u0438\u0433\u0430\u0435\u0442 \u043b\u0435\u0432\u0443\u044e \u0433\u0440\u0430\u043d\u0438\u0446\u0443 \u0432\u043f\u0440\u0430\u0432\u043e, \u0438\u043d\u0430\u0447\u0435 \u043e\u043d\u0430 \u0441\u0434\u0432\u0438\u0433\u0430\u0435\u0442 \u043f\u0440\u0430\u0432\u0443\u044e \u0433\u0440\u0430\u043d\u0438\u0446\u0443 \u0432\u043b\u0435\u0432\u043e. \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 <code>max_area<\/code> \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0446\u0438\u043a\u043b\u0430. \u00a0<\/p>\n<\/div><\/div>\n<p>  <\/p>\n<p><strong>\u0418\u0442\u043e\u0433:<\/strong> \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043d\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b, \u043d\u043e \u0441 \u0432\u0438\u0434\u0443 \u043e\u0442\u0432\u0435\u0442 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439.<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/post_images\/17c\/0a4\/f8a\/17c0a4f8a961580308bec4359fcf7a87.png\" alt=\"lgtm\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/17c\/0a4\/f8a\/17c0a4f8a961580308bec4359fcf7a87.png\"\/><\/p>\n<p>  <\/p>\n<p>\u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u043a\u0430\u0436\u0435\u0442\u0441\u044f \u0442\u043e\u0436\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u043c.<\/p>\n<p>  <\/p>\n<p>\u041b\u043e\u0433\u0438\u0447\u043d\u0435\u0435 \u0431\u044b\u043b\u043e \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0434\u0432\u0435 \u043b\u0438\u043d\u0438\u0438, \u0430 \u043d\u0435 \u043f\u043b\u043e\u0449\u0430\u0434\u044c, \u043d\u043e \u044d\u0442\u043e \u043c\u0438\u043d\u043e\u0440\u043d\u043e\u0435 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0441\u0430\u043c \u0440\u043e\u0431\u043e\u0442 \u043b\u0435\u0433\u043a\u043e \u0441\u0434\u0435\u043b\u0430\u0435\u0442 \u043f\u043e \u043f\u0440\u043e\u0441\u044c\u0431\u0435 \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0430.<\/p>\n<p>  <a name=\"cpp_ping_pong\"><\/a>  <\/p>\n<h2 id=\"klient-servernyy-ping-pong--s\">\u041a\u043b\u0438\u0435\u043d\u0442-\u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0439 \u043f\u0438\u043d\u0433-\u043f\u043e\u043d\u0433 \u2014 \u0421++<\/h2>\n<p>  <\/p>\n<p>\u041d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043b\u0438\u0435\u043d\u0442 \u0438 \u0441\u0435\u0440\u0432\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e \u043e\u0431\u043c\u0435\u043d\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0434\u0440\u0443\u0433 \u0441 \u0434\u0440\u0443\u0433\u043e\u043c ping-pong-\u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\u043c\u0438.<\/p>\n<p>  <\/p>\n<p>\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0431\u043e\u0440\u043a\u0443 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043d\u0430 cmake \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u043a\u0443\u044e-\u0442\u043e \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u0443\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0434\u043b\u044f \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f.<\/p>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041e\u0442\u0432\u0435\u0442 \u0440\u043e\u0431\u043e\u0442\u0430<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<p>\u0417\u0434\u0435\u0441\u044c \u0434\u0432\u0430 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u0430, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 C++ \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 Boost.Asio \u0434\u043b\u044f \u0441\u0435\u0442\u0435\u0432\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0438 spdlog \u0434\u043b\u044f \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u041e\u043d\u0438 \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e \u043e\u0431\u043c\u0435\u043d\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\u043c\u0438 Ping \u0438 Pong.<\/p>\n<p>  <\/p>\n<p>Server.cpp<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">#include &lt;boost\/asio.hpp> #include &lt;boost\/array.hpp> #include &lt;spdlog\/spdlog.h>  using boost::asio::ip::tcp;  int main() {     boost::asio::io_service io_service;     tcp::acceptor acceptor(io_service, tcp::endpoint(tcp::v4(), 1234));      for (;;) {         tcp::socket socket(io_service);         acceptor.accept(socket);          for (;;) {             boost::array&lt;char, 128> buf;             boost::system::error_code error;              size_t len = socket.read_some(boost::asio::buffer(buf), error);              if (error == boost::asio::error::eof) {                 break;             } else if (error) {                 throw boost::system::system_error(error);             }              spdlog::info(\"Received: {}\", std::string(buf.data(), len));             boost::asio::write(socket, boost::asio::buffer(\"Pong\"));         }     }      return 0; }<\/code><\/pre>\n<p>  <\/p>\n<p>Client.cpp<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">#include &lt;boost\/asio.hpp> #include &lt;boost\/array.hpp> #include &lt;spdlog\/spdlog.h> #include &lt;chrono> #include &lt;thread>  using boost::asio::ip::tcp;  int main() {     boost::asio::io_service io_service;     tcp::resolver resolver(io_service);     tcp::resolver::query query(tcp::v4(), \"localhost\", \"1234\");     tcp::resolver::iterator iterator = resolver.resolve(query);     tcp::socket socket(io_service);     boost::asio::connect(socket, iterator);      for (;;) {         boost::asio::write(socket, boost::asio::buffer(\"Ping\"));         boost::array&lt;char, 128> buf;         boost::system::error_code error;         size_t len = socket.read_some(boost::asio::buffer(buf), error);         spdlog::info(\"Received: {}\", std::string(buf.data(), len));         std::this_thread::sleep_for(std::chrono::seconds(1));     }      return 0; }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0414\u043b\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u044d\u0442\u0438\u0445 \u0434\u0432\u0443\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e CMake, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0444\u0430\u0439\u043b CMakeLists.txt:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">cmake_minimum_required(VERSION 3.10) project(PingPong)  set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED True)  find_package(Boost REQUIRED COMPONENTS system) find_package(spdlog REQUIRED)  add_executable(Client Client.cpp) add_executable(Server Server.cpp)  target_link_libraries(Client Boost::system spdlog::spdlog) target_link_libraries(Server Boost::system spdlog::spdlog)<\/code><\/pre>\n<p>  <\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442:<\/p>\n<p>  <\/p>\n<ol>\n<li>\u0421\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e build: <code>mkdir build &amp;&amp; cd build<\/code><\/li>\n<li>\u0412\u044b\u0437\u043e\u0432\u0438\u0442\u0435 CMake: <code>cmake ..<\/code><\/li>\n<li>\u0412\u044b\u0437\u043e\u0432\u0438\u0442\u0435 Make: <code>make<\/code><\/li>\n<\/ol>\n<p>  <\/p>\n<p>\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0435 \u0441\u0435\u0440\u0432\u0435\u0440, \u0430 \u0437\u0430\u0442\u0435\u043c \u043a\u043b\u0438\u0435\u043d\u0442. \u041e\u043d\u0438 \u043d\u0430\u0447\u043d\u0443\u0442 \u043e\u0431\u043c\u0435\u043d\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\u043c\u0438 Ping \u0438 Pong, \u0438 \u044d\u0442\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0443\u0442 \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f. \u00a0<\/p>\n<\/div><\/div>\n<p>  <\/p>\n<p><strong>\u0418\u0442\u043e\u0433:<\/strong> \u0432\u0440\u043e\u0434\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u043e, \u0447\u0442\u043e \u043d\u0430\u0434\u043e.<\/p>\n<p>  <a name=\"cpp_scanner\"><\/a>  <\/p>\n<h2 id=\"skaner-opasnyh-faylov--s\">\u0421\u043a\u0430\u043d\u0435\u0440 \u043e\u043f\u0430\u0441\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u2014 \u0421++<\/h2>\n<p>  <\/p>\n<p>\u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0443\u0442\u0438\u043b\u0438\u0442\u0443 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 C++, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0443\u044e \u0438\u0437 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0449\u0443\u044e \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u043e\u0432 \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438, \u0441 \u0446\u0435\u043b\u044c\u044e \u043d\u0430\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0432 \u043d\u0435\u0439 \u201c\u043f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445\u201d (suspicious) \u0444\u0430\u0439\u043b\u043e\u0432.<\/p>\n<p>  <\/p>\n<p>\u0412 \u0440\u0430\u043c\u043a\u0430\u0445 \u0437\u0430\u0434\u0430\u0447\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043e 3 \u0442\u0438\u043f\u0430 \u201c\u043f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e\u201d \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e \u0432 \u0444\u0430\u0439\u043b\u0435:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">JS suspicious: \u0444\u0430\u0439\u043b \u0441 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435\u043c .js, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u0441\u0442\u0440\u043e\u043a\u0443: &lt;script>evil_script()&lt;\/script> CMD suspicious: \u0444\u0430\u0439\u043b \u0441 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435\u043c CMD\/BAT, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u0441\u0442\u0440\u043e\u043a\u0443: rd \/s \/q \"c:\\windows\" EXE suspicious: \u0444\u0430\u0439\u043b \u0441 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435\u043c EXE\/DLL, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u0441\u0442\u0440\u043e\u043a\u0438: CreateRemoteThread, CreateProcess<\/code><\/pre>\n<p>  <\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0443\u0442\u0438\u043b\u0438\u0442\u044b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0432\u044b\u0432\u0435\u0434\u0435\u043d \u043e\u0442\u0447\u0435\u0442 \u043e \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">\u043e\u0431\u0449\u0435\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432; \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0434\u0435\u0442\u0435\u043a\u0442\u043e\u0432 \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u0442\u0438\u043f \u201c\u043f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e\u201d \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e; \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u0448\u0438\u0431\u043e\u043a \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0444\u0430\u0439\u043b\u043e\u0432 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0435 \u0445\u0432\u0430\u0442\u0430\u0435\u0442 \u043f\u0440\u0430\u0432 \u043d\u0430 \u0447\u0442\u0435\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u0430); \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0443\u0442\u0438\u043b\u0438\u0442\u044b.<\/code><\/pre>\n<p>  <\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0443\u0442\u0438\u043b\u0438\u0442\u044b \u0438\u0437 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438:<\/p>\n<p>  <\/p>\n<p><code>scan_util ~\/Downloads<\/code><\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">====== Scan result ======  Processed files: 150 JS detects: 5 CMD detects: 1 EXE detects: 2 Errors: 1 Execution time: 00:00:31  =========================<\/code><\/pre>\n<p>  <\/p>\n<p>\u0414\u043b\u044f \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u044f \u0437\u0430\u0434\u0430\u0447\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u043c\u0441\u044f:<\/p>\n<p>  <\/p>\n<ul>\n<li>\n<p>\u0412 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0444\u0430\u0439\u043b\u044b, \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0445 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0439 \u043d\u0435\u0442;<\/p>\n<p>  <\/li>\n<li>\n<p>\u0412 \u043a\u0430\u0436\u0434\u043e\u043c \u0444\u0430\u0439\u043b\u0435 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u0442\u0438\u043f \u201c\u043f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e\u201d \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e.<\/p>\n<p>  <\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 (\u0443\u0442\u0438\u043b\u0438\u0437\u0430\u0446\u0438\u044f) \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0443\u0442\u0438\u043b\u0438\u0442\u0430.<\/p>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041e\u0442\u0432\u0435\u0442 \u0440\u043e\u0431\u043e\u0442\u0430<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<p>\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u044d\u0442\u043e\u0439 \u0443\u0442\u0438\u043b\u0438\u0442\u044b \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 C++. \u0417\u0430\u043c\u0435\u0442\u0438\u043c, \u0447\u0442\u043e \u0434\u043b\u044f \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043c\u043d\u043e\u0433\u043e\u043f\u043e\u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 <code>&lt;thread><\/code> \u0438 <code>&lt;future><\/code>.<br \/>  \u0412\u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043c\u043d\u043e\u0433\u043e\u043f\u043e\u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c \u0434\u043b\u044f \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u043e\u0432:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">#include &lt;iostream> #include &lt;fstream> #include &lt;vector> #include &lt;chrono> #include &lt;thread> #include &lt;future> #include &lt;filesystem> #include &lt;algorithm> #include &lt;stdexcept> #include &lt;cstring>  namespace fs = std::filesystem;  struct ScanResult {     int processedFiles = 0;     int jsDetects = 0;     int cmdDetects = 0;     int exeDetects = 0;     int errors = 0; };  ScanResult detectSuspicious(const fs::path&amp; dir) {     ScanResult result;     std::vector&lt;std::future&lt;ScanResult>> futures;      for (const auto&amp; entry : fs::directory_iterator(dir)) {         futures.push_back(std::async(std::launch::async, [&amp;entry]() {             ScanResult localResult;             localResult.processedFiles = 1;              std::ifstream file(entry.path(), std::ios::binary);             if (!file) {                 ++localResult.errors;                 return localResult;             }              std::string content(std::istreambuf_iterator&lt;char>(file), {});             if (entry.path().extension() == \".js\" &amp;&amp;                 content.find(\"&lt;script>evil_script()&lt;\/script>\") != std::string::npos)                 ++localResult.jsDetects;             else if ((entry.path().extension() == \".cmd\" || entry.path().extension() == \".bat\") &amp;&amp;                 content.find(\"rd \/s \/q \\\"c:\\\\windows\\\"\") != std::string::npos)                 ++localResult.cmdDetects;             else if ((entry.path().extension() == \".exe\" || entry.path().extension() == \".dll\") &amp;&amp;                 content.find(\"CreateRemoteThread\") != std::string::npos &amp;&amp;                 content.find(\"CreateProcess\") != std::string::npos)                 ++localResult.exeDetects;              return localResult;         }));     }      for (auto&amp; fut : futures) {         ScanResult localResult = fut.get();         result.processedFiles += localResult.processedFiles;         result.jsDetects += localResult.jsDetects;         result.cmdDetects += localResult.cmdDetects;         result.exeDetects += localResult.exeDetects;         result.errors += localResult.errors;     }      return result; }  int main(int argc, char* argv[]) {     if (argc != 2) {         std::cerr &lt;&lt; \"Usage: \" &lt;&lt; argv[0] &lt;&lt; \" &lt;directory>\\n\";         return 1;     }      fs::path dir(argv[1]);      if (!fs::exists(dir) || !fs::is_directory(dir)) {         std::cerr &lt;&lt; \"Invalid directory: \" &lt;&lt; argv[1] &lt;&lt; '\\n';         return 1;     }      auto start = std::chrono::high_resolution_clock::now();     ScanResult result = detectSuspicious(dir);     auto finish = std::chrono::high_resolution_clock::now();      std::cout &lt;&lt; \"\\n====== Scan result ======\\n\\n\"               &lt;&lt; \"Processed files: \" &lt;&lt; result.processedFiles &lt;&lt; \"\\n\\n\"               &lt;&lt; \"JS detects: \" &lt;&lt; result.jsDetects &lt;&lt; \"\\n\\n\"               &lt;&lt; \"CMD detects: \" &lt;&lt; result.cmdDetects &lt;&lt; \"\\n\\n\"               &lt;&lt; \"EXE detects: \" &lt;&lt; result.exeDetects &lt;&lt; \"\\n\\n\"               &lt;&lt; \"Errors: \" &lt;&lt; result.errors &lt;&lt; \"\\n\\n\"               &lt;&lt; \"Execution time: \" &lt;&lt; std::chrono::duration_cast&lt;std::chrono::seconds>(finish - start).count()               &lt;&lt; \"\\n\\n=========================\\n\";      return 0; } <\/code><\/pre>\n<p>  <\/p>\n<p>\u0417\u0430\u043c\u0435\u0447\u0430\u043d\u0438\u044f \u043f\u043e \u043a\u043e\u0434\u0443:<\/p>\n<p>  <\/p>\n<ol>\n<li>\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 <code>ScanResult<\/code> \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0438 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0438\u0441\u0441\u043b\u0435\u0434\u0443\u0435\u043c\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445.<\/li>\n<li>\u0424\u0443\u043d\u043a\u0446\u0438\u044f <code>detectSuspicious<\/code> \u0438\u0442\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u043f\u043e \u0432\u0441\u0435\u043c \u0444\u0430\u0439\u043b\u0430\u043c \u0432 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u0438 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u0437\u0430\u0434\u0430\u0447\u0443 \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u043e\u0442\u043e\u043a\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>std::async<\/code>.<\/li>\n<li>\u0412 \u043a\u0430\u0436\u0434\u043e\u043c \u043f\u043e\u0442\u043e\u043a\u0435 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0444\u0430\u0439\u043b, \u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u0435\u0433\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u043d\u0430 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0441\u0442\u0440\u043e\u043a \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u0435\u0433\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435\u043c.<\/li>\n<li>\u0412 \u0433\u043b\u0430\u0432\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>main<\/code> \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0441\u0442\u044c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u0432\u044b\u0432\u043e\u0434\u044f\u0442\u0441\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b.<\/li>\n<\/ol>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <\/p>\n<p><strong>\u0418\u0442\u043e\u0433:<\/strong> \u0432 \u043a\u043e\u0434\u0435 \u0442\u043e\u0447\u043d\u043e \u0435\u0441\u0442\u044c \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u043e\u0434\u043d\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u2014 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f entry \u0437\u0430\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435, \u0447\u0442\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u043e\u0448\u0438\u0431\u043a\u0435.<br \/>  \u0415\u0441\u043b\u0438 \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043d\u0430 \u0437\u0430\u0445\u0432\u0430\u0442 \u043f\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e, \u0442\u043e \u043a\u0430\u0436\u0435\u0442\u0441\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u043c.<\/p>\n<p>  <a name=\"go_random_gen\"><\/a>  <\/p>\n<h2 id=\"servis--generator-sluchaynyh-znacheniy--go\">\u0421\u0435\u0440\u0432\u0438\u0441 \u2014 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u2014 GO<\/h2>\n<p>  <\/p>\n<p>\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0435\u0440\u0432\u0438\u0441 \u043d\u0430 Go \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439.<\/p>\n<p>  <\/p>\n<p>\u0421\u0435\u0440\u0432\u0438\u0441 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 JSON API \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0435\u0435 \u043f\u043e HTTP. \u041a\u0430\u0436\u0434\u043e\u0439 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0442\u044c \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 id, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043c\u0435\u0442\u043e\u0434\u043e\u043c retrieve.<\/p>\n<p>  <\/p>\n<p>\u0420\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434\u044b:<\/p>\n<p>  <\/p>\n<ul>\n<li>\n<p>POST \/api\/generate\/ \u2014 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438 \u0435\u0433\u043e \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430<\/p>\n<p>  <\/li>\n<li>\n<p>GET \/api\/retrieve\/ \u2014 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e id, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0435\u0440\u043d\u0443\u043b\u043e\u0441\u044c \u0432 \u043c\u0435\u0442\u043e\u0434\u0435 generate<\/p>\n<p>  <\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u041f\u0440\u043e\u0435\u043a\u0442 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u044b\u043c \u0438 \u0434\u043e \u043a\u043e\u043d\u0446\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u043c, \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0430 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0444\u0430\u0439\u043b\u043e\u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0430. \u041d\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c TODO, \u0432\u0441\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043e \u043a\u043e\u043d\u0446\u0430.<\/p>\n<p>  <\/p>\n<p>\u042f \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0441\u043e\u043a\u0440\u0430\u0442\u0438\u043b \u0438 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043b \u0437\u0430\u0434\u0430\u043d\u0438\u0435, \u043d\u043e \u043f\u0440\u0438 \u0436\u0435\u043b\u0430\u043d\u0438\u0438 \u0432\u0441\u0435 \u0434\u043e\u043f\u0443\u0441\u043b\u043e\u0432\u0438\u044f \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u044b GPT.<\/p>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041e\u0442\u0432\u0435\u0442 \u0440\u043e\u0431\u043e\u0442\u0430<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<p>\u041e\u0442\u043b\u0438\u0447\u043d\u043e, \u0432\u0430\u0448\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u0442\u044c \u0438\u0437 \u0442\u0440\u0435\u0445 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0447\u0430\u0441\u0442\u0435\u0439:<\/p>\n<p>  <\/p>\n<ol>\n<li>\u0413\u043b\u0430\u0432\u043d\u044b\u0439 \u0444\u0430\u0439\u043b <code>main.go<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0430\u0448 \u0441\u0435\u0440\u0432\u0435\u0440 \u0438 \u0440\u043e\u0443\u0442\u0435\u0440.<\/li>\n<li>\u041a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\/\u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435.<\/li>\n<li>\u0421\u0435\u0440\u0432\u0438\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u043c\u0435\u0442\u043e\u0434\u044b \u0434\u043b\u044f \u0438\u0445 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f.<\/li>\n<\/ol>\n<p>  <\/p>\n<p>\u041d\u0438\u0436\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0432\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430 Go.<\/p>\n<p>  <\/p>\n<p>\u0424\u0430\u0439\u043b\u043e\u0432\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">\/myproject   |-- main.go   |-- controller   |    |-- controller.go   |-- service        |-- service.go<\/code><\/pre>\n<p>  <\/p>\n<p>main.go:<\/p>\n<p>  <\/p>\n<pre><code class=\"go\">package main  import (     \"net\/http\"     \"myproject\/controller\"      \"github.com\/gorilla\/mux\" )  func main() {     r := mux.NewRouter()      r.HandleFunc(\"\/api\/generate\/\", controller.Generate).Methods(\"POST\")     r.HandleFunc(\"\/api\/retrieve\/{id}\", controller.Retrieve).Methods(\"GET\")      http.ListenAndServe(\":8080\", r) }<\/code><\/pre>\n<p>  <\/p>\n<p>controller\/controller.go:<\/p>\n<p>  <\/p>\n<pre><code class=\"go\">package controller  import (     \"encoding\/json\"     \"net\/http\"     \"myproject\/service\"     \"github.com\/gorilla\/mux\" )  func Generate(w http.ResponseWriter, r *http.Request) {     id, value := service.GenerateValue()     json.NewEncoder(w).Encode(map[string]string{         \"id\":    id,         \"value\": value,     }) }  func Retrieve(w http.ResponseWriter, r *http.Request) {     id := mux.Vars(r)[\"id\"]     value, found := service.GetValue(id)     if !found {         w.WriteHeader(http.StatusNotFound)         json.NewEncoder(w).Encode(map[string]string{             \"error\": \"Value not found\",         })         return     }      json.NewEncoder(w).Encode(map[string]string{         \"id\":    id,         \"value\": value,     }) }<\/code><\/pre>\n<p>  <\/p>\n<p>service\/service.go:<\/p>\n<p>  <\/p>\n<pre><code class=\"go\">package service  import (     \"math\/rand\"     \"strconv\"     \"sync\" )  var (     mu sync.RWMutex     data = make(map[string]string) )  func GenerateValue() (string, string) {     mu.Lock()     defer mu.Unlock()      id := strconv.Itoa(rand.Int())     value := strconv.Itoa(rand.Int())     data[id] = value     return id, value }  func GetValue(id string) (string, bool) {     mu.RLock()     defer mu.RUnlock()      value, found := data[id]     return value, found }<\/code><\/pre>\n<p>  <\/p>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u0432 \u044d\u0442\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c Gorilla Mux \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0440\u043e\u0443\u0442\u0430\u043c\u0438. \u042d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430, \u043d\u043e \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043b\u044e\u0431\u0443\u044e \u0434\u0440\u0443\u0433\u0443\u044e \u043f\u043e \u0441\u0432\u043e\u0435\u043c\u0443 \u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0438\u044e.<\/p>\n<p>  <\/p>\n<p>\u042d\u0442\u043e\u0442 \u043a\u043e\u0434 \u0445\u0440\u0430\u043d\u0438\u0442 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438 \u043d\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0438\u0445 \u043f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u0430. \u0415\u0441\u043b\u0438 \u0432\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043c\u0435\u0436\u0434\u0443 \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430\u043c\u0438, \u0432\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0444\u043e\u0440\u043c\u0443 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430, \u0442\u0430\u043a\u0443\u044e \u043a\u0430\u043a \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445. <\/p>\n<\/div><\/div>\n<p>  <\/p>\n<p><strong>\u0418\u0442\u043e\u0433:<\/strong> \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u044d\u0442\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">-> % curl -X POST http:\/\/localhost:8080\/api\/generate\/ {\"id\":\"2080282532813236477\",\"value\":\"58477870582709028\"}  -> % curl -X POST http:\/\/localhost:8080\/api\/generate\/ {\"id\":\"2383079509972796201\",\"value\":\"7856768647560731715\"}  -> % curl http:\/\/localhost:8080\/api\/retrieve\/2383079509972796201 {\"id\":\"2383079509972796201\",\"value\":\"7856768647560731715\"}  -> % curl http:\/\/localhost:8080\/api\/retrieve\/2080282532813236477 \u00a0 {\"id\":\"2080282532813236477\",\"value\":\"58477870582709028\"}<\/code><\/pre>\n<p>  <\/p>\n<p>\u0422\u0430\u043a\u0436\u0435, \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435\u043c \u044f \u043f\u043e\u043f\u0440\u043e\u0441\u0438\u043b \u0435\u0433\u043e \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c Dockerfile<\/p>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041e\u0442\u0432\u0435\u0442 \u0440\u043e\u0431\u043e\u0442\u0430<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<p>\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0432\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0444\u0430\u0439\u043b <code>go.mod<\/code> \u0432 \u043a\u043e\u0440\u043d\u0435 \u0432\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u0435\u0441\u043b\u0438 \u0432\u044b \u0435\u0433\u043e \u0435\u0449\u0451 \u043d\u0435 \u0441\u043e\u0437\u0434\u0430\u043b\u0438, \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u044b <code>go mod init &lt;module-name><\/code>. \u042d\u0442\u043e \u043f\u043e\u043c\u043e\u0436\u0435\u0442 Go \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0432\u0430\u0448 \u043f\u0440\u043e\u0435\u043a\u0442 \u043a\u0430\u043a \u043c\u043e\u0434\u0443\u043b\u044c \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044f\u043c\u0438.<\/p>\n<p>  <\/p>\n<p>\u0417\u0430\u0442\u0435\u043c \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u0442\u044c <code>Dockerfile<\/code> \u0432 \u043a\u043e\u0440\u043d\u0435 \u0432\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430. \u041e\u043d \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\"># Start from the latest golang base image FROM golang:latest  # Add Maintainer Info LABEL maintainer=\"Your Name &lt;your-email@domain.com>\"  # Set the Current Working Directory inside the container WORKDIR \/app  # Copy go mod and sum files COPY go.mod go.sum .\/  # Download all dependencies. Dependencies will be cached if the go.mod and the go.sum files are not changed RUN go mod download  # Copy the source from the current directory to the Working Directory inside the container COPY . .  # Build the Go app RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o main .  # This container exposes port 8080 to the outside world EXPOSE 8080  # Run the binary program produced by `go install` CMD [\".\/main\"]<\/code><\/pre>\n<p>  <\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u043e\u0431\u0440\u0430\u0442\u044c Docker-\u043e\u0431\u0440\u0430\u0437 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b:<\/p>\n<p>  <\/p>\n<p><code>docker build -t my-go-app .<\/code><\/p>\n<p>  <\/p>\n<p>\u0418 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0435\u0433\u043e:<\/p>\n<p>  <\/p>\n<p><code>docker run -p 8080:8080 my-go-app<\/code><\/p>\n<p>  <\/p>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u0432\u043c\u0435\u0441\u0442\u043e <code>\"Your Name &lt;your-email@domain.com>\"<\/code> \u0438 <code>my-go-app<\/code> \u0432\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0438 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f.<\/p>\n<p>  <\/p>\n<p>\u042d\u0442\u043e\u0442 <code>Dockerfile<\/code> \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u043e\u0431\u0440\u0430\u0437 Docker \u0441 \u0432\u0430\u0448\u0438\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c \u043d\u0430 Go, \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u0432\u0441\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430. \u0421\u0435\u0440\u0432\u0435\u0440 \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u043d\u0430 \u043f\u043e\u0440\u0442\u0443 8080.<\/p>\n<\/div><\/div>\n<p>  <a name=\"csharp_rss\"><\/a>  <\/p>\n<h2 id=\"rss-feed-reader\">RSS feed reader<\/h2>\n<p>  <\/p>\n<p>\u0417\u0430\u0434\u0430\u043d\u0438\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043d\u0430 C#<\/p>\n<p>  <\/p>\n<p>\u0413\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f RSS \u043b\u0435\u043d\u0442\u044b \u0441 \u0441\u0430\u0439\u0442\u0430.<\/p>\n<p>  <\/p>\n<p>\u0412 \u0444\u0430\u0439\u043b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f:<\/p>\n<p>  <\/p>\n<p>\u041b\u0435\u043d\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0444\u0438\u0434\u0435\u0440. \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u044d\u0442\u043e (<a href=\"https:\/\/habr.com\/rss\/interesting\/\">https:\/\/habr.com\/rss\/interesting\/<\/a>).<\/p>\n<p>  <\/p>\n<p>\u0427\u0430\u0441\u0442\u043e\u0442\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043b\u0435\u043d\u0442\u044b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c.<\/p>\n<p>  <\/p>\n<p>\u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0435 \u043e\u043a\u043d\u043e \u0434\u043e\u043b\u0436\u043d\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043b\u0435\u043d\u0442\u044b (item): \u041a\u0430\u0436\u0434\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u043b\u0435\u043d\u0442\u044b \u0434\u043e\u043b\u0436\u0435\u043d \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0438 \u0434\u0430\u0442\u0443 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 (\u043f\u043e\u043b\u044f item->title \u0438 item->pubDate ).<\/p>\n<p>  <\/p>\n<p>\u0414\u0430\u0442\u0430 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u0441\u0442\u0430\u0442\u044c\u0438 \u0434\u043e\u043b\u0436\u043d\u0430 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c\u0441\u044f \u0432 \u0443\u0434\u043e\u0431\u043d\u043e\u043c \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0435.<\/p>\n<p>  <\/p>\n<p>\u041f\u0440\u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u0438 \u043d\u0430 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0434\u043e\u043b\u0436\u0435\u043d \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u0441 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u043c \u043d\u0430 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u0443\u044e \u0441\u0442\u0430\u0442\u044c\u044e (\u0438\u043b\u0438 \u0432 \u0443\u0436\u0435 \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u043c \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435 \u0434\u043e\u043b\u0436\u043d\u0430 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0441\u0441\u044b\u043b\u043a\u0430). \u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0434\u043e\u043b\u0436\u0435\u043d \u0438\u043c\u0435\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0441\u0442\u0430\u0442\u044c\u0438 (\u043f\u043e\u043b\u0435 item->description).<br \/>  \u0421\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0432\u0438\u0434\u0435 \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e \u0442\u0435\u043a\u0441\u0442\u0430 (\u043a\u0430\u043a \u0435\u0441\u0442\u044c), \u0431\u0435\u0437 \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e \u0442\u0435\u0433\u0430\u043c.<br \/>  \u0414\u0430\u043d\u043d\u044b\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c\u0441\u044f.<br \/>  \u0427\u0430\u0441\u0442\u043e\u0442\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0432\u0437\u044f\u0442\u0430 \u0438\u0437 \u0444\u0430\u0439\u043b\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438. \u0424\u0430\u0439\u043b \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u0438\u043c\u0435\u0435\u0442 \u0444\u043e\u0440\u043c\u0430\u0442 XML.<\/p>\n<p>  <\/p>\n<p>\u0412\u044b\u0432\u0435\u0434\u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0440\u0435\u0448\u0435\u043d\u0438\u044f, \u0437\u0430\u0442\u0435\u043c \u0432\u044b\u0432\u0435\u0434\u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430.<br \/>  \u041f\u0438\u0448\u0438 \u043e\u0442\u0432\u0435\u0442 \u0441 \u0443\u0447\u0435\u0442\u043e\u043c \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043c\u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u043f\u043e\u0434 mono \u0432 linux.<\/p>\n<p>  <\/p>\n<p>\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0434\u043e\u043f\u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u043e\u0442 \u043c\u0435\u043d\u044f, \u0442\u0430\u043a \u043a\u0430\u043a \u043c\u043d\u0435 \u043d\u0430\u0434\u043e \u044d\u0442\u043e \u0432\u0441\u0435 \u0441\u043e\u0431\u0440\u0430\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c.<\/p>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041e\u0442\u0432\u0435\u0442 \u0440\u043e\u0431\u043e\u0442\u0430<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<p>\u041f\u0440\u0438\u043d\u0438\u043c\u0430\u044f \u0432\u043e \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u0432\u0430\u0448 \u0437\u0430\u043f\u0440\u043e\u0441, \u043d\u0438\u0436\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 Windows Forms (System.Windows.Forms) \u0438 XmlReader \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f RSS-\u043b\u0435\u043d\u0442\u044b. \u0414\u0430\u043d\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u0443\u044e \u0444\u043e\u0440\u043c\u0443 \u0441 ListBox \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u0432 \u043d\u043e\u0432\u043e\u0441\u0442\u0435\u0439 \u0438 TextBox \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0439 \u043d\u043e\u0432\u043e\u0441\u0442\u0438.<\/p>\n<p>  <\/p>\n<p>\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0440\u0435\u0448\u0435\u043d\u0438\u044f:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">RssReader \u251c\u2500\u2500 Program.cs \u251c\u2500\u2500 RssFeed.cs \u251c\u2500\u2500 RssItem.cs \u251c\u2500\u2500 Settings.cs \u2514\u2500\u2500 MainForm.cs<\/code><\/pre>\n<p>  <\/p>\n<p><strong>Program.cs<\/strong><\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">using System; using System.Windows.Forms;  public class Program {     [STAThread]     static void Main()     {         Application.EnableVisualStyles();         Application.SetCompatibleTextRenderingDefault(false);         Application.Run(new MainForm());     } }<\/code><\/pre>\n<p>  <\/p>\n<p><strong>RssFeed.cs<\/strong><\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">using System; using System.Collections.Generic; using System.Xml;  public class RssFeed {     public static List&lt;RssItem> Load(string url)     {         List&lt;RssItem> rssItems = new List&lt;RssItem>();         using (XmlReader reader = XmlReader.Create(url))         {             while (reader.ReadToFollowing(\"item\"))             {                 RssItem item = new RssItem();                 reader.ReadToFollowing(\"title\");                 item.Title = reader.ReadElementContentAsString();                 reader.ReadToFollowing(\"description\");                 item.Description = reader.ReadElementContentAsString();                 reader.ReadToFollowing(\"link\");                 item.Link = reader.ReadElementContentAsString();                 reader.ReadToFollowing(\"pubDate\");                 item.PubDate = DateTime.Parse(reader.ReadElementContentAsString());                 rssItems.Add(item);             }         }         return rssItems;     } }<\/code><\/pre>\n<p>  <\/p>\n<p>RssItem.cs<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">using System;  public class RssItem {     public string Title { get; set; }     public string Description { get; set; }     public string Link { get; set; }     public DateTime PubDate { get; set; } }<\/code><\/pre>\n<p>  <\/p>\n<p>Settings.cs<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">using System; using System.Xml;  public class Settings {     public string RssUrl { get; set; }     public TimeSpan RefreshRate { get; set; }      public static Settings Load(string path)     {         XmlDocument xmlDoc = new XmlDocument();         xmlDoc.Load(path);          var settingsNode = xmlDoc.SelectSingleNode(\"\/settings\");          string url = settingsNode[\"rssUrl\"].InnerText;         TimeSpan refreshRate = TimeSpan.Parse(settingsNode[\"refreshRate\"].InnerText);          return new Settings { RssUrl = url, RefreshRate = refreshRate };     } }<\/code><\/pre>\n<p>  <\/p>\n<p>MainForm.cs<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">using System; using System.Diagnostics; using System.Windows.Forms; using System.Xml;  public class MainForm : Form {     private Settings settings;     private Timer timer;     private ListBox rssListBox;     private TextBox descriptionTextBox;     private Button openButton;      public MainForm()     {         settings = Settings.Load(\"settings.xml\");          rssListBox = new ListBox() { Dock = DockStyle.Top, Height = 300 };         descriptionTextBox = new TextBox() { Multiline = true, ReadOnly = true, Dock = DockStyle.Top, Height = 150 };         openButton = new Button() { Text = \"Open in browser\", Dock = DockStyle.Top };          rssListBox.SelectedIndexChanged += RssListBox_SelectedIndexChanged;         openButton.Click += OpenButton_Click;          Controls.Add(openButton);         Controls.Add(descriptionTextBox);         Controls.Add(rssListBox);          LoadRssItems();          timer = new Timer();         timer.Interval = (int)settings.RefreshRate.TotalMilliseconds;         timer.Tick += Timer_Tick;         timer.Start();     }      private void RssListBox_SelectedIndexChanged(object sender, EventArgs e)     {         if (rssListBox.SelectedItem is RssItem item)         {             descriptionTextBox.Text = item.Description;         }     }      private void OpenButton_Click(object sender, EventArgs e)     {         if (rssListBox.SelectedItem is RssItem item)         {             Process.Start(item.Link);         }     }      private void Timer_Tick(object sender, EventArgs e)     {         LoadRssItems();     }      private void LoadRssItems()     {         var rssItems = RssFeed.Load(settings.RssUrl);          rssListBox.Items.Clear();         rssListBox.Items.AddRange(rssItems.ToArray());     } }<\/code><\/pre>\n<p>  <\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e \u043a\u0430\u043a \u0432\u0441\u0435 \u0444\u0430\u0439\u043b\u044b \u0441\u043e\u0437\u0434\u0430\u043d\u044b, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u044b:<\/p>\n<p>  <\/p>\n<p><code>mcs -out:RssReader.exe *.cs -r:System.Windows.Forms.dll -r:System.Drawing.dll -r:System.Xml.Linq.dll<\/code><\/p>\n<p>  <\/p>\n<p>\u0410 \u0437\u0430\u0442\u0435\u043c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0435\u0433\u043e:<\/p>\n<p>  <\/p>\n<p><code>mono RssReader.exe<\/code><\/p>\n<p>  <\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435: \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0443\u0431\u0435\u0434\u0438\u0442\u0435\u0441\u044c, \u0447\u0442\u043e \u0443 \u0432\u0430\u0441 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d Mono \u0438 \u0447\u0442\u043e \u0432\u044b \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0435\u0441\u044c \u0432 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438, \u043a\u043e\u0433\u0434\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0435 \u044d\u0442\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u044b. \u00a0<\/p>\n<\/div><\/div>\n<p>  <\/p>\n<p><strong>\u0421\u043e\u0431\u0438\u0440\u0430\u0435\u043c, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c<\/strong><\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/post_images\/e63\/edf\/a21\/e63edfa219b003be6efdf82a1f1ae6f1.png\" alt=\"lgtm2\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/e63\/edf\/a21\/e63edfa219b003be6efdf82a1f1ae6f1.png\"\/><\/p>\n<p>  <\/p>\n<p>\u041f\u043e\u043b\u0443\u0447\u0438\u043b\u0430\u0441\u044c \u043a\u0430\u043a\u0430\u044f-\u0442\u043e \u0435\u0440\u0443\u043d\u0434\u0430. \u041e\u043a\u043d\u043e, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043a\u0430\u0436\u0434\u0430\u044f \u0441\u0442\u0440\u043e\u0447\u043a\u0430 \u2014 \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043b\u043e\u0432\u043e RssItem.<br \/>  \u041f\u043e\u043c\u043d\u0438\u043c, \u0447\u0442\u043e \u043c\u044b \u043d\u0435 \u0443\u043c\u0435\u0435\u043c \u0441\u0430\u043c\u0438 \u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043a\u043e\u0434, \u043f\u0438\u0448\u0435\u043c \u0442\u0435\u043a\u0441\u0442\u043e\u043c \u043f\u0440\u0435\u0442\u0435\u043d\u0437\u0438\u044e \u0440\u043e\u0431\u043e\u0442\u0443.<\/p>\n<p>  <\/p>\n<blockquote><p>\u043f\u043e\u044f\u0432\u0438\u043b\u043e\u0441\u044c \u043e\u043a\u043d\u043e \u0441 10 \u0441\u0442\u0440\u043e\u0447\u043a\u0430\u043c\u0438 RssItem<\/p><\/blockquote>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041e\u0442\u0432\u0435\u0442 \u0440\u043e\u0431\u043e\u0442\u0430<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<p>\u0418\u0437\u0432\u0438\u043d\u0438\u0442\u0435 \u0437\u0430 \u043f\u0443\u0442\u0430\u043d\u0438\u0446\u0443. \u041e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0432 ListBox \u043d\u0443\u0436\u043d\u043e \u043e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u044c \u043d\u0435 \u0441\u0430\u043c\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u044b <code>RssItem<\/code>, \u0430 \u0438\u0445 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043c\u0435\u0442\u043e\u0434 <code>LoadRssItems()<\/code> \u0432 \u0444\u0430\u0439\u043b\u0435 MainForm.cs \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">private void LoadRssItems() {     var rssItems = RssFeed.Load(settings.RssUrl);      rssListBox.Items.Clear();     foreach (var item in rssItems)     {         rssListBox.Items.Add(item.Title);     } }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432 ListBox \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438 \u043d\u043e\u0432\u043e\u0441\u0442\u0435\u0439 (\u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e <code>Title<\/code> \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 <code>RssItem<\/code>). \u041e\u0434\u043d\u0430\u043a\u043e, \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u044c \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043d\u043e\u0432\u043e\u0441\u0442\u0438 \u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0435\u0435 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435, \u0432\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0441\u0430\u043c \u043e\u0431\u044a\u0435\u043a\u0442 <code>RssItem<\/code>. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u043a\u043b\u0430\u0441\u0441 <code>RssItem<\/code> \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u0430 <code>ToString()<\/code>:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">public class RssItem {     public string Title { get; set; }     public string Description { get; set; }     public string Link { get; set; }     public DateTime PubDate { get; set; }      public override string ToString()     {         return Title;     } }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0412 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 ListBox \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438 \u043d\u043e\u0432\u043e\u0441\u0442\u0435\u0439, \u043d\u043e \u043f\u0440\u0438 \u0432\u044b\u0431\u043e\u0440\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0432\u044b \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043f\u043e\u043b\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 <code>RssItem<\/code> \u0441 \u0435\u0433\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u043c \u0438 \u0441\u0441\u044b\u043b\u043a\u043e\u0439. <\/p>\n<\/div><\/div>\n<p>  <\/p>\n<p><strong>\u041f\u0440\u0430\u0432\u0438\u043c, \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c<\/strong><\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/post_images\/a0d\/230\/4c1\/a0d2304c1ae9ee0208d497e2f15a6756.png\" alt=\"lgtm2\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/a0d\/230\/4c1\/a0d2304c1ae9ee0208d497e2f15a6756.png\"\/><\/p>\n<p>  <\/p>\n<p><strong>\u0418\u0442\u043e\u0433:<\/strong> \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0445\u043e\u0436\u0435 \u043d\u0430 \u043f\u0440\u0430\u0432\u0434\u0443. \u041a\u043e\u043d\u0435\u0447\u043d\u043e \u044d\u0442\u043e \u0435\u0449\u0435 \u043d\u0435 \u0440\u0438\u0434\u0435\u0440, \u0442\u0430\u043a \u043a\u0430\u043a \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438, \u043d\u043e \u044d\u0442\u043e \u0434\u0435\u043b\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0441\u0430 \u0438 \u043f\u044f\u0442\u0438 \u043f\u0440\u043e\u043c\u043f\u0442\u043e\u0432 \u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u043d\u0443\u0436\u043d\u043e\u0433\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0430, \u0431\u0435\u0437 \u0432\u0441\u044f\u043a\u043e\u0433\u043e \u0437\u043d\u0430\u043d\u0438\u044f C#. \u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u0438 \u043a\u043d\u043e\u043f\u043e\u0447\u043a\u0438 \u0442\u043e\u0436\u0435 \u043d\u0435 \u0441\u043e\u0441\u0442\u0430\u0432\u0438\u0442 \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u0442\u0440\u0443\u0434\u0430. \u0422\u043e \u0435\u0441\u0442\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0437\u0430\u0434\u0430\u043d\u0438\u0435 \u0437\u0430 \u043e\u0434\u0438\u043d \u043f\u0440\u043e\u043c\u043f\u0442 \u043c\u044b \u043d\u0435 \u0441\u043c\u043e\u0433\u043b\u0438, \u043d\u043e \u043f\u0440\u0438\u0431\u043b\u0438\u0437\u0438\u043b\u0438\u0441\u044c \u043a \u044d\u0442\u043e\u043c\u0443 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e.<\/p>\n<p>  <\/p>\n<h2 id=\"i-chto-zhe-delat\">\u0418 \u0447\u0442\u043e \u0436\u0435 \u0434\u0435\u043b\u0430\u0442\u044c?<\/h2>\n<p>  <\/p>\n<p>\u041a\u0430\u0436\u0435\u0442\u0441\u044f, \u043f\u043e\u0440\u0430 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0442\u044c \u0434\u0430\u0432\u0430\u0442\u044c \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0435 \u0437\u0430\u0434\u0430\u043d\u0438\u044f \u043d\u0430 \u0434\u043e\u043c. \u042d\u0442\u043e \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u044f\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u0438\u0437 \u0432\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u043e\u0448\u043b\u043e\u0433\u043e, \u0438 \u0435\u043c\u0443 \u043f\u043e\u0440\u0430 \u043e\u0441\u0442\u0430\u0442\u044c\u0441\u044f \u0432 \u0438\u0441\u0442\u043e\u0440\u0438\u0438 \u043d\u0430\u0432\u0441\u0435\u0433\u0434\u0430.<\/p>\n<p>  <\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u0432\u0441\u0451 \u0436\u0435 \u0445\u043e\u0442\u0438\u0442\u0435 \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c, \u0442\u043e \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e \u0441\u0442\u043e\u0438\u0442:<\/p>\n<p>  <\/p>\n<ol>\n<li>\u0414\u0430\u0432\u0430\u0442\u044c \u043d\u0430 \u0434\u043e\u043c \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0438 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u043d\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 (\u0444\u0440\u043e\u043d\u0442, \u0431\u044d\u043a, \u0442\u0435\u0441\u0442\u044b, \u0438\u043d\u0444\u0440\u0430 + \u0434\u0435\u043f\u043b\u043e\u0439), \u0447\u0442\u043e \u0434\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0435\u0433\u043e \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0439\u0440\u043e\u043d\u043a\u0443 \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043f\u0440\u043e\u044f\u0432\u0438\u0442\u044c \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u0437\u043d\u0430\u043d\u0438\u044f.<\/li>\n<li>\u041f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u0442\u044c \u0437\u0430\u0434\u0430\u043d\u0438\u0435 \u0441 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0438\u0437\u044e\u043c\u0438\u043d\u043a\u043e\u0439, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043d\u0435\u0439\u0440\u043e\u043d\u043a\u0430 \u043f\u043e\u0447\u0435\u043c\u0443-\u0442\u043e \u043f\u043e\u043a\u0430 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u043e\u0441\u0438\u043b\u0438\u0442\u044c.<\/li>\n<li>\u0413\u043b\u0430\u0432\u043d\u043e\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u2014 <em>\u0412\u0437\u044f\u0442\u044c \u0440\u043e\u0431\u043e\u0442\u0430 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u043d\u0430 \u043d\u0435\u043c \u0432\u0430\u0448\u0438 \u0437\u0430\u0434\u0430\u043d\u0438\u044f, \u0432\u0441\u0435 \u0438\u0434\u0435\u0438, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0432\u0430\u0448\u0438 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0438 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u043d\u0435\u0439\u0440\u043e\u043d\u043a\u0430 \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u043d\u0435\u0432\u0435\u0440\u043d\u044b \u0438 \u0431\u0435\u0437 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0432\u044b \u043e\u0448\u0438\u0431\u0435\u0442\u0435\u0441\u044c.<\/em><\/li>\n<\/ol>\n<p>  <\/p>\n<p>\u0421\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u0432\u0441\u0451 \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043c\u0435\u043d\u0435\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0439 \u0442\u0440\u0430\u0442\u043e\u0439 \u0432\u0430\u0448\u0435\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0447\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0441\u0442\u0438 \u0441\u043e\u0431\u0435\u0441 \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u043c\u0438 \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442\u0430\u043c\u0438.<\/p>\n<p>  <\/p>\n<p>\u042f \u0441\u043c\u043e\u0433 \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u0442\u044c \u0434\u0432\u0435 \u0437\u0430\u0434\u0430\u0447\u0438, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 Gpt3.5 \u043d\u0435 \u043c\u043e\u0433 \u0434\u0430\u0442\u044c \u0440\u0435\u0448\u0435\u043d\u0438\u0435. \u041a\u0430\u043a \u0432\u043e\u0434\u0438\u0442\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 \u043e\u043d \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u043e\u043d \u0432\u044b\u0434\u0443\u043c\u044b\u0432\u0430\u0435\u0442 \u043d\u0435\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438. \u041f\u0440\u0430\u0432\u0434\u0430 \u0443\u0436\u0435 \u0447\u0435\u0440\u0435\u0437 \u043f\u0430\u0440\u0443 \u043d\u0435\u0434\u0435\u043b\u044c \u0443 \u043d\u0430\u0441 \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c Gpt4, \u0438 \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u043e\u043d\u0430 \u0440\u0435\u0448\u0430\u0435\u0442 \u044d\u0442\u0438 \u0437\u0430\u0434\u0430\u0447\u0438.<\/p>\n<p>  <\/p>\n<p>\u0414\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u043f\u0440\u0438\u0432\u0435\u0434\u0443 \u0441\u0432\u043e\u044e \u0437\u0430\u0434\u0430\u0447\u0443, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0440\u0435\u0448\u0438\u0442\u044c Gpt3.5<\/p>\n<p>  <a name=\"py_cache_dec\"><\/a>  <\/p>\n<p><strong>\u0417\u0430\u0434\u0430\u0447\u0430<\/strong><\/p>\n<p>  <\/p>\n<blockquote><p>\u041d\u0430\u043f\u0438\u0448\u0438 \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440 \u043d\u0430 python, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0434\u043b\u044f \u0434\u0435\u043a\u043e\u0440\u0438\u0440\u0443\u0435\u043c\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435. \u0414\u043e\u043b\u0436\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0445\u0440\u0430\u043d\u0438\u043c\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439. \u041d\u0435\u043b\u044c\u0437\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u043a\u044d\u0448 \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440\u044b \u0438\u0437 functools.<br \/>  \u041d\u0430\u043f\u0438\u0448\u0438 \u0442\u0435\u0441\u0442\u044b \u043d\u0430 \u044d\u0442\u043e\u0442 \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440. \u0422\u0435\u0441\u0442\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0433\u043e\u0442\u043e\u0432\u043d\u043e\u0441\u0442\u0438 \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440\u0430 \u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044e \u043d\u0430 \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u043d\u0435, \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438 \u0441\u043c\u043e\u0442\u0440\u0438!<\/p><\/blockquote>\n<p>\u0417\u0430\u0434\u0430\u043d\u0438\u0435 \u043d\u0435\u0441\u043b\u043e\u0436\u043d\u043e\u0435, \u0438 Gpt3.5, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0441\u0434\u0435\u043b\u0430\u043b \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440, \u043d\u043e \u0432\u043e\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0430 \u043d\u0435\u0433\u043e \u0442\u0435\u0441\u0442\u044b \u043e\u043d \u043d\u0435 \u0441\u043c\u043e\u0433. \u041d\u0435 \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u043b, \u043a\u0430\u043a \u043f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0441\u0430\u043c\u043e \u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435.<br \/>  Gpt4 \u0443\u0436\u0435 \u043d\u0435 \u0438\u0441\u043f\u044b\u0442\u044b\u0432\u0430\u0435\u0442 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u0441 \u044d\u0442\u0438\u043c.<\/p>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041e\u0442\u0432\u0435\u0442 \u0440\u043e\u0431\u043e\u0442\u0430<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<p>\u0412\u0430\u0448 \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440 \u0434\u043b\u044f \u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<p>  <\/p>\n<pre><code class=\"python\">def cache(maxsize):     cache = {}     def decorator(func):         def wrapper(*args, **kwargs):             key = (args, frozenset(kwargs.items()))             if key in cache:                 return cache[key]             if len(cache) >= maxsize:                 # \u0435\u0441\u043b\u0438 \u043a\u044d\u0448 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d, \u0443\u0434\u0430\u043b\u044f\u0435\u043c \u043e\u0434\u043d\u043e \u0438\u0437 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439                 cache.pop(next(iter(cache)))             result = func(*args, **kwargs)             cache[key] = result             return result         return wrapper     return decorator<\/code><\/pre>\n<p>  <\/p>\n<p>\u0417\u0434\u0435\u0441\u044c <code>cache<\/code> \u2014 \u044d\u0442\u043e \u0441\u043b\u043e\u0432\u0430\u0440\u044c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u0432\u044b\u0437\u043e\u0432\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u041a\u043b\u044e\u0447\u0430\u043c\u0438 \u044d\u0442\u043e\u0433\u043e \u0441\u043b\u043e\u0432\u0430\u0440\u044f \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043a\u043e\u0440\u0442\u0435\u0436\u0438, \u0441\u043e\u0441\u0442\u043e\u044f\u0449\u0438\u0435 \u0438\u0437 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0438 \u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432, \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e. \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u0440\u044f \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0432\u044b\u0437\u043e\u0432\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430\u043c\u0438.<\/p>\n<p>  <\/p>\n<p>\u041a\u043e\u0433\u0434\u0430 \u0434\u0435\u043a\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442, \u0435\u0441\u0442\u044c \u043b\u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u0445 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0432 \u043a\u044d\u0448\u0435. \u0415\u0441\u043b\u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043d\u0430\u0439\u0434\u0435\u043d \u0432 \u043a\u044d\u0448\u0435, \u043e\u043d \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0438 \u0441\u0430\u043c\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043d\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f. \u0415\u0441\u043b\u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432 \u043a\u044d\u0448\u0435 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d, \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u0435\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u0432 \u043a\u044d\u0448\u0435 \u0438 \u0437\u0430\u0442\u0435\u043c \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f.<\/p>\n<p>  <\/p>\n<p>\u0415\u0441\u043b\u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0432 \u043a\u044d\u0448\u0435 \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u0435\u0442 <code>maxsize<\/code>, \u043f\u0435\u0440\u0435\u0434 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435\u043c \u043d\u043e\u0432\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0443\u0434\u0430\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u043e \u0438\u0437 \u0441\u0442\u0430\u0440\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439.<\/p>\n<p>  <\/p>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u044d\u0442\u043e\u0442 \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0445\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u044b, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043e\u043d\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043a\u043b\u044e\u0447\u0435\u0439 \u0441\u043b\u043e\u0432\u0430\u0440\u044f.<\/p>\n<p>  <\/p>\n<p>\u0422\u0435\u0441\u0442\u044b \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440\u0430 \u043c\u043e\u0433\u0443\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0430\u0441\u043f\u0435\u043a\u0442\u044b:<\/p>\n<p>  <\/p>\n<ol>\n<li>\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0447\u0442\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043a\u044d\u0448\u0438\u0440\u0443\u0435\u0442\u0441\u044f.<\/li>\n<li>\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0447\u0442\u043e, \u043a\u043e\u0433\u0434\u0430 \u043a\u044d\u0448 \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f, \u0441\u0442\u0430\u0440\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0443\u0434\u0430\u043b\u044f\u044e\u0442\u0441\u044f.<\/li>\n<li>\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0447\u0442\u043e \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440 \u043d\u0435 \u0432\u043d\u043e\u0441\u0438\u0442 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0438.<\/li>\n<li>\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0447\u0442\u043e \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440 \u043d\u0435 \u0432\u043b\u0438\u044f\u0435\u0442 \u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0431\u0435\u0437 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432.<\/li>\n<li>\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0447\u0442\u043e \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b.<\/li>\n<li>\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0447\u0442\u043e \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0442 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0445\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u044b.<\/li>\n<\/ol>\n<p>  <\/p>\n<p>\u0417\u0434\u0435\u0441\u044c \u0442\u0435\u0441\u0442\u044b, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 <code>pytest<\/code>:<\/p>\n<p>  <\/p>\n<pre><code class=\"python\">import pytest  def test_cache():     counter = 0      @cache(2)     def f(x):         nonlocal counter         counter += 1         return x      assert f(1) == 1  # \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f, counter == 1     assert f(1) == 1  # \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0438\u0437 \u043a\u044d\u0448\u0430, counter \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f     assert counter == 1      assert f(2) == 2  # \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f, counter == 2     assert f(2) == 2  # \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0438\u0437 \u043a\u044d\u0448\u0430, counter \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f     assert counter == 2      assert f(1) == 1  # \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0438\u0437 \u043a\u044d\u0448\u0430, counter \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f     assert counter == 2      assert f(3) == 3  # \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f, counter == 3     assert counter == 3      assert f(1) == 1  # \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0443\u0436\u0435 \u043d\u0435 \u0432 \u043a\u044d\u0448\u0435, \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f, counter == 4     assert counter == 4  def test_cache_empty_args():     counter = 0      @cache(2)     def f():         nonlocal counter         counter += 1      f()  # counter == 1     f()  # \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0438\u0437 \u043a\u044d\u0448\u0430, counter \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f     assert counter == 1  def test_cache_named_args():     counter = 0      @cache(2)     def f(x=None):         nonlocal counter         counter += 1         return x      assert f(x=1) == 1  # \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f, counter == 1     assert f(x=1) == 1  # \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0438\u0437 \u043a\u044d\u0448\u0430, counter \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f     assert counter == 1  def test_cache_non_hashable_args():     @cache(2)     def f(x):         return x      with pytest.raises(TypeError):         f([1, 2, 3])  # \u0441\u043f\u0438\u0441\u043a\u0438 \u043d\u0435 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0445\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u044b <\/code><\/pre>\n<p>  <\/p>\n<p>\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0442\u0435\u0441\u0442\u044b \u043c\u043e\u0436\u043d\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u044b pytest your_test_module.py, \u0433\u0434\u0435 your_test_module.py. <\/p>\n<\/div><\/div>\n<p>  <\/p>\n<p>\u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0445\u043e\u0440\u043e\u0448\u0435\u0435, \u043f\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u043c\u0443 \u0441\u0447\u0451\u0442\u0443 \u0438 \u043d\u0435 \u043f\u0440\u0438\u043a\u043e\u043f\u0430\u0435\u0448\u044c\u0441\u044f \u043d\u0438 \u043a \u0447\u0435\u043c\u0443.<\/p>\n<p>  <\/p>\n<h1 id=\"itogi\">\u0418\u0442\u043e\u0433\u0438<\/h1>\n<p>  <\/p>\n<p>\u0412\u0438\u0434\u0438\u043c\u043e, \u0443 \u0432\u0430\u0441 \u043f\u043e\u043f\u0440\u043e\u0441\u0442\u0443 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e \u043e\u0442\u043b\u0438\u0447\u0438\u0442\u044c \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442\u0430, \u0445\u043e\u0440\u043e\u0448\u043e \u043f\u0438\u0448\u0443\u0449\u0435\u0433\u043e \u043a\u043e\u0434, \u043e\u0442 \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0430, \u0445\u043e\u0440\u043e\u0448\u043e \u043f\u0438\u0448\u0443\u0449\u0435\u0433\u043e \u043f\u0440\u043e\u043c\u043f\u0442\u044b GPT \u2014 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u0430\u0432 \u0435\u043c\u0443 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u0431\u043e\u043b\u044c\u0448\u043e\u0435, \u0447\u0442\u043e \u043d\u0435 \u043f\u043e\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u0440\u0430\u043c\u043a\u0438 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u0437\u0430\u0434\u0430\u043d\u0438\u044f. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0438 \u043e\u0442\u0431\u043e\u0440\u0430 \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442\u043e\u0432 \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u0445\u043e\u0434\u043e\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u0418 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u044b \u0441 ChatGPT, \u0447\u0442\u043e\u0431\u044b \u0432\u043e\u0432\u0440\u0435\u043c\u044f \u0432\u044b\u044f\u0432\u0438\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u0437\u0430\u0434\u0430\u0447\u0438, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043e\u043d\u0430 \u043c\u043e\u0436\u0435\u0442 \u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u0437\u0430 \u0432\u0430\u0441 (\u043d\u0443 \u0438\u043b\u0438 \u0432\u0430\u0448\u0438\u0445 \u0441\u043e\u0438\u0441\u043a\u0430\u0442\u0435\u043b\u0435\u0439).<\/p>\n<p>  <\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u0430\u043c \u0431\u044b\u043b\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u0442\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0435 \u043a\u043e \u043c\u043d\u0435 <a href=\"https:\/\/kas.pr\/habr-sapelkin-python-developer-testovye-zadania-text\">\u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 KasperskyOS Tooling Development<\/a> \u2014 \u0431\u0443\u0434\u0435\u043c \u0432\u043c\u0435\u0441\u0442\u0435 \u0441\u043b\u0435\u0434\u0438\u0442\u044c \u0437\u0430 \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u044f\u043c\u0438 \u0438 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u044b \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u0436\u0438\u0437\u043d\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430. \u0418 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f, \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u0438\u0445 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043a\u0440\u0443\u0442\u044b\u0445 \u0438 \u0443\u0434\u043e\u0431\u043d\u044b\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432.<\/p>\n<p>  <\/p>\n<p><a href=\"https:\/\/kas.pr\/habr-sapelkin-python-developer-testovye-zadania-banner\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/ug\/3m\/rw\/ug3mrwkfp7am6z4ppvbmw3rrwnq.png\" data-src=\"https:\/\/habrastorage.org\/webt\/ug\/3m\/rw\/ug3mrwkfp7am6z4ppvbmw3rrwnq.png\"\/><\/a><\/p>\n<p>  <\/p>\n<p>\u0410 \u0435\u0441\u043b\u0438 \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u0438\u0442\u044c\u0441\u044f \u0432 (\u0431\u0435\u0437)\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u043a\u0430\u043a\u043e\u0433\u043e-\u0442\u043e \u0441\u0432\u043e\u0435\u0433\u043e \u0437\u0430\u0434\u0430\u043d\u0438\u044f \u2014 \u043a\u0438\u0434\u0430\u0439\u0442\u0435 \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u044b, \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \ud83d\ude42<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p> <!----> <!----><\/div>\n<p> <!----> <!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/companies\/kaspersky\/articles\/744544\/\"> https:\/\/habr.com\/ru\/companies\/kaspersky\/articles\/744544\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-1\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0412 2023 \u0433\u043e\u0434\u0443, \u0432 \u044d\u043f\u043e\u0445\u0443 \u0432\u0437\u0440\u044b\u0432\u043d\u043e\u0433\u043e \u0440\u043e\u0441\u0442\u0430 \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u0435\u0439, \u0432\u0441\u044f IT-\u043e\u0442\u0440\u0430\u0441\u043b\u044c \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442 \u0434\u0430\u0432\u0430\u0442\u044c \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442\u0430\u043c \u0432 \u0441\u0442\u0430\u0436\u0451\u0440\u044b (\u0438 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e) \u0434\u043e\u043c\u0430\u0448\u043d\u0438\u0435 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0435 \u0437\u0430\u0434\u0430\u043d\u0438\u044f. \u041a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u0442\u0440\u0430\u0442\u044f\u0442 \u0432\u0440\u0435\u043c\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u0442\u044c \u044d\u0442\u0438 \u0437\u0430\u0434\u0430\u043d\u0438\u044f, \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u044b \u0442\u0440\u0430\u0442\u044f\u0442 \u0432\u0440\u0435\u043c\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e\u0431\u044b \u0438\u0445 \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u043f\u043e\u0442\u043e\u043c \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u0441\u043d\u043e\u0432\u0430 \u0442\u0440\u0430\u0442\u044f\u0442 \u0432\u0440\u0435\u043c\u044f \u043d\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443\u2026 \u0412 \u044d\u0442\u043e\u0439 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0437\u0430\u043c\u0435\u0442\u043a\u0435 \u044f \u043f\u0440\u043e\u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u0443\u044e, \u0447\u0442\u043e \u0432\u0441\u0435 \u0437\u0430\u0434\u0430\u0447\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u043b\u0435\u0442 \u0440\u0435\u0448\u0430\u044e\u0442\u0441\u044f \u0437\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u0438\u043d\u0443\u0442 \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u043d\u0435\u0439\u0440\u043e\u043d\u043a\u0438, \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043a\u0430\u0436\u0434\u044b\u0439.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/4z\/en\/kp\/4zenkpzw1sqzh7jblxtxvdddfdy.png\" data-src=\"https:\/\/habrastorage.org\/webt\/4z\/en\/kp\/4zenkpzw1sqzh7jblxtxvdddfdy.png\"\/><\/p>\n<p>\u042f \u0432\u043e\u0437\u044c\u043c\u0443 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0435 \u0437\u0430\u0434\u0430\u043d\u0438\u044f \u043d\u0430 Python, C++, Go \u0438 C#\u00a0 \u0438 \u0431\u0443\u0434\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0435 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0438, \u0443\u0431\u0440\u0430\u0432 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0439 \u0438 \u043f\u0440\u044f\u043c\u044b\u0435 \u0441\u0441\u044b\u043b\u043a\u0438, \u0447\u0442\u043e\u0431\u044b \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043b\u044e\u0431\u044b\u0435 \u043f\u043e\u0434\u043e\u0437\u0440\u0435\u043d\u0438\u044f \u0432 \u043f\u0440\u0435\u0434\u0432\u0437\u044f\u0442\u043e\u0441\u0442\u0438.<\/p>\n<p>  <\/p>\n<p>\u0410 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043d\u0435\u0439\u0440\u043e\u043d\u043a\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e ChatGPT Plus (GPT 4). \u041e\u043d\u0430 \u0432\u0441\u0451 \u0435\u0449\u0435 \u043e\u0447\u0435\u043d\u044c \u0433\u043b\u0443\u043f\u0430, \u043c\u043d\u043e\u0433\u043e \u0432\u044b\u0434\u0443\u043c\u044b\u0432\u0430\u0435\u0442 \u0438 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u0441\u043c\u0435\u0448\u043d\u043e \u043e\u0448\u0438\u0431\u0430\u0435\u0442\u0441\u044f, \u043d\u043e \u043a\u0430\u043a \u0440\u0430\u0437 \u0434\u043b\u044f \u0442\u0430\u043a\u0438\u0445 \u0437\u0430\u0434\u0430\u0447 \u0433\u043e\u0434\u0438\u0442\u0441\u044f \u0445\u043e\u0440\u043e\u0448\u043e.<\/p>\n<p>  <\/p>\n<p>\u0418 \u0434\u0430, \u0432\u043c\u0435\u0441\u0442\u043e \u0434\u0438\u0441\u043a\u043b\u0435\u0439\u043c\u0435\u0440\u0430. \u0415\u0441\u043b\u0438 \u0432\u044b \u0445\u043e\u0442\u044c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0443\u0441\u043f\u0435\u043b\u0438 \u00ab\u043f\u043e\u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u0447\u0430\u0442\u044c\u00bb \u0441 ChatGPT, \u0442\u043e \u0441\u0442\u0430\u0442\u044c\u044f \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u0432\u0430\u043c \u0433\u043b\u0443\u0431\u043e\u043a\u043e \u043a\u0430\u043f\u0438\u0442\u0430\u043d\u0441\u043a\u043e\u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e\u0439 (\u043e\u043d\u0430 \u0442\u0430\u043a\u0430\u044f \u0438 \u0435\u0441\u0442\u044c, \u0431\u0435\u0437\u0443\u0441\u043b\u043e\u0432\u043d\u043e). \u041d\u043e \u0435\u0441\u043b\u0438 \u0432\u044b \u0432\u043c\u0435\u0441\u0442\u043e \u0445\u0430\u0439\u043f\u0430 \u043f\u043e \u043d\u0435\u0439\u0440\u043e\u043d\u043a\u0430\u043c \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0438\u0442\u0430\u0435\u0442\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c, \u0442\u043e \u0443 \u0432\u0430\u0441 \u043d\u0435\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043d\u0430 \u0442\u0430\u043a\u0438\u0435 \u0440\u0430\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u044f. \u0422\u0430\u043a \u0447\u0442\u043e, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u0438\u043d\u0443\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b \u0441\u0435\u0439\u0447\u0430\u0441 \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u0442\u0435 \u043d\u0430 \u043f\u0440\u043e\u0447\u0442\u0435\u043d\u0438\u0435, \u0441\u044d\u043a\u043e\u043d\u043e\u043c\u044f\u0442 \u0432\u0430\u043c \u043c\u043d\u043e\u0433\u043e \u0447\u0430\u0441\u043e\u0432 \u0438\u043d\u0432\u0435\u0441\u0442\u0438\u0446\u0438\u0439 \u0432 \u00ab\u043d\u0435\u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0445 \u0441\u0442\u0430\u0436\u0435\u0440\u043e\u0432\u00bb \u0438 \u00ab\u043d\u0435\u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0445 \u0434\u0436\u0443\u043d\u043e\u0432\u00bb. \u0418 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043f\u043e\u043c\u043e\u0433\u0443\u0442 \u043d\u0435 \u043d\u0430\u0434\u0435\u043b\u0430\u0442\u044c \u043e\u0448\u0438\u0431\u043e\u043a \u043f\u0440\u0438 \u043d\u0430\u0439\u043c\u0435.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-349544","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/349544","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=349544"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/349544\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=349544"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=349544"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=349544"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}