{"id":338962,"date":"2022-09-28T09:00:32","date_gmt":"2022-09-28T09:00:32","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=338962"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=338962","title":{"rendered":"<span>\u0412\u044b\u0440\u0430\u0437\u0438\u0442\u044c \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0447\u0435\u0441\u043a\u0438: \u0432\u043e\u043f\u0440\u043e\u0441 \u043a\u0430\u043a \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0445\u0430\u043c\u0435\u043b\u0435\u043e\u043d\u0430<\/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-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p><strong>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430<\/strong> \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u0435\u0439 &#8212; \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u0431\u0443\u0447\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0435\u0434\u0438\u043d\u0438\u0447\u043d\u044b\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445. \u0421\u043f\u0440\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u043c\u043e\u0436\u0435\u0442 \u0442\u0430\u0431\u043b\u0438\u0447\u043d\u043e\u0435 RL, \u043d\u043e \u043e\u0431\u0443\u0447\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0440\u0430\u0437\u043c\u0435\u0440\u043d\u043e\u0441\u0442\u0438 &#8212; \u0438\u043d\u0430\u044f \u043d\u0435\u0440\u0430\u0437\u0440\u0435\u0448\u0438\u043c\u0430\u044f \u0441\u0442\u043e\u0440\u043e\u043d\u0430 \u044d\u0442\u043e\u0439 \u043f\u0430\u0440\u0430\u0434\u0438\u0433\u043c\u044b <a href=\"https:\/\/habr.com\/ru\/post\/437020\/\" rel=\"noopener noreferrer nofollow\">https:\/\/habr.com\/ru\/post\/437020\/<\/a>. <strong>\u0420\u0435\u0448\u0435\u043d\u0438\u0435<\/strong> \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043e\u0434\u043d\u043e\u043c: \u0432\u0438\u0434\u0435\u0442\u044c \u043c\u0438\u0440 \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0447\u0435\u0441\u043a\u0438, \u0433\u0434\u0435 \u043a\u0430\u0436\u0434\u0430\u044f \u0435\u0433\u043e \u043f\u043e\u0434\u0447\u0430\u0441\u0442\u044c \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0430 \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0447\u0435\u0441\u043a\u0438.<\/p>\n<p>\u041a\u0430\u043a \u0437\u0434\u0435\u0441\u044c <a href=\"https:\/\/habr.com\/ru\/post\/420219\/\" rel=\"noopener noreferrer nofollow\">https:\/\/habr.com\/ru\/post\/420219\/<\/a> &#8212; \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0438\u0433\u0440\u044b \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0441\u043e\u043a\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0437\u0430 \u0441\u0447\u0435\u0442 \u0432\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043d\u0435\u0431\u043e\u0435\u0432\u043e\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f, \u043f\u043e\u0434\u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f\u043c\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0435 \u0438 \u043f\u0430\u0442\u0440\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/8fd\/4b6\/baf\/8fd4b6bafc4c5112ab687fc04dffaf1f.jpg\" alt=\"\u0425\u0430\u0431\u0440. \u041e\u0431\u0437\u043e\u0440 \u0442\u0435\u0445\u043d\u0438\u043a \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0438\u0433\u0440\u043e\u0432\u043e\u0433\u043e \u0418\u0418\" title=\"\u0425\u0430\u0431\u0440. \u041e\u0431\u0437\u043e\u0440 \u0442\u0435\u0445\u043d\u0438\u043a \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0438\u0433\u0440\u043e\u0432\u043e\u0433\u043e \u0418\u0418\" width=\"588\" height=\"673\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/8fd\/4b6\/baf\/8fd4b6bafc4c5112ab687fc04dffaf1f.jpg\" data-blurred=\"true\"\/><figcaption>\u0425\u0430\u0431\u0440. \u041e\u0431\u0437\u043e\u0440 \u0442\u0435\u0445\u043d\u0438\u043a \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0438\u0433\u0440\u043e\u0432\u043e\u0433\u043e \u0418\u0418<\/figcaption><\/figure>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u0430\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u043c \u044d\u0442\u043e\u0442 \u043f\u043e\u0434\u0445\u043e\u0434. \u041d\u0430 \u044d\u0442\u043e\u0442 \u0441\u0447\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b \u0440\u0430\u0441\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u044f \u0412.\u0422\u0443\u0440\u0447\u0438\u043d\u0430<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/227\/ae1\/d8d\/227ae1d8dffed558ed9d30e48ba73a85.jpg\" alt=\"\u0422\u0443\u0440\u0447\u0438\u043d \/\/ \u0424\u0435\u043d\u043e\u043c\u0435\u043d \u043d\u0430\u0443\u043a\u0438. \u041a\u0438\u0431\u0435\u0440\u043d\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043a \u044d\u0432\u043e\u043b\u044e\u0446\u0438\u0438\" title=\"\u0422\u0443\u0440\u0447\u0438\u043d \/\/ \u0424\u0435\u043d\u043e\u043c\u0435\u043d \u043d\u0430\u0443\u043a\u0438. \u041a\u0438\u0431\u0435\u0440\u043d\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043a \u044d\u0432\u043e\u043b\u044e\u0446\u0438\u0438\" width=\"910\" height=\"1115\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/227\/ae1\/d8d\/227ae1d8dffed558ed9d30e48ba73a85.jpg\" data-blurred=\"true\"\/><figcaption>\u0422\u0443\u0440\u0447\u0438\u043d \/\/ \u0424\u0435\u043d\u043e\u043c\u0435\u043d \u043d\u0430\u0443\u043a\u0438. \u041a\u0438\u0431\u0435\u0440\u043d\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043a \u044d\u0432\u043e\u043b\u044e\u0446\u0438\u0438<\/figcaption><\/figure>\n<p>\u0418 \u0438\u0433\u0440\u0430, \u0438 \u043a\u0430\u0436\u0434\u043e\u0435 \u0438\u0437 \u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439, \u0438 \u043a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u043a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u0432 \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e. \u0422\u0430\u043a \u0432\u0438\u0434\u0435\u0442\u044c &#8212; \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0434\u043b\u044f \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0430. \u041d\u043e \u043d\u0435 \u0434\u043b\u044f \u043c\u0430\u0448\u0438\u043d\u044b.<\/p>\n<p>\u0412\u043e\u0442 \u0447\u0442\u043e \u043f\u0438\u0448\u0435\u0442 \u043e\u0431 \u044d\u0442\u043e\u043c \u0410. \u041a\u0430\u0440\u043f\u0430\u0442\u044b\u0439  <a href=\"https:\/\/habr.com\/ru\/post\/439674\/\" rel=\"noopener noreferrer nofollow\">https:\/\/habr.com\/ru\/post\/439674\/<\/a>. \u041a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u044b \u043f\u043e\u0439\u043c\u0435\u0442\u0435 \u00ab\u0445\u0438\u0442\u0440\u043e\u0441\u0442\u044c\u00bb, \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u044d\u0442\u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b, \u0432\u044b \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u043d\u044f\u0442\u044c \u0438\u0445 \u0441\u0438\u043b\u044c\u043d\u044b\u0435 \u0438 \u0441\u043b\u0430\u0431\u044b\u0435 \u0441\u0442\u043e\u0440\u043e\u043d\u044b. \u0412 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, <strong>\u044d\u0442\u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u0434\u0430\u043b\u0435\u043a\u043e \u043e\u0442\u0441\u0442\u0430\u044e\u0442 \u043e\u0442 \u043b\u044e\u0434\u0435\u0439 \u0432 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0438 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u044b\u0445 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0439 \u043e\u0431 \u0438\u0433\u0440\u0430\u0445<\/strong>.<\/p>\n<p>\u0422\u0430\u043a \u043a\u0430\u043a\u043e\u0432 \u043a\u0440\u0438\u0442\u0435\u0440\u0438\u0439 \u0432\u0438\u0434\u0435\u0442\u044c \u044d\u0442\u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438? \u041f\u043e\u043f\u044b\u0442\u043a\u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u044b \u0438 \u044f\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u0430\u043a \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u0432\u0435\u0440\u0442\u043a\u0438 &#8212; \u043b\u0438\u0448\u044c \u0447\u0430\u0441\u0442\u043d\u044b\u0439 \u0441\u043b\u0443\u0447\u0430\u0439 \u0431\u043e\u043b\u0435\u0435 \u0444\u0443\u043d\u0434\u0430\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0430.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/02f\/fcc\/e41\/02ffcce41f9e16f70d0c0604d45097ee.jpg\" alt=\"\u0420. \u042d\u0448\u0431\u0438 .\/\/\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 \u043a\u0438\u0431\u0435\u0440\u043d\u0435\u0442\u0438\u043a\u0443 [\u0441\u0442\u0440 63]\" title=\"\u0420. \u042d\u0448\u0431\u0438 .\/\/\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 \u043a\u0438\u0431\u0435\u0440\u043d\u0435\u0442\u0438\u043a\u0443 [\u0441\u0442\u0440 63]\" width=\"1037\" height=\"615\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/02f\/fcc\/e41\/02ffcce41f9e16f70d0c0604d45097ee.jpg\" data-blurred=\"true\"\/><figcaption>\u0420. \u042d\u0448\u0431\u0438 .\/\/\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 \u043a\u0438\u0431\u0435\u0440\u043d\u0435\u0442\u0438\u043a\u0443 [\u0441\u0442\u0440 63]<\/figcaption><\/figure>\n<p>\u041f\u0443\u0441\u0442\u044c \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u043c\u044f\u0447\u0438\u043a (\u0441\u0438\u043d\u0438\u0439 \u043a\u0432\u0430\u0434\u0440\u0430\u0442) \u043a\u0430\u043a \u0432 \u0438\u0433\u0440\u0435 \u043f\u0438\u043d\u0433-\u043f\u043e\u043d\u0433, \u043b\u0435\u0442\u044f\u0449\u0438\u0439 \u043f\u043e \u043d\u0435\u043a\u043e\u0439 \u0442\u0440\u0430\u0435\u043a\u0442\u043e\u0440\u0438\u0438.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/13f\/2b3\/8ec\/13f2b38ec820a53d6a1090e07e5db782.jpg\" width=\"702\" height=\"112\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/13f\/2b3\/8ec\/13f2b38ec820a53d6a1090e07e5db782.jpg\" data-blurred=\"true\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041a\u0430\u043a \u043c\u044b \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u043c, \u0447\u0442\u043e \u044d\u0442\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044c, \u0430 \u043d\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0441\u0438\u043d\u0438\u0445 \u043c\u044f\u0447\u0435\u0439 \u043f\u043e\u044f\u0432\u043b\u044f\u044e\u0449\u0438\u0445\u0441\u044f \u0438 \u0438\u0441\u0447\u0435\u0437\u0430\u044e\u0449\u0438\u0445 \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u0442\u043e\u0447\u043a\u0430\u0445 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430? \u041a\u043e\u043d\u0442\u0440\u0430\u0441\u0442 \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u0430 \u0441\u0438\u043d\u0438\u0439 \u0438 \u0431\u0435\u043b\u043e\u0433\u043e \u0444\u043e\u043d\u0430? \u0410 \u0435\u0441\u043b\u0438 \u044d\u0442\u043e\u0442 \u043f\u0440\u0435\u0434\u043c\u0435\u0442 \u0431\u0443\u0434\u0435\u0442 \u043c\u0435\u043d\u044f\u0442\u044c \u0446\u0432\u0435\u0442, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043d\u0430 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u0441\u0438\u043d\u0438\u0439, \u0441\u0435\u0440\u044b\u0439 (\u043a\u043e\u0434 \u043d\u0438\u0436\u0435, BALL_CHANGE_BG = True)? \u0412\u0440\u043e\u0434\u0435 \u043d\u0430 \u0444\u043e\u043d\u0435 \u0431\u0435\u043b\u043e\u0433\u043e \u0436\u0435. \u041d\u043e \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u0444\u043e\u043d\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u0446\u0432\u0435\u0442\u0430?<\/p>\n<p>\u0418\u0437 \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043e\u043a \u0432\u0438\u0434\u043d\u043e, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0447\u0442\u043e \u0438\u0437 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f (1,2) \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043a\u0430\u043a \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 (1,3), \u0442\u0430\u043a \u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f (2,3), (0,3). \u041f\u043e \u044d\u0442\u043e\u0439 \u043f\u0440\u0438\u0447\u0438\u043d\u0435 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e (\u0435\u0441\u043b\u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u044b \u0440\u0430\u0432\u043d\u043e\u0432\u0435\u0440\u043e\u044f\u0442\u043d\u044b) \u043f\u043e\u0439\u043c\u0430\u0442\u044c \u0441\u0438\u043d\u0438\u0439 \u043c\u044f\u0447\u0438\u043a \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f. \u0412\u044b\u0438\u0433\u0440\u044b\u0448 \u043d\u0435 \u0431\u043e\u043b\u0435\u0435 1\/3, \u0435\u0441\u043b\u0438 \u043e\u0441\u043d\u043e\u0432\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0435 \u0431\u0435\u0437 \u0443\u0447\u0435\u0442\u0430 \u043f\u0440\u0435\u0434\u0448\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439.<\/p>\n<p><strong>\u041c\u043e\u0436\u043d\u043e \u043f\u043e\u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u043d\u0430\u0439\u0442\u0438 \u0442\u0430\u043a\u043e\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0431\u044b \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u043b\u043e \u043a \u0436\u0435\u043b\u0430\u0435\u043c\u043e\u0439 \u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u043e\u0441\u0442\u0438.<\/strong> \u0418\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0435\u0434\u0448\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435. \u0422\u043e\u0433\u0434\u0430: (1,2) \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u0442 \u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u043e \u0432 (1,3) \u043f\u0440\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0438 (1,1); (1,2) \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 (2,3) \u043f\u0440\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0438 (0,1); (1,2) \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 (0,3) \u043f\u0440\u0438 (2,1).<\/p>\n<p>\u0412\u0441\u0435\u0433\u0434\u0430 \u043b\u0438 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u044b\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f, \u043f\u043e\u0434\u043e\u0431\u0440\u0430\u0432 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f? \u041d\u0435\u0442 \u043a\u043e\u043d\u0435\u0447\u043d\u043e. \u041d\u043e \u043a \u044d\u0442\u043e\u043c\u0443 \u043d\u0443\u0436\u043d\u043e \u0441\u0442\u0440\u0435\u043c\u0438\u0442\u0441\u044f. \u041d\u0438\u0436\u0435 4 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430.<\/p>\n<ol>\n<li>\n<p>\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e. \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043e\u043d\u043e \u043e\u0434\u043d\u043e (\u0443\u0441\u043b\u043e\u0432\u043d\u043e f). \u041a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u043e\u0441\u0442\u0438 0.6<\/p>\n<\/li>\n<li>\n<p>\u0412\u043d\u043e\u0441\u0438\u043c \u043d\u0435\u0443\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u043c\u0443\u044e \u043d\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u043e\u0442\u0441\u043a\u043e\u043a\u0430 \u043e\u0442 \u0447\u0435\u0440\u043d\u043e\u0433\u043e \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u0430. \u041a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u0431\u0443\u0434\u0435\u0442 \u043d\u0438\u0436\u0435.<\/p>\n<\/li>\n<li>\n<p>\u0412\u044b\u0431\u0440\u0430\u043d\u044b \u0432\u0435\u0440\u043d\u044b\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f. \u041a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u0435\u0434\u0438\u043d\u0438\u0446\u0430 (\u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u043e\u0441\u0442\u044c \u0441\u0442\u043e \u043f\u0440\u043e\u0446\u0435\u043d\u0442\u043e\u0432),. \u0422\u0435\u043f\u0435\u0440\u044c, \u0437\u043d\u0430\u044f \u0433\u0440\u0430\u0444 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432, \u0431\u0435\u0437\u043e\u0448\u0438\u0431\u043e\u0447\u043d\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u0443\u0434\u0430 \u043f\u0440\u0438\u043b\u0435\u0442\u0438\u0442 \u0441\u0438\u043d\u0438\u0439 \u043c\u044f\u0447.<\/p>\n<\/li>\n<li>\n<p>\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043d\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u043a \u0432\u0435\u0440\u043d\u044b\u043c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f\u043c. \u0418\u0437 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f (1.2) \u043e\u043d\u0430 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0430 \u0438\u0437-\u0437\u0430 \u0447\u0435\u0440\u043d\u043e\u0433\u043e \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u0430 (\u043d\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0439 \u043e\u0442\u0441\u043a\u043e\u043a)<\/p>\n<\/li>\n<\/ol>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/deb\/a31\/6b8\/deba316b8370e1cedf69489e92e92533.jpg\" width=\"1380\" height=\"1272\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/deb\/a31\/6b8\/deba316b8370e1cedf69489e92e92533.jpg\" data-blurred=\"true\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0422\u0430\u043a \u043a\u0430\u043a \u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0437\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u044f\u0432\u043b\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u043a\u0430\u043a \u0432\u043b\u0438\u044f\u0442\u044c \u0434\u0440\u0443\u0433 \u043d\u0430 \u0434\u0440\u0443\u0433\u0430, \u0442\u0430\u043a \u0438 \u0431\u044b\u0442\u044c \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u044b\u0441\u0442\u0440\u043e\u0435\u043d\u044b?<\/p>\n<p>\u041d\u0438\u0436\u0435 \u043b\u0430\u0431\u0438\u0440\u0438\u043d\u0442 (\u041b) &#8212; \u044d\u0442\u043e \u043e\u0434\u043d\u043e \u0438\u0437 \u0441\u043c\u0435\u043d\u044f\u0435\u043c\u044b\u0445 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439 {11, 12, 14, 15} \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 {31, 32}.  \u0412 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043b\u0430\u0431\u0438\u0440\u0438\u043d\u0442\u0430 \u043a\u043b\u044e\u0447 (11) \u0442\u043e\u0436\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u043e \u0441\u043c\u0435\u043d\u043e\u0439 \u0441\u0432\u043e\u0438\u0445 \u043f\u043e\u0434\u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439 {45, 44, 41} \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 {35, 36, 34}. \u0418 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043b\u0430\u0431\u0438\u0440\u0438\u043d\u0442\u0430 \u0434\u0432\u0435\u0440\u044c (12) \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u043b\u044e\u0447\u043e\u043c (11). \u0423\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e \u0442\u043e\u0439 \u043f\u0440\u0438\u0447\u0438\u043d\u0435, \u0447\u0442\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043a\u043b\u044e\u0447\u0430 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f\u043c\u0438 \u0434\u043b\u044f \u0434\u0432\u0435\u0440\u0438. \u041a\u043e\u0433\u0434\u0430 \u043f\u043e\u0434\u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0434\u0432\u0435\u0440\u0438 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043e\u0442\u043a\u0440\u044b\u0442\u043e (54), \u0430\u0433\u0435\u043d\u0442 \u043c\u043e\u0436\u0435\u0442 \u0438\u0437 \u043b\u0430\u0431\u0438\u0440\u0438\u043d\u0442\u0430 (\u041b) \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u0432 \u043a\u043e\u043c\u043d\u0430\u0442\u0443 (\u043a\u043c) \u0438 \u043d\u0430\u0439\u0442\u0438 \u043a\u043b\u0430\u0434 (63). <strong>\u0412 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0432\u0437\u044f\u0442\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u043f\u043e\u0438\u0441\u043a \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0443\u0442\u0438 \u043c\u043e\u0436\u0435\u0442 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u043c\u0438 RL.<\/strong><\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/0d9\/08e\/48b\/0d908e48b54fbc5521d9f6632439e17b.jpg\" width=\"2265\" height=\"1202\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/0d9\/08e\/48b\/0d908e48b54fbc5521d9f6632439e17b.jpg\" data-blurred=\"true\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041d\u043e! <strong>\u0412 \u043d\u0430\u0447\u0430\u043b\u0435 \u0438\u0433\u0440\u044b \u0430\u0433\u0435\u043d\u0442 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0432\u0435\u0434\u0430\u0435\u0442<\/strong>, \u0447\u0442\u043e \u0435\u0441\u0442\u044c \u043a\u043b\u0430\u0434. \u041d\u0435 \u0432\u0435\u0434\u0430\u0435\u0442 \u0447\u0442\u043e \u0435\u0441\u0442\u044c \u044d\u0442\u0438  \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 (\u043b\u0430\u0431\u0438\u0440\u0438\u043d\u0442, \u043a\u043b\u044e\u0447, \u0434\u0432\u0435\u0440, \u043a\u043e\u043c\u043d\u0430\u0442\u0430). \u041e\u043d \u043b\u0438\u0448\u044c \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u0442 \u043f\u043e\u0442\u043e\u043a \u0434\u0430\u043d\u043d\u044b\u0445. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 [32, 52, .., 52, ..], \u0437\u0430\u0442\u0435\u043c [.., .., 44, .. 36] \u0438 \u0442.\u0434. \u0420\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442 <strong>\u0440\u0430\u0437\u043d\u044b\u0435 \u0433\u0438\u043f\u043e\u0442\u0435\u0437\u044b, \u0441\u0442\u0440\u0435\u043c\u044f\u0441\u044c \u043c\u0430\u043a\u0441\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u043e\u0441\u0442\u0438<\/strong>. \u0422\u0430\u043a, \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u0432 \u0447\u0435\u0440\u043d\u0443\u044e \u0433\u0438\u043f\u043e\u0442\u0435\u0437\u0443, \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u043a \u0432\u044b\u0432\u043e\u0434\u0443, \u0447\u0442\u043e \u0435\u0441\u0442\u044c \u043d\u0435\u043a\u0430\u044f \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044c (11), \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f\u043c\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f {45, 44, 41}. \u041e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u0442\u0430\u043a\u0436\u0435 \u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 (12). \u0418 \u0434\u0430\u043b\u0435\u0435 \u0443\u0436\u0435 \u043e \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 (\u041b) \u0442\u043e\u0436\u0435 \u043c\u044b\u0441\u043b\u0438\u0442 \u043a\u0430\u043a \u043e \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u044b \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u044b. \u041f\u043e \u0442\u043e\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043f\u0440\u0438\u0447\u0438\u043d\u0435, \u0447\u0442\u043e \u0434\u043b\u044f \u043a\u0440\u0430\u0441\u043d\u043e\u0439 \u0433\u0438\u043f\u043e\u0442\u0435\u0437\u044b (\u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u043f\u043e\u043d\u044f\u0442\u044c \u0447\u0442\u043e \u0435\u0441\u0442\u044c \u043b\u0430\u0431\u0438\u0440\u0438\u043d\u0442) \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f {44, 41, 45} \u0437\u0430\u043c\u0435\u043d\u044f\u0442\u0441\u044f \u043d\u0430 (11), \u0430 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f {52, 53, 54} \u0437\u0430\u043c\u0435\u043d\u044f\u0442\u0441\u044f \u043d\u0430 (12).<\/p>\n<p>\u041f\u043e \u0422\u0443\u0440\u0447\u0438\u043d\u0443, <strong>(11) \u0438 (12) \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430\u043c\u0438 \u043d\u0438\u0436\u043d\u0435\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f \u0434\u043b\u044f \u043a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430 (\u041b) \u0431\u043e\u043b\u0435\u0435 \u0432\u0435\u0440\u0445\u043d\u0435\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f, \u043e\u0431\u0440\u0430\u0437\u0443\u044f \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u044e \u043f\u043e\u043d\u044f\u0442\u0438\u0439<\/strong>.<\/p>\n<p>\u041d\u0438\u0436\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u043a\u043e\u0434 \u0434\u043b\u044f \u0438\u0433\u0440\u044b \u0432 \u043f\u043e\u043d\u0433, \u043d\u043e \u0431\u0435\u0437 \u0447\u0430\u0441\u0442\u0438 \u043c\u0430\u043a\u0441\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u043e\u0441\u0442\u0438 \u0438 \u0431\u0435\u0437 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0430 \u043f\u043e \u0433\u0440\u0430\u0444\u0443 (\u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u043c\u044f\u0447\u0430, \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u043b\u043e\u0432\u044f\u0449\u0435\u0433\u043e \u043c\u044f\u0447) . \u0411\u0435\u0437 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0435\u0432.<\/p>\n<pre><code class=\"python\"># \u0412\u044b\u0440\u0430\u0437\u0438\u0442\u044c \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0447\u0435\u0441\u043a\u0438: \u0432\u043e\u043f\u0440\u043e\u0441 \u043a\u0430\u043a \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0445\u0430\u043c\u0435\u043b\u0435\u043d\u0430 from tkinter import * import random   class Hd(): def __init__(self, graph): self.graph = graph  def rnd_get(self, v): return random.choice(v.split(\"|\"))  def show(self, graph): for x in graph: print(x, \":\", graph[x])  def get_ku(self, graph): '''return (\u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u043e\u0441\u0442\u0438, \u0440\u0430\u0437\u043c\u0435\u0440)''' n = 0; u = 0 for x in graph: for y in graph[x]: if y[0]: u += y[0].count(\"|\") n += 1 if n != 0: return (round(1- u\/(n+u), 3), n)  else: return (None, None)  def get_states(self, x, f_list = [], n=11): x_list = [] x_list.append(x)  if f_list != []: for f in f_list: xf = [xf for xf in g[x] if xf[1] == f] if not xf: x_list.append(''); f_list[len(x_list)-2] = '' return (x_list, f_list[:len(x_list)-1]) x = self.rnd_get(xf[0][0]) x_list.append(x) else: for i in range(n): if not self.graph[x]: x_list.append(''); f_list.append('') break t = random.choice(self.graph[x]) f = t[1] x = random.choice(t[0].split('|')) x_list.append(x); f_list.append(f)  if len(f_list) == len(x_list) -1: return (x_list, f_list) else: return ([], [])  def get_yfx(self, f_list, x_list, t = True): if len(x_list) == len(f_list): x_list.append('')  path = [] for i in range(len(f_list)): path.append((x_list[i], f_list[i], x_list[i+1]))  if t: return path #(x, f, next_x) else: p = [] for xfy in path: if xfy[2] != '': p.append(xfy[2]+'='+xfy[1]+'('+xfy[0]+')') return p  def flow(self, path, rnd=False): if not path:  return [] fl = [] for p in path: if not rnd: fl.append(p[:-1]) else: pr = list(p[:-1]) #random.shuffle(pr) fl.append(tuple(pr)) fl.append(pr) return fl  def fORx(self, flow, f=0): '''index: f=0, x=1 or x=0, f=1''' def add_empty(): empty = [] for k in graph: for x in graph[k]: z = list(set(x[0].split('|')) - set(list(graph.keys()))) if z: empty.append(z[0]) return empty  if not flow: return []  graph = {} fli = flow[0]  for t in flow[1:]: if f == 0: if fli[1] not in graph: graph[fli[1]] = [] r = [(i, xf) for i,xf in enumerate(graph[fli[1]]) if xf[1] == fli[0]] if r: if t[1] not in r[0][1][0]: x_new = r[0][1][0] + \"|\" + t[1] if x_new != '': graph[fli[1]][r[0][0]] = (x_new, r[0][1][1]) if not r: if t[1] != '': graph[fli[1]].append((t[1], fli[0]))  if f == 1: if fli[0] not in graph: graph[fli[0]] = [] r = [(i, xf) for i,xf in enumerate(graph[fli[0]]) if xf[1] == fli[1]] if r: if t[0] not in r[0][1][0]: x_new = r[0][1][0] + \"|\" + t[0] if x_new != '': graph[fli[0]][r[0][0]] = (x_new, r[0][1][1]) if not r: if t[0] != '': graph[fli[0]].append((t[0], fli[1])) fli = t  em = add_empty() if em: graph[em[0]] = [] return graph  def merge(self, g1, g2): def find_index(): for i in range(len(graph[k])): if graph[k][i][1] == x[1]: return i return -1  all_keys = set(list(g1.keys()) + list(g2.keys())) graph = {}  for k in all_keys: if k not in graph:  if k in g1: graph[k] = g1[k] else: graph[k] = g2[k]  if k in g2: for x in g2[k]: ind = find_index() if ind != -1: if x[0] != []: t1 = x[0].split('|') if graph[k][ind] != -1: t2 = graph[k][ind][0].split('|') z = \"|\".join(set(t1+t2)) #xf = [z, graph[k][ind][1]] xf = (z, graph[k][ind][1]) graph[k][ind] = xf else: graph[k].append(x)  return graph   class Wednesday():     def __init__(self, root, maps, ban):         self.root = root         self.maps = maps         self.ban = ban         Wednesday.time = {}         Wednesday.hierarchy = {}         Wednesday.neighbor = {}                    self.init_3_dict()              def init_3_dict(self):         def is_en(yx):             if yx[0] &lt; 0 or yx[0] > len(self.maps)-1: return             if yx[1] &lt; 0 or yx[1] > len(self.maps[0])-1: return             if yx in self.ban: return             return True                      for y in range(len(self.maps)):             for x in range(len(self.maps[0])):                 Wednesday.hierarchy[(y,x)] = self.maps[y][x]                                  n = []                 if is_en((y-1,x)):                     n.append((y-1,x))                 if is_en((y+1,x)):                     n.append((y+1,x))                 if is_en((y,x-1)):                     n.append((y,x-1))                 if is_en((y,x+1)):                     n.append((y,x+1))                  if is_en((y-1,x-1)):                     n.append((y-1,x-1))                 if is_en((y-1,x+1)):                     n.append((y-1,x+1))                 if is_en((y+1,x+1)):                     n.append((y+1,x+1))                 if is_en((y+1,x-1)):                     n.append((y+1,x-1))                                      Wednesday.neighbor[(y,x)] = n                                  Wednesday.time[(y,x)] = 0                 if (y, x) in self.ban:                     lb = Label(text=\" \", background = 'black')                     lb.configure(text=self.maps[y][x])                 else:                     bg = \"white\"                     if CHANGE_BG:                         bg = random.choice([\"yellow\", \"red\", \"white\", \"brown\", \"pink\"])                     lb = Label(text=\" \", background = bg)                     lb.configure(text=self.maps[y][x])                 lb.grid(row=y, column=x, ipadx=15, ipady=10, padx=1, pady=1)                                          def update(self):         for y in range(len(self.maps)):             for x in range(len(self.maps[0])):                 if Wednesday.time[(y,x)]:                     Wednesday.time[(y,x)] -=1                 else:                    Wednesday.hierarchy[(y,x)] = self.maps[y][x]                                      if not (y, x) in self.ban:                     bg = \"white\"                     if CHANGE_BG:                         bg = random.choice([\"yellow\", \"red\", \"white\", \"brown\", \"pink\"])                     lb = Label(text=\" \", background = bg)                     lb.configure(text=Wednesday.hierarchy[(y,x)])                     lb.grid(row=y, column=x, ipadx=15, ipady=10, padx=1, pady=1)                                 self.root.after(TIME, self.update)  class Base():     def __init__(self, root, color, node):         self.root = root         self.color = color         self.y = node[0]         self.x = node[1]         self.visit = {}         self.neighbor = {}         self.count = 0           def show(self, y, x, color):         lb = Label(text=\" \", background = color)         try:             lb.configure(text=Wednesday.hierarchy[(y,x)] )             lb.grid(row=self.y, column=self.x, ipadx=15, ipady=10, padx=1, pady=1)         except:             pass              def add_neighbor(self):         try:             self.neighbor[(self.y, self.x)] = Wednesday.neighbor[(self.y, self.x)]         except:             pass                   def choice(self, yx):         self.add_neighbor()         return random.choice(self.neighbor[yx])                  def move(self):              yx = self.choice((self.y, self.x))         self.redraw(yx)         self.count +=1        def redraw(self, yx):         self.show(self.y, self.x, 'white')           self.y = yx[0]         self.x = yx[1]         self.show(yx[0], yx[1], self.color)              def update(self):         self.move()            self.root.after(TIME, self.update)              def env(self):         return (self.color, (self.y, self.x))   class WhoBeats(Base):     def __init__(self, root, color, node, lenYX):         super().__init__(root, color, node)         self.lenYX = lenYX         self.balls = []      def choice(self, yx):         self.add_neighbor()                  if self.count % (self.lenYX[1] +PAUSE)  == 0:             y = yx[0] + random.choice([-1, 0, 1])             if y &lt; 0:                 y = 0             if y > self.lenYX[0] -1:                 y = self.lenYX[0] -1             dy = y-yx[0]             ball = Ball(root, \"blue\", (y, yx[1]), self.lenYX, dy)             self.balls.append(ball)             ball.update()          yx = list(random.choice(self.neighbor[yx]))         yx[1] = 0              return tuple(yx)              def get_balls(self):         for ball in self.balls:             pass         return self.balls   class Ball(Base):     def __init__(self, root, color, node, lenYX, dy):         super().__init__(root, color, node)         self.lenYX = lenYX         self.dy = dy      def choice(self, yx):         if BALL_CHANGE_BG:             self.color = random.choice([\"grey\", \"blue\"])         self.add_neighbor()                  if yx[0] &lt;= 0:             self.dy = 1         if yx[0] >= self.lenYX[0]-1:             self.dy = -1                   try:                if (yx[0] +self.dy, yx[1] + 1) in self.neighbor[yx]:                 yx = (yx[0] +self.dy, yx[1] + 1)              else:                 if yx[1]+1 >= self.lenYX[1]:                      yx = (yx[0], self.lenYX[1])                 else:                      v = []                     for i in self.neighbor[yx]:                          if not i in self.visit:                             self.visit[i] = 0                         v.append((i, self.visit[i]))                                           v.sort(key = lambda x: x[1], reverse = False)                     v = [i for i in v if v[0][1] == i[1]]                     v = random.choice(v)                     self.visit[v[0]] += 1                     yx = v[0]                     self.dy = random.choice([-1,1])         except:             pass                                return yx           class Who\u0421atches(Base):     def __init__(self, root, color, node, lenYX, whoBeats):         super().__init__(root, color, node)         self.lenYX = lenYX         self.whoBeats = whoBeats         self.win = 0                  self.routes = []         self.route = []         self.gf = [{}, {}]                  self.hdWC = Hd({})               def choice(self, yx):         self.add_neighbor()         self.neighbor[yx] = [x for x in self.neighbor[yx] if x[1] == self.lenYX[1]-1]                  dy = self.action()         if (yx[0] +dy, yx[1]) in self.neighbor[(yx[0], self.lenYX[1]-1)]:              hd = Hd({})             hdF = self.tuple_str((dy,0))             hdX = self.tuple_str(yx)             hdY = self.tuple_str((yx[0] +dy, yx[1]))             path = hd.get_yfx([hdX, hdY], [hdF, \"\"])             gn = hd.fORx(hd.flow(path), f=0)             self.hdWC.graph = hd.merge(self.hdWC.graph, gn)             print(\"\\nwho\u0421atches ku = \", self.hdWC.get_ku(self.hdWC.graph))             self.hdWC.show(self.hdWC.graph)              yx = (yx[0] +dy, self.lenYX[1]-1)                   self.winner()          return yx                       def action(self, choice = None):         if choice == None:             dy = random.choice([-1,0,1])         return dy                       def hypothesis(self, x_list, f = None):         if f ==  None:                       f_list = [\"f\"]*len(x_list)             return (f_list, x_list)         else:             f_list = x_list[:-1] #\u0434\u0435\u0439\u0441\u0432\u0438\u0435 = \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435             x_list = x_list[1:]               return (f_list, x_list)                  def tuple_str(self, v, convert = True):         if convert:             delimiter = ','             r = delimiter.join([str(x) for x in v])         else:             r = [ x for x in v.split(',')]         return r                   def winner(self):         balls = self.whoBeats.get_balls()          for i, ball in enumerate(balls):               if ball.env()[1][1] == 1:                 self.route = []                 self.route.append(ball.env()[1])             elif ball.env()[1][1] &lt; self.lenYX[1]-1:                 self.route.append(ball.env()[1])             else:                 self.route.append(ball.env()[1])                 if self.route not in self.routes:                     self.routes.append(self.route)             if self.x == ball.env()[1][1]:                 if self.y == ball.env()[1][0]:                     self.win +=1                 else:                     self.win -=1                 root.title(\"win = \" + str(self.win))                 self.whoBeats.balls.pop(i)                  if  self.routes:              hd = Hd({})              for x_list in self.routes:                 x_list = [self.tuple_str(x) for x in x_list]                 if HYPOTHESIS:                     f_list, x_list = self.hypothesis(x_list, f=True)                 else:                     f_list, x_list = self.hypothesis(x_list)                 path = hd.get_yfx(x_list, f_list)                 gn = hd.fORx(hd.flow(path), f=0)                 self.gf[0] = hd.merge(self.gf[0], gn)             ku = hd.get_ku(self.gf[0])             print(\"\\n\\nball  ku =\", ku)             hd.show(self.gf[0])             print(\"\\nroutes\")             t = [print(x) for x in self.routes]                    #--------- main ---------#     if __name__ == \"__main__\":      TIME = 500 #\u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f     PAUSE = 5     HYPOTHESIS = True          CHANGE_BG = False      BALL_CHANGE_BG = False      #CHANGE_BG = True     #BALL_CHANGE_BG = True           root = Tk()          #ban=[(1,3), (1,5), (1,6), (1,7), (0,7), (1,4), (2,4), (3,4), (4,3), (4,4), (5,6), (5,7), (4,7), (3,7), (2,7)]      #M=8; N=12          ban=[(1,3)]      #ban = []     M=3; N=6          maps = [[\"\" for i in range(N)] for j in range(M)]          def update():         #w1.update()         b1.update()         c1.update()              w1 = Wednesday(root, maps, ban)     b1 = WhoBeats(root, \"red\", (1,0), (M, N))     c1 = Who\u0421atches(root, \"green\", (1,N-1), (M, N), b1)          update()     root.mainloop()        <\/code><\/pre>\n<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"v-portal\" style=\"display:none;\"><\/div>\n<\/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\/post\/690518\/\"> https:\/\/habr.com\/ru\/post\/690518\/<\/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-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p><strong>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430<\/strong> \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u0435\u0439 &#8212; \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u0431\u0443\u0447\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0435\u0434\u0438\u043d\u0438\u0447\u043d\u044b\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445. \u0421\u043f\u0440\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u043c\u043e\u0436\u0435\u0442 \u0442\u0430\u0431\u043b\u0438\u0447\u043d\u043e\u0435 RL, \u043d\u043e \u043e\u0431\u0443\u0447\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0440\u0430\u0437\u043c\u0435\u0440\u043d\u043e\u0441\u0442\u0438 &#8212; \u0438\u043d\u0430\u044f \u043d\u0435\u0440\u0430\u0437\u0440\u0435\u0448\u0438\u043c\u0430\u044f \u0441\u0442\u043e\u0440\u043e\u043d\u0430 \u044d\u0442\u043e\u0439 \u043f\u0430\u0440\u0430\u0434\u0438\u0433\u043c\u044b <a href=\"https:\/\/habr.com\/ru\/post\/437020\/\" rel=\"noopener noreferrer nofollow\">https:\/\/habr.com\/ru\/post\/437020\/<\/a>. <strong>\u0420\u0435\u0448\u0435\u043d\u0438\u0435<\/strong> \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043e\u0434\u043d\u043e\u043c: \u0432\u0438\u0434\u0435\u0442\u044c \u043c\u0438\u0440 \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0447\u0435\u0441\u043a\u0438, \u0433\u0434\u0435 \u043a\u0430\u0436\u0434\u0430\u044f \u0435\u0433\u043e \u043f\u043e\u0434\u0447\u0430\u0441\u0442\u044c \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0430 \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0447\u0435\u0441\u043a\u0438.<\/p>\n<p>\u041a\u0430\u043a \u0437\u0434\u0435\u0441\u044c <a href=\"https:\/\/habr.com\/ru\/post\/420219\/\" rel=\"noopener noreferrer nofollow\">https:\/\/habr.com\/ru\/post\/420219\/<\/a> &#8212; \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0438\u0433\u0440\u044b \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0441\u043e\u043a\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0437\u0430 \u0441\u0447\u0435\u0442 \u0432\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043d\u0435\u0431\u043e\u0435\u0432\u043e\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f, \u043f\u043e\u0434\u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f\u043c\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0435 \u0438 \u043f\u0430\u0442\u0440\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435.<\/p>\n<figure class=\"full-width\"><figcaption>\u0425\u0430\u0431\u0440. \u041e\u0431\u0437\u043e\u0440 \u0442\u0435\u0445\u043d\u0438\u043a \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0438\u0433\u0440\u043e\u0432\u043e\u0433\u043e \u0418\u0418<\/figcaption><\/figure>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u0430\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u043c \u044d\u0442\u043e\u0442 \u043f\u043e\u0434\u0445\u043e\u0434. \u041d\u0430 \u044d\u0442\u043e\u0442 \u0441\u0447\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b \u0440\u0430\u0441\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u044f \u0412.\u0422\u0443\u0440\u0447\u0438\u043d\u0430<\/p>\n<figure class=\"full-width\"><figcaption>\u0422\u0443\u0440\u0447\u0438\u043d \/\/ \u0424\u0435\u043d\u043e\u043c\u0435\u043d \u043d\u0430\u0443\u043a\u0438. \u041a\u0438\u0431\u0435\u0440\u043d\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043a \u044d\u0432\u043e\u043b\u044e\u0446\u0438\u0438<\/figcaption><\/figure>\n<p>\u0418 \u0438\u0433\u0440\u0430, \u0438 \u043a\u0430\u0436\u0434\u043e\u0435 \u0438\u0437 \u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439, \u0438 \u043a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u043a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u0432 \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e. \u0422\u0430\u043a \u0432\u0438\u0434\u0435\u0442\u044c &#8212; \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0434\u043b\u044f \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0430. \u041d\u043e \u043d\u0435 \u0434\u043b\u044f \u043c\u0430\u0448\u0438\u043d\u044b.<\/p>\n<p>\u0412\u043e\u0442 \u0447\u0442\u043e \u043f\u0438\u0448\u0435\u0442 \u043e\u0431 \u044d\u0442\u043e\u043c \u0410. \u041a\u0430\u0440\u043f\u0430\u0442\u044b\u0439  <a href=\"https:\/\/habr.com\/ru\/post\/439674\/\" rel=\"noopener noreferrer nofollow\">https:\/\/habr.com\/ru\/post\/439674\/<\/a>. \u041a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u044b \u043f\u043e\u0439\u043c\u0435\u0442\u0435 \u00ab\u0445\u0438\u0442\u0440\u043e\u0441\u0442\u044c\u00bb, \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u044d\u0442\u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b, \u0432\u044b \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u043d\u044f\u0442\u044c \u0438\u0445 \u0441\u0438\u043b\u044c\u043d\u044b\u0435 \u0438 \u0441\u043b\u0430\u0431\u044b\u0435 \u0441\u0442\u043e\u0440\u043e\u043d\u044b. \u0412 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, <strong>\u044d\u0442\u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u0434\u0430\u043b\u0435\u043a\u043e \u043e\u0442\u0441\u0442\u0430\u044e\u0442 \u043e\u0442 \u043b\u044e\u0434\u0435\u0439 \u0432 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0438 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u044b\u0445 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0439 \u043e\u0431 \u0438\u0433\u0440\u0430\u0445<\/strong>.<\/p>\n<p>\u0422\u0430\u043a \u043a\u0430\u043a\u043e\u0432 \u043a\u0440\u0438\u0442\u0435\u0440\u0438\u0439 \u0432\u0438\u0434\u0435\u0442\u044c \u044d\u0442\u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438? \u041f\u043e\u043f\u044b\u0442\u043a\u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u044b \u0438 \u044f\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u0430\u043a \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u0432\u0435\u0440\u0442\u043a\u0438 &#8212; \u043b\u0438\u0448\u044c \u0447\u0430\u0441\u0442\u043d\u044b\u0439 \u0441\u043b\u0443\u0447\u0430\u0439 \u0431\u043e\u043b\u0435\u0435 \u0444\u0443\u043d\u0434\u0430\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0430.<\/p>\n<figure class=\"full-width\"><figcaption>\u0420. \u042d\u0448\u0431\u0438 .\/\/\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 \u043a\u0438\u0431\u0435\u0440\u043d\u0435\u0442\u0438\u043a\u0443 [\u0441\u0442\u0440 63]<\/figcaption><\/figure>\n<p>\u041f\u0443\u0441\u0442\u044c \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u043c\u044f\u0447\u0438\u043a (\u0441\u0438\u043d\u0438\u0439 \u043a\u0432\u0430\u0434\u0440\u0430\u0442) \u043a\u0430\u043a \u0432 \u0438\u0433\u0440\u0435 \u043f\u0438\u043d\u0433-\u043f\u043e\u043d\u0433, \u043b\u0435\u0442\u044f\u0449\u0438\u0439 \u043f\u043e \u043d\u0435\u043a\u043e\u0439 \u0442\u0440\u0430\u0435\u043a\u0442\u043e\u0440\u0438\u0438.<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u041a\u0430\u043a \u043c\u044b \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u043c, \u0447\u0442\u043e \u044d\u0442\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044c, \u0430 \u043d\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0441\u0438\u043d\u0438\u0445 \u043c\u044f\u0447\u0435\u0439 \u043f\u043e\u044f\u0432\u043b\u044f\u044e\u0449\u0438\u0445\u0441\u044f \u0438 \u0438\u0441\u0447\u0435\u0437\u0430\u044e\u0449\u0438\u0445 \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u0442\u043e\u0447\u043a\u0430\u0445 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430? \u041a\u043e\u043d\u0442\u0440\u0430\u0441\u0442 \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u0430 \u0441\u0438\u043d\u0438\u0439 \u0438 \u0431\u0435\u043b\u043e\u0433\u043e \u0444\u043e\u043d\u0430? \u0410 \u0435\u0441\u043b\u0438 \u044d\u0442\u043e\u0442 \u043f\u0440\u0435\u0434\u043c\u0435\u0442 \u0431\u0443\u0434\u0435\u0442 \u043c\u0435\u043d\u044f\u0442\u044c \u0446\u0432\u0435\u0442, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043d\u0430 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u0441\u0438\u043d\u0438\u0439, \u0441\u0435\u0440\u044b\u0439 (\u043a\u043e\u0434 \u043d\u0438\u0436\u0435, BALL_CHANGE_BG = True)? \u0412\u0440\u043e\u0434\u0435 \u043d\u0430 \u0444\u043e\u043d\u0435 \u0431\u0435\u043b\u043e\u0433\u043e \u0436\u0435. \u041d\u043e \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u0444\u043e\u043d\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u0446\u0432\u0435\u0442\u0430?<\/p>\n<p>\u0418\u0437 \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043e\u043a \u0432\u0438\u0434\u043d\u043e, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0447\u0442\u043e \u0438\u0437 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f (1,2) \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043a\u0430\u043a \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 (1,3), \u0442\u0430\u043a \u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f (2,3), (0,3). \u041f\u043e \u044d\u0442\u043e\u0439 \u043f\u0440\u0438\u0447\u0438\u043d\u0435 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e (\u0435\u0441\u043b\u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u044b \u0440\u0430\u0432\u043d\u043e\u0432\u0435\u0440\u043e\u044f\u0442\u043d\u044b) \u043f\u043e\u0439\u043c\u0430\u0442\u044c \u0441\u0438\u043d\u0438\u0439 \u043c\u044f\u0447\u0438\u043a \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f. \u0412\u044b\u0438\u0433\u0440\u044b\u0448 \u043d\u0435 \u0431\u043e\u043b\u0435\u0435 1\/3, \u0435\u0441\u043b\u0438 \u043e\u0441\u043d\u043e\u0432\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0435 \u0431\u0435\u0437 \u0443\u0447\u0435\u0442\u0430 \u043f\u0440\u0435\u0434\u0448\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439.<\/p>\n<p><strong>\u041c\u043e\u0436\u043d\u043e \u043f\u043e\u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u043d\u0430\u0439\u0442\u0438 \u0442\u0430\u043a\u043e\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0431\u044b \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u043b\u043e \u043a \u0436\u0435\u043b\u0430\u0435\u043c\u043e\u0439 \u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u043e\u0441\u0442\u0438.<\/strong> \u0418\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0435\u0434\u0448\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435. \u0422\u043e\u0433\u0434\u0430: (1,2) \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u0442 \u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u043e \u0432 (1,3) \u043f\u0440\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0438 (1,1); (1,2) \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 (2,3) \u043f\u0440\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0438 (0,1); (1,2) \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 (0,3) \u043f\u0440\u0438 (2,1).<\/p>\n<p>\u0412\u0441\u0435\u0433\u0434\u0430 \u043b\u0438 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u044b\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f, \u043f\u043e\u0434\u043e\u0431\u0440\u0430\u0432 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f? \u041d\u0435\u0442 \u043a\u043e\u043d\u0435\u0447\u043d\u043e. \u041d\u043e \u043a \u044d\u0442\u043e\u043c\u0443 \u043d\u0443\u0436\u043d\u043e \u0441\u0442\u0440\u0435\u043c\u0438\u0442\u0441\u044f. \u041d\u0438\u0436\u0435 4 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430.<\/p>\n<ol>\n<li>\n<p>\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e. \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043e\u043d\u043e \u043e\u0434\u043d\u043e (\u0443\u0441\u043b\u043e\u0432\u043d\u043e f). \u041a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u043e\u0441\u0442\u0438 0.6<\/p>\n<\/li>\n<li>\n<p>\u0412\u043d\u043e\u0441\u0438\u043c \u043d\u0435\u0443\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u043c\u0443\u044e \u043d\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u043e\u0442\u0441\u043a\u043e\u043a\u0430 \u043e\u0442 \u0447\u0435\u0440\u043d\u043e\u0433\u043e \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u0430. \u041a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u0431\u0443\u0434\u0435\u0442 \u043d\u0438\u0436\u0435.<\/p>\n<\/li>\n<li>\n<p>\u0412\u044b\u0431\u0440\u0430\u043d\u044b \u0432\u0435\u0440\u043d\u044b\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f. \u041a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u0435\u0434\u0438\u043d\u0438\u0446\u0430 (\u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u043e\u0441\u0442\u044c \u0441\u0442\u043e \u043f\u0440\u043e\u0446\u0435\u043d\u0442\u043e\u0432),. \u0422\u0435\u043f\u0435\u0440\u044c, \u0437\u043d\u0430\u044f \u0433\u0440\u0430\u0444 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432, \u0431\u0435\u0437\u043e\u0448\u0438\u0431\u043e\u0447\u043d\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u0443\u0434\u0430 \u043f\u0440\u0438\u043b\u0435\u0442\u0438\u0442 \u0441\u0438\u043d\u0438\u0439 \u043c\u044f\u0447.<\/p>\n<\/li>\n<li>\n<p>\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043d\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u043a \u0432\u0435\u0440\u043d\u044b\u043c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f\u043c. \u0418\u0437 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f (1.2) \u043e\u043d\u0430 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0430 \u0438\u0437-\u0437\u0430 \u0447\u0435\u0440\u043d\u043e\u0433\u043e \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u0430 (\u043d\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0439 \u043e\u0442\u0441\u043a\u043e\u043a)<\/p>\n<\/li>\n<\/ol>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0422\u0430\u043a \u043a\u0430\u043a \u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0437\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u044f\u0432\u043b\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u043a\u0430\u043a \u0432\u043b\u0438\u044f\u0442\u044c \u0434\u0440\u0443\u0433 \u043d\u0430 \u0434\u0440\u0443\u0433\u0430, \u0442\u0430\u043a \u0438 \u0431\u044b\u0442\u044c \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u044b\u0441\u0442\u0440\u043e\u0435\u043d\u044b?<\/p>\n<p>\u041d\u0438\u0436\u0435 \u043b\u0430\u0431\u0438\u0440\u0438\u043d\u0442 (\u041b) &#8212; \u044d\u0442\u043e \u043e\u0434\u043d\u043e \u0438\u0437 \u0441\u043c\u0435\u043d\u044f\u0435\u043c\u044b\u0445 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439 {11, 12, 14, 15} \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 {31, 32}.  \u0412 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043b\u0430\u0431\u0438\u0440\u0438\u043d\u0442\u0430 \u043a\u043b\u044e\u0447 (11) \u0442\u043e\u0436\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u043e \u0441\u043c\u0435\u043d\u043e\u0439 \u0441\u0432\u043e\u0438\u0445 \u043f\u043e\u0434\u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439 {45, 44, 41} \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 {35, 36, 34}. \u0418 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043b\u0430\u0431\u0438\u0440\u0438\u043d\u0442\u0430 \u0434\u0432\u0435\u0440\u044c (12) \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u043b\u044e\u0447\u043e\u043c (11). \u0423\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e \u0442\u043e\u0439 \u043f\u0440\u0438\u0447\u0438\u043d\u0435, \u0447\u0442\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043a\u043b\u044e\u0447\u0430 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f\u043c\u0438 \u0434\u043b\u044f \u0434\u0432\u0435\u0440\u0438. \u041a\u043e\u0433\u0434\u0430 \u043f\u043e\u0434\u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0434\u0432\u0435\u0440\u0438 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043e\u0442\u043a\u0440\u044b\u0442\u043e (54), \u0430\u0433\u0435\u043d\u0442 \u043c\u043e\u0436\u0435\u0442 \u0438\u0437 \u043b\u0430\u0431\u0438\u0440\u0438\u043d\u0442\u0430 (\u041b) \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u0432 \u043a\u043e\u043c\u043d\u0430\u0442\u0443 (\u043a\u043c) \u0438 \u043d\u0430\u0439\u0442\u0438 \u043a\u043b\u0430\u0434 (63). <strong>\u0412 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0432\u0437\u044f\u0442\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u043f\u043e\u0438\u0441\u043a \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0443\u0442\u0438 \u043c\u043e\u0436\u0435\u0442 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u043c\u0438 RL.<\/strong><\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u041d\u043e! <strong>\u0412 \u043d\u0430\u0447\u0430\u043b\u0435 \u0438\u0433\u0440\u044b \u0430\u0433\u0435\u043d\u0442 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0432\u0435\u0434\u0430\u0435\u0442<\/strong>, \u0447\u0442\u043e \u0435\u0441\u0442\u044c \u043a\u043b\u0430\u0434. \u041d\u0435 \u0432\u0435\u0434\u0430\u0435\u0442 \u0447\u0442\u043e \u0435\u0441\u0442\u044c \u044d\u0442\u0438  \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 (\u043b\u0430\u0431\u0438\u0440\u0438\u043d\u0442, \u043a\u043b\u044e\u0447, \u0434\u0432\u0435\u0440, \u043a\u043e\u043c\u043d\u0430\u0442\u0430). \u041e\u043d \u043b\u0438\u0448\u044c \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u0442 \u043f\u043e\u0442\u043e\u043a \u0434\u0430\u043d\u043d\u044b\u0445. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 [32, 52, .., 52, ..], \u0437\u0430\u0442\u0435\u043c [.., .., 44, .. 36] \u0438 \u0442.\u0434. \u0420\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442 <strong>\u0440\u0430\u0437\u043d\u044b\u0435 \u0433\u0438\u043f\u043e\u0442\u0435\u0437\u044b, \u0441\u0442\u0440\u0435\u043c\u044f\u0441\u044c \u043c\u0430\u043a\u0441\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u043e\u0441\u0442\u0438<\/strong>. \u0422\u0430\u043a, \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u0432 \u0447\u0435\u0440\u043d\u0443\u044e \u0433\u0438\u043f\u043e\u0442\u0435\u0437\u0443, \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u043a \u0432\u044b\u0432\u043e\u0434\u0443, \u0447\u0442\u043e \u0435\u0441\u0442\u044c \u043d\u0435\u043a\u0430\u044f \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044c (11), \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f\u043c\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f {45, 44, 41}. \u041e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u0442\u0430\u043a\u0436\u0435 \u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 (12). \u0418 \u0434\u0430\u043b\u0435\u0435 \u0443\u0436\u0435 \u043e \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 (\u041b) \u0442\u043e\u0436\u0435 \u043c\u044b\u0441\u043b\u0438\u0442 \u043a\u0430\u043a \u043e \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u044b \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u044b. \u041f\u043e \u0442\u043e\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043f\u0440\u0438\u0447\u0438\u043d\u0435, \u0447\u0442\u043e \u0434\u043b\u044f \u043a\u0440\u0430\u0441\u043d\u043e\u0439 \u0433\u0438\u043f\u043e\u0442\u0435\u0437\u044b (\u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u043f\u043e\u043d\u044f\u0442\u044c \u0447\u0442\u043e \u0435\u0441\u0442\u044c \u043b\u0430\u0431\u0438\u0440\u0438\u043d\u0442) \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f {44, 41, 45} \u0437\u0430\u043c\u0435\u043d\u044f\u0442\u0441\u044f \u043d\u0430 (11), \u0430 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f {52, 53, 54} \u0437\u0430\u043c\u0435\u043d\u044f\u0442\u0441\u044f \u043d\u0430 (12).<\/p>\n<p>\u041f\u043e \u0422\u0443\u0440\u0447\u0438\u043d\u0443, <strong>(11) \u0438 (12) \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430\u043c\u0438 \u043d\u0438\u0436\u043d\u0435\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f \u0434\u043b\u044f \u043a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430 (\u041b) \u0431\u043e\u043b\u0435\u0435 \u0432\u0435\u0440\u0445\u043d\u0435\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f, \u043e\u0431\u0440\u0430\u0437\u0443\u044f \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u044e \u043f\u043e\u043d\u044f\u0442\u0438\u0439<\/strong>.<\/p>\n<p>\u041d\u0438\u0436\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u043a\u043e\u0434 \u0434\u043b\u044f \u0438\u0433\u0440\u044b \u0432 \u043f\u043e\u043d\u0433, \u043d\u043e \u0431\u0435\u0437 \u0447\u0430\u0441\u0442\u0438 \u043c\u0430\u043a\u0441\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u043e\u0441\u0442\u0438 \u0438 \u0431\u0435\u0437 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0430 \u043f\u043e \u0433\u0440\u0430\u0444\u0443 (\u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u043c\u044f\u0447\u0430, \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u043b\u043e\u0432\u044f\u0449\u0435\u0433\u043e \u043c\u044f\u0447) . \u0411\u0435\u0437 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0435\u0432.<\/p>\n<pre><code class=\"python\"># \u0412\u044b\u0440\u0430\u0437\u0438\u0442\u044c \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0447\u0435\u0441\u043a\u0438: \u0432\u043e\u043f\u0440\u043e\u0441 \u043a\u0430\u043a \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0445\u0430\u043c\u0435\u043b\u0435\u043d\u0430 from tkinter import * import random   class Hd(): def __init__(self, graph): self.graph = graph  def rnd_get(self, v): return random.choice(v.split(\"|\"))  def show(self, graph): for x in graph: print(x, \":\", graph[x])  def get_ku(self, graph): '''return (\u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u043e\u0441\u0442\u0438, \u0440\u0430\u0437\u043c\u0435\u0440)''' n = 0; u = 0 for x in graph: for y in graph[x]: if y[0]: u += y[0].count(\"|\") n += 1 if n != 0: return (round(1- u\/(n+u), 3), n)  else: return (None, None)  def get_states(self, x, f_list = [], n=11): x_list = [] x_list.append(x)  if f_list != []: for f in f_list: xf = [xf for xf in g[x] if xf[1] == f] if not xf: x_list.append(''); f_list[len(x_list)-2] = '' return (x_list, f_list[:len(x_list)-1]) x = self.rnd_get(xf[0][0]) x_list.append(x) else: for i in range(n): if not self.graph[x]: x_list.append(''); f_list.append('') break t = random.choice(self.graph[x]) f = t[1] x = random.choice(t[0].split('|')) x_list.append(x); f_list.append(f)  if len(f_list) == len(x_list) -1: return (x_list, f_list) else: return ([], [])  def get_yfx(self, f_list, x_list, t = True): if len(x_list) == len(f_list): x_list.append('')  path = [] for i in range(len(f_list)): path.append((x_list[i], f_list[i], x_list[i+1]))  if t: return path #(x, f, next_x) else: p = [] for xfy in path: if xfy[2] != '': p.append(xfy[2]+'='+xfy[1]+'('+xfy[0]+')') return p  def flow(self, path, rnd=False): if not path:  return [] fl = [] for p in path: if not rnd: fl.append(p[:-1]) else: pr = list(p[:-1]) #random.shuffle(pr) fl.append(tuple(pr)) fl.append(pr) return fl  def fORx(self, flow, f=0): '''index: f=0, x=1 or x=0, f=1''' def add_empty(): empty = [] for k in graph: for x in graph[k]: z = list(set(x[0].split('|')) - set(list(graph.keys()))) if z: empty.append(z[0]) return empty  if not flow: return []  graph = {} fli = flow[0]  for t in flow[1:]: if f == 0: if fli[1] not in graph: graph[fli[1]] = [] r = [(i, xf) for i,xf in enumerate(graph[fli[1]]) if xf[1] == fli[0]] if r: if t[1] not in r[0][1][0]: x_new = r[0][1][0] + \"|\" + t[1] if x_new != '': graph[fli[1]][r[0][0]] = (x_new, r[0][1][1]) if not r: if t[1] != '': graph[fli[1]].append((t[1], fli[0]))  if f == 1: if fli[0] not in graph: graph[fli[0]] = [] r = [(i, xf) for i,xf in enumerate(graph[fli[0]]) if xf[1] == fli[1]] if r: if t[0] not in r[0][1][0]: x_new = r[0][1][0] + \"|\" + t[0] if x_new != '': graph[fli[0]][r[0][0]] = (x_new, r[0][1][1]) if not r: if t[0] != '': graph[fli[0]].append((t[0], fli[1])) fli = t  em = add_empty() if em: graph[em[0]] = [] return graph  def merge(self, g1, g2): def find_index(): for i in range(len(graph[k])): if graph[k][i][1] == x[1]: return i return -1  all_keys = set(list(g1.keys()) + list(g2.keys())) graph = {}  for k in all_keys: if k not in graph:  if k in g1: graph[k] = g1[k] else: graph[k] = g2[k]  if k in g2: for x in g2[k]: ind = find_index() if ind != -1: if x[0] != []: t1 = x[0].split('|') if graph[k][ind] != -1: t2 = graph[k][ind][0].split('|') z = \"|\".join(set(t1+t2)) #xf = [z, graph[k][ind][1]] xf = (z, graph[k][ind][1]) graph[k][ind] = xf else: graph[k].append(x)  return graph   class Wednesday():     def __init__(self, root, maps, ban):         self.root = root         self.maps = maps         self.ban = ban         Wednesday.time = {}         Wednesday.hierarchy = {}         Wednesday.neighbor = {}                    self.init_3_dict()              def init_3_dict(self):         def is_en(yx):             if yx[0] &lt; 0 or yx[0] > len(self.maps)-1: return             if yx[1] &lt; 0 or yx[1] > len(self.maps[0])-1: return             if yx in self.ban: return             return True                      for y in range(len(self.maps)):             for x in range(len(self.maps[0])):                 Wednesday.hierarchy[(y,x)] = self.maps[y][x]                                  n = []                 if is_en((y-1,x)):                     n.append((y-1,x))                 if is_en((y+1,x)):                     n.append((y+1,x))                 if is_en((y,x-1)):                     n.append((y,x-1))                 if is_en((y,x+1)):                     n.append((y,x+1))                  if is_en((y-1,x-1)):                     n.append((y-1,x-1))                 if is_en((y-1,x+1)):                     n.append((y-1,x+1))                 if is_en((y+1,x+1)):                     n.append((y+1,x+1))                 if is_en((y+1,x-1)):                     n.append((y+1,x-1))                                      Wednesday.neighbor[(y,x)] = n                                  Wednesday.time[(y,x)] = 0                 if (y, x) in self.ban:                     lb = Label(text=\" \", background = 'black')                     lb.configure(text=self.maps[y][x])                 else:                     bg = \"white\"                     if CHANGE_BG:                         bg = random.choice([\"yellow\", \"red\", \"white\", \"brown\", \"pink\"])                     lb = Label(text=\" \", background = bg)                     lb.configure(text=self.maps[y][x])                 lb.grid(row=y, column=x, ipadx=15, ipady=10, padx=1, pady=1)                                          def update(self):         for y in range(len(self.maps)):             for x in<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\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-338962","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/338962","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=338962"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/338962\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=338962"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=338962"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=338962"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}