{"id":489428,"date":"2026-08-01T18:19:14","date_gmt":"2026-08-01T18:19:14","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=489428"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=489428","title":{"rendered":"\u0421\u0442\u043e\u0445\u0430\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043a\u043b\u0435\u0442\u043e\u0447\u043d\u044b\u0439 \u0430\u0432\u0442\u043e\u043c\u0430\u0442 \u043d\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0442\u0438\u043f\u043e\u0432"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0410\u043b\u0433\u043e\u0440\u0438<strong>\u0444<\/strong>\u043c \u041c\u0430\u0440\u043a\u043e\u0432\u0430 \u0438\u043b\u0438 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u041c\u0430\u0440\u043a\u043e\u0432\u0430 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0444\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u043d\u0438\u044f \u0441\u0442\u0440\u043e\u043a. \u041e\u043d\u0430 \u0441\u043d\u043e\u0432\u0430 \u0438 \u0441\u043d\u043e\u0432\u0430 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442 \u0441\u043b\u043e\u0432\u0430 \u043f\u043e \u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0435\u043d\u043d\u043e\u043c\u0443 \u0441\u043f\u0438\u0441\u043a\u0443 \u043f\u0440\u0430\u0432\u0438\u043b, \u043f\u043e\u043a\u0430 \u043d\u0435 \u0437\u0430\u043a\u043e\u043d\u0447\u0430\u0442\u0441\u044f \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0438\u043b\u0438 \u043f\u043e\u043f\u0430\u0434\u0435\u0442\u0441\u044f \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u0430\u044f \u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u0443\u044e\u0449\u0430\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c. \u041d\u0410\u041c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u043d\u044b\u043c \u043f\u043e \u0422\u044c\u044e\u0440\u0438\u043d\u0433\u0443 \u0438 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u0445\u043e\u0436 \u043d\u0430 \u0435\u0433\u043e \u043c\u0430\u0448\u0438\u043d\u0443. \u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435, \u043a \u0446\u0435\u043f\u044f\u043c \u041c\u0430\u0440\u043a\u043e\u0432\u0430 \u044d\u0442\u043e \u043d\u0435 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f: \u0432 \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u043c\u0435 \u043d\u0435\u0442 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u0435\u0439 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/95\/e3\/b4\/95e3b4ed61eaceae2a262a0a95bfe667.gif\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/webt\/95\/e3\/b4\/95e3b4ed61eaceae2a262a0a95bfe667.gif 780w,&#10;       https:\/\/habrastorage.org\/webt\/95\/e3\/b4\/95e3b4ed61eaceae2a262a0a95bfe667.gif 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u042d\u0442\u0430 \u043a\u0440\u043e\u0448\u0435\u0447\u043d\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0432\u044b\u0440\u0430\u0437\u0438\u0442\u0435\u043b\u044c\u043d\u0430 \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0445 (\u043d\u0435 \u0418\u0418!) \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 <span class=\"habrahidden\">\u043f\u0440\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0439<\/span>. \u0412\u0441\u0451, \u0447\u0442\u043e \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0430\u0432\u0438\u043b \u0437\u0430\u043c\u0435\u043d \u0434\u043b\u044f \u043c\u0435\u043d\u044f \u0441\u0440\u0430\u0437\u0443 \u043d\u0430\u0432\u0435\u0432\u0430\u0435\u0442 \u043c\u044b\u0441\u043b\u0438 \u043e \u042f\u041f, \u0433\u0434\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u043e \u0432\u043e\u043a\u0440\u0443\u0433 \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0438 \u0437\u0430\u043c\u0435\u043d\u044b \u0438\u0445 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u043c\u0438 &#8212; Wolfram Language. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043a\u0442\u043e-\u0442\u043e \u0438\u0437 \u0432\u0430\u0441 \u0435\u0433\u043e \u0437\u043d\u0430\u0435\u0442 \u043f\u043e \u043f\u0440\u043e\u043f\u0440\u0438\u0435\u0442\u0430\u0440\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 Mathematica, \u043d\u043e \u0441 2019 \u0433\u043e\u0434\u0430 \u0435\u043c\u0443 \u043c\u043e\u0436\u043d\u043e \u043a\u0443\u0448\u0430\u0442\u044c \u043a\u0430\u043a \u043f\u0438\u0442\u043e\u043d \u0438\u0437 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 &#8212; <a href=\"https:\/\/www.wolfram.com\/engine\/\" rel=\"noopener noreferrer nofollow\">Freeware Wolfram Engine<\/a>, \u0430 \u0441 2024 \u0438 <a href=\"https:\/\/github.com\/WLJSTeam\/wolfram-js-frontend\" rel=\"noopener noreferrer nofollow\">\u0441\u0430\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0431\u043b\u043e\u043a\u043d\u043e\u0442\u043e\u0432<\/a> \u0432 \u0432\u0438\u0434\u0435 FOSS \u0438\u043b\u0438 <a href=\"https:\/\/marketplace.visualstudio.com\/items?itemName=njpipeorgan.wolfram-language-notebook\" rel=\"noopener noreferrer nofollow\">\u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u043a VSCode<\/a>.<\/p>\n<p>\u041d\u0430 \u0425\u0430\u0431\u0440\u0435 \u0443\u0436\u0435 \u043f\u0438\u0441\u0430\u043b\u0438 \u043f\u0440\u043e \u0430\u043b\u0433\u043e\u0440\u0438<strong>\u0444<\/strong>\u043c\u044b, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0438\u0445 \u0441\u0442\u043e\u0445\u0430\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043e\u0431\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0438 \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0440\u043e\u0448\u043e<\/p>\n<ul>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/682972\/\" rel=\"noopener noreferrer nofollow\">\u041d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u041c\u0430\u0440\u043a\u043e\u0432\u0430 \u043a\u0430\u043a \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u044f\u0437\u044b\u043a\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/721314\/\" rel=\"noopener noreferrer nofollow\">\u0421\u0442\u043e\u0445\u0430\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u044f\u0437\u044b\u043a \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 \u041c\u0430\u0440\u043a\u043e\u0432\u0430<\/a><\/p>\n<\/li>\n<\/ul>\n<p>\u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u044d\u0442\u043e\u0442 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u0438 \u043f\u043e\u0441\u043b\u0443\u0436\u0438\u043b \u0432\u0434\u043e\u0445\u043d\u043e\u0432\u0435\u043d\u0438\u0435\u043c \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438. ~\u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0438 2 \u043a\u043e\u043f\u0435\u0439\u043a\u0438~ \u041e\u0434\u043d\u0430\u043a\u043e \u0442\u0435\u043c\u0430 \u0438\u043d\u0444\u0435\u0440\u0435\u043d\u0441\u0430 \u0438 \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u0430\u0432\u0438\u043b \u043d\u0435 \u0431\u044b\u043b\u0430 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0440\u0430\u0441\u043a\u0440\u044b\u0442\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0437\u0434\u0435\u0441\u044c \u043c\u044b \u0435\u0451 \u043e\u0442\u0440\u0435\u0432\u0435\u0440\u0441\u0438\u043c\u2026<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/\/post_images\/acf\/99b\/8eb\/acf99b8ebf85c43d8c4506a9c507bd62.png\" alt=\"\u0410\u043d\u0434\u0440\u0435\u0439 \u0410\u043d\u0434\u0440\u0435\u0435\u0432\u0438\u0447 \u041c\u0430\u0440\u043a\u043e\u0432-\u043c\u043b\u0430\u0434\u0448\u0438\u0439\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/\/post_images\/acf\/99b\/8eb\/acf99b8ebf85c43d8c4506a9c507bd62.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/\/post_images\/acf\/99b\/8eb\/acf99b8ebf85c43d8c4506a9c507bd62.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0410\u043d\u0434\u0440\u0435\u0439 \u0410\u043d\u0434\u0440\u0435\u0435\u0432\u0438\u0447 \u041c\u0430\u0440\u043a\u043e\u0432-\u043c\u043b\u0430\u0434\u0448\u0438\u0439<\/figcaption><\/div>\n<\/figure>\n<p>\u0412 \u043a\u043e\u043d\u0446\u0435 1940-\u0445 \u041c\u0430\u0440\u043a\u043e\u0432 (\u041c\u043b\u0430\u0434\u0448\u0438\u0439) \u0441\u0444\u043e\u0440\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u043b \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b (\u0430\u043b\u0433\u043e\u0440\u0438\u0444\u043c\u044b), \u0438\u0441\u0441\u043b\u0435\u0434\u0443\u044f \u0444\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u043d\u044f\u0442\u0438\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u043c\u043e\u0441\u0442\u0438. \u0423 \u0430\u043b\u0433\u043e\u0440\u0438\u0444\u043c\u0430 \u0435\u0441\u0442\u044c \u0430\u043b\u0444\u0430\u0432\u0438\u0442 (\u043f\u0443\u0441\u0442\u044c \u0431\u0443\u0434\u0435\u0442 ABC) \u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0435\u043d\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u043f\u0440\u0430\u0432\u0438\u043b \u0437\u0430\u043c\u0435\u043d\u044b:<\/p>\n<pre><code>A -&gt; BB -&gt; CEnd<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:87px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u0448\u0430\u0433\u0435 \u043c\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0441\u0432\u0435\u0440\u0445\u0443 \u0432\u043d\u0438\u0437, \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u043f\u0435\u0440\u0432\u043e\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u043e\u0435, \u0437\u0430\u043c\u0435\u043d\u044f\u0435\u0442 \u0435\u0433\u043e \u0441\u0430\u043c\u043e\u0435 \u043b\u0435\u0432\u043e\u0435 \u0432\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0435 \u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0437\u0430\u043d\u043e\u0432\u043e<\/p>\n<pre><code>ABBABBBABBBBCBBBCCBBCCCBCCCC<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u0440\u043e\u0441\u0442\u043e, \u0432\u0435\u0440\u043d\u043e? \u0420\u0430\u0431\u043e\u0442\u0430 \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u044e\u0449\u0435\u0433\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u0430, \u043b\u0438\u0431\u043e \u043a\u043e\u0433\u0434\u0430 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u043f\u0440\u0430\u0432\u0438\u043b \u043d\u0435 \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c. \u041d\u043e \u0442\u0430\u043a\u0430\u044f \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u0446\u0435\u043f\u043e\u0447\u043a\u0430 \u0437\u0430\u043c\u0435\u043d \u043d\u0435 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0433\u043b\u0430\u0432\u043d\u043e\u0433\u043e \u2013 \u0442\u0430\u043a\u0438\u043c\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u0430\u043c\u0438 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435. \u0412\u043e\u0437\u044c\u043c\u0451\u043c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u0430:<\/p>\n<pre><code>BA -&gt; AB<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0422\u043e\u0433\u0434\u0430 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c<\/p>\n<pre><code>BBABABABBAABBBAABBABABABBAABBB<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0438\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438.<\/p>\n<h3>\u0412\u043e\u0437\u043d\u044f \u0441\u043e \u0441\u0442\u0440\u043e\u0447\u043a\u0430\u043c\u0438<\/h3>\n<p>\u0412 Wolfram Language \u0434\u043b\u044f \u0441\u0442\u0440\u043e\u043a \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0443\u0434\u043e\u0431\u043d\u044b\u0435 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430 \u0437\u0430\u043c\u0435\u043d\u044b \u043f\u043e\u0434\u0441\u0442\u0440\u043e\u043a &#8212; <code>StringReplace<\/code>. \u041d\u043e \u0435\u0433\u043e \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0430 \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u043e\u0434\u043d\u043e\u043c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c \u043c\u0435\u0441\u0442\u0435: \u043c\u0430\u0440\u043a\u043e\u0432\u0441\u043a\u0438\u0439 \u0448\u0430\u0433 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442 \u043f\u0435\u0440\u0432\u043e\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u043e\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0440\u043e\u0432\u043d\u043e \u043e\u0434\u043d\u0443 \u0437\u0430\u043c\u0435\u043d\u0443. \u0421\u043f\u0438\u0441\u043e\u043a \u043f\u0440\u0430\u0432\u0438\u043b \u0432 <code>StringReplace<\/code> &#8212; \u044d\u0442\u043e \u043d\u0430\u0431\u043e\u0440 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432 \u0437\u0430 \u043e\u0434\u0438\u043d \u043f\u0440\u043e\u0445\u043e\u0434.<\/p>\n<p>\u0412 \u043f\u0435\u0440\u0432\u044b\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445 \u043c\u044b \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u044e\u0449\u0438\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0438 \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u043e \u043d\u0438 \u043e\u0434\u043d\u043e.<\/p>\n<pre><code class=\"haskell\">StringReplace[\"AAA\", {\"A\" -&gt; \"B\", \"B\" -&gt; \"C\"}]<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<pre><code>\"BBB\"<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043e\u0436\u0438\u0434\u0430\u0442\u044c, \u0447\u0442\u043e \u0441\u043d\u0430\u0447\u0430\u043b\u0430 A \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u044f\u0442\u0441\u044f \u0432 B, \u0430 \u0437\u0430\u0442\u0435\u043c \u044d\u0442\u0438 B \u0432 \u0442\u043e\u043c \u0436\u0435 \u0432\u044b\u0437\u043e\u0432\u0435 \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u044f\u0442\u0441\u044f \u0432 C. \u041d\u043e \u043d\u043e\u0432\u044b\u0435 B \u0443\u0436\u0435 \u043d\u0435 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0432\u0442\u043e\u0440\u044b\u043c \u043f\u0440\u0430\u0432\u0438\u043b\u043e\u043c. \u041d\u0443\u0436\u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0430\u0445\u043e\u0434\u0438\u0442 \u043f\u0435\u0440\u0432\u043e\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0435\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u0437\u0430\u043c\u0435\u043d\u044f\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0433\u043e \u043b\u0435\u0432\u043e\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435 \u0438 \u0437\u0430\u0442\u0435\u043c \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441<\/p>\n<pre><code class=\"haskell\">ClearAll[markovStep];markovStep[rules_][s_String] := Module[{rule},  rule = SelectFirst[    rules,    StringContainsQ[s, First[#]] &amp;,    Missing[\"NotFound\"]  ];  If[MissingQ[rule], s, StringReplace[s, rule, 1]]];rules = {\"A\" -&gt; \"B\", \"B\" -&gt; \"C\"};NestWhileList[markovStep[rules], \"AAA\", UnsameQ, 2, 12]<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0421\u043c\u043e\u0442\u0440\u0438\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442<\/p>\n<pre><code>{\"BAA\", \"CAA\", \"CBA\", \"CCA\", \"CCB\", \"CCC\", \"CCC\", \"CCC\"} <\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><code>SelectFirst<\/code> \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 \u043f\u0440\u0430\u0432\u0438\u043b, \u0430 \u0442\u0440\u0435\u0442\u0438\u0439 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 <code>StringReplace<\/code> \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u0435\u0442 \u0437\u0430\u043c\u0435\u043d\u0443 \u043e\u0434\u043d\u0438\u043c \u043b\u0435\u0432\u044b\u043c \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435\u043c. <code>NestWhileList<\/code> \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0435 \u0441\u043b\u043e\u0432\u0430 \u0438 \u043f\u0440\u0435\u043a\u0440\u0430\u0449\u0430\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0443, \u043a\u043e\u0433\u0434\u0430 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 \u0448\u0430\u0433 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043c\u0435\u043d\u044f\u0435\u0442. \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0447\u0438\u0441\u043b\u043e\u0432\u043e\u0439 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 &#8212; \u043f\u0440\u0435\u0434\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u0435\u043b\u044c \u0434\u043b\u044f \u0441\u0438\u0441\u0442\u0435\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u044e\u0442\u0441\u044f.<\/p>\n<p>\u0421 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u043f\u0440\u0430\u0432\u0438\u043b\u043e\u043c BA \u2192 AB \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u0435 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u043d\u0438\u0435 \u0432\u0435\u0434\u0451\u0442 \u0441\u0435\u0431\u044f \u043a\u0430\u043a \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430 \u043f\u0443\u0437\u044b\u0440\u044c\u043a\u043e\u043c: \u043a\u0430\u0436\u0434\u044b\u0439 \u0448\u0430\u0433 \u0441\u0434\u0432\u0438\u0433\u0430\u0435\u0442 \u043e\u0434\u043d\u0443 B \u0432\u043f\u0440\u0430\u0432\u043e.<\/p>\n<pre><code class=\"haskell\">rules = {\"BA\" -&gt; \"AB\"};NestWhileList[markovStep[rules], \"BABABA\", UnsameQ, 2, 20]<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<pre><code>{\"ABBABA\", \"ABABBA\", \"AABBBA\", \"AABBAB\", \"AABABB\", \"AAABBB\"}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0422\u0440\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u043d\u0438\u0436\u0435 \u0443\u0436\u0435 \u043e\u0431\u0440\u0430\u0437\u0443\u044e\u0442 \u0446\u0438\u043a\u043b, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u0447\u0438\u0441\u043b\u0430 \u0448\u0430\u0433\u043e\u0432 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u043a\u0441\u0442\u0430\u0442\u0438<\/p>\n<pre><code class=\"haskell\">rules = {  \"BA\" -&gt; \"AB\",  \"BB\" -&gt; \"AA\",  \"A\" -&gt; \"B\"};NestList[markovStep[rules], \"AAA\", 12]<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<pre><code>{\"AAA\",\"AAA\",\"BAA\",\"ABA\",\"ABA\",\"BBA\",\"BAB\",\"BAB\",\"BBB\"}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<h3>\u041e\u0442 \u0441\u0442\u0440\u043e\u043a \u043a \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u043c<\/h3>\n<p>\u0421\u0442\u0440\u043e\u043a\u0438 \u0437\u0434\u0435\u0441\u044c \u043d\u0443\u0436\u043d\u044b \u0431\u044b\u043b\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043d\u0430 \u043d\u0438\u0445 \u0445\u043e\u0440\u043e\u0448\u043e \u0432\u0438\u0434\u043d\u043e \u043c\u0435\u0445\u0430\u043d\u0438\u043a\u0443 \u0438 \u0431\u043b\u0438\u0437\u043a\u043e \u043a \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0442\u0440\u0430\u043a\u0442\u043e\u0432\u043a\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0444\u043c\u043e\u0432. \u041f\u0440\u0430\u0432\u0438\u043b\u0430 Wolfram Language \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0448\u0438\u0440\u0435: \u043e\u043d\u0438 \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u044e\u0442 \u043b\u044e\u0431\u044b\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f: \u0447\u0438\u0441\u043b\u0430, \u0441\u043f\u0438\u0441\u043a\u0438, \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f, \u0446\u0432\u0435\u0442\u0430, \u0433\u0440\u0430\u0444\u044b \u0438 \u043b\u044e\u0431\u0443\u044e \u0434\u0440\u0443\u0433\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443. \u0412 \u044d\u0442\u043e\u043c \u0441\u043c\u044b\u0441\u043b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438 \u043a\u043e\u0434 &#8212; \u044d\u0442\u043e \u043e\u0434\u043d\u043e \u0438 \u0442\u043e \u0436\u0435.<\/p>\n<p>\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0443\u0436\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0430\u0432\u0438\u043b\u043e\u043c:<\/p>\n<pre><code class=\"haskell\">f[x_] := x + 1DownValues[f]<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<pre><code>{HoldPattern[f[x_]] :&gt; x + 1}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0412 \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u043e\u0439 \u0442\u0435\u0440\u043c\u0438\u043d\u043e\u043b\u043e\u0433\u0438\u0438 \u044d\u0442\u043e \u043e\u0431\u044b\u0447\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f<\/p>\n<pre><code class=\"haskell\">f[3]f[Red]<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<pre><code>41 + RGBColor[1,0,0]<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0427\u0442\u0435\u043d\u0438\u0435 \u0436\u0435 \u0442\u0430\u043a\u043e\u0435: \u043a\u043e\u0433\u0434\u0430 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u043f\u043e\u0434 <code>f[x_]<\/code>, \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0435\u0433\u043e \u043d\u0430 <code>x + 1<\/code>. \u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u043e\u0431\u0440\u0430\u0437\u0446\u0430 <code>x_<\/code> \u0441\u0432\u044f\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0439 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 \u0438 \u0434\u0435\u043b\u0430\u0435\u0442 \u0435\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u043c \u0441\u043f\u0440\u0430\u0432\u0430.<\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u043e\u0432<\/p>\n<pre><code class=\"haskell\">_        (* \u043e\u0434\u043d\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435  aka any *)__       (* \u043e\u0434\u043d\u043e \u0438\u043b\u0438 \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439 *)___      (* \u043d\u043e\u043b\u044c \u0438\u043b\u0438 \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439 *)_Integer (* \u043e\u0434\u043d\u043e \u0446\u0435\u043b\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043e\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435  *){_, _}   (* \u0441\u043f\u0438\u0441\u043e\u043a \u0440\u043e\u0432\u043d\u043e \u0438\u0437 \u0434\u0432\u0443\u0445 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439 *)3          (* \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0438\u0441\u043b\u043e 3 *)_?(Mod[#,2]==0&amp;).   (* \u0432\u0441\u0435 \u0447\u0438\u0441\u043b\u0430 \u0434\u0435\u043b\u0438\u043c\u044b\u0435 \u043d\u0430 2 \u0431\u0435\u0437 \u043e\u0441\u0442\u0430\u0442\u043a\u0430 *)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u0440\u044f\u043c\u044b\u0435 \u0438 \u043e\u0442\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043c\u043e\u0433\u0443\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043a\u0430\u043a \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u043e\u0435 \u0430\u0441\u0441\u043e\u0446\u0438\u0430\u0442\u0438\u0432\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435:<\/p>\n<pre><code class=\"haskell\">h[_] = Missing[];setHash[key_, value_] := h[key] = value;getHash[key_] := h[key];getHash[31]setHash[31, Red];getHash[31]getHash[32]<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<pre><code>Missing[]RedRedMissing[]<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 <code>h[31]<\/code> \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0438\u043c\u0435\u0435\u0442 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 \u043d\u0430\u0434 \u043e\u0431\u0449\u0438\u043c <code>h[_]<\/code>.<\/p>\n<h3>\u041c\u0430\u0448\u0438\u043d\u0430 \u0437\u0430\u043c\u0435\u043d \u043d\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f\u0445<\/h3>\n<p>\u0412\u0435\u0440\u043d\u0451\u043c\u0441\u044f \u043a \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0435, \u043d\u043e \u0437\u0430\u043c\u0435\u043d\u0438\u043c \u0441\u0438\u043c\u0432\u043e\u043b\u044b \u0446\u0432\u0435\u0442\u0430\u043c\u0438 (\u043f\u043e\u0447\u0435\u043c\u0443 \u0431\u044b \u0438 \u043d\u0435\u0442). \u041f\u0440\u0430\u0432\u0438\u043b\u043e Blue, Red \u2192 Red, Blue \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044f\u043c\u0438 \u0434\u043e \u0438 \u043f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0438\u043d\u0435-\u043a\u0440\u0430\u0441\u043d\u043e\u0439 \u043f\u0430\u0440\u044b:<\/p>\n<pre><code class=\"haskell\">ClearAll[apply];apply[{b___, Blue, Red, a___}] := {b, Red, Blue, a};apply[any_] := any;FixedPoint[apply, {Blue, Red, Blue, Red, Blue, Red}]<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<pre><code>{Red,Red,Red,Blue,Blue,Blue}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><code>FixedPoint<\/code> \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u0442 <code>apply<\/code>, \u043f\u043e\u043a\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043d\u0435 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043d\u0435\u0442 \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f. \u041e\u0442\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 (:=) <code>apply[any_] := any<\/code> \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0437\u0430\u0434\u0430\u0451\u0442 \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u043c\u0430\u0440\u043a\u043e\u0432\u0441\u043a\u0430\u044f \u043c\u0430\u0448\u0438\u043d\u0430, \u043f\u043e\u0447\u0442\u0438 \u0446\u0435\u043b\u0438\u043a\u043e\u043c \u0441\u043e\u0431\u0440\u0430\u043d\u043d\u0430\u044f \u0438\u0437 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0438 \u0442\u0438\u043f\u043e\u0432 \u044f\u0437\u044b\u043a\u0430. \u041f\u043e\u0445\u043e\u0436\u0435, \u0437\u0434\u0435\u0441\u044c \u043c\u044b \u043d\u0435\u043d\u0430\u0434\u043e\u043b\u0433\u043e \u043e\u0431\u043e\u0433\u043d\u0430\u043b\u0438 TypeScript \u043f\u043e \u0432\u044b\u0440\u0430\u0437\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438.<\/p>\n<h3>\u0417\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u043c\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f<\/h3>\n<p>\u0412 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u043c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0435 \u041c\u0430\u0440\u043a\u043e\u0432\u0430 \u043d\u0435\u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u043e\u0441\u0442\u044c \u0432\u044b\u0431\u043e\u0440\u0430 \u0437\u0430\u043c\u0435\u043d \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u043e\u0432 \u0432 \u0441\u0442\u0440\u043e\u043a\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u043e: \u0432\u0441\u0435\u0433\u0434\u0430 \u0431\u0435\u0440\u0435\u0442\u0441\u044f \u0441\u0430\u043c\u043e\u0435 \u043b\u0435\u0432\u043e\u0435 \u0438\u0437 \u043d\u0438\u0445 \u043f\u043e \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044e \u043a \u0446\u0435\u043b\u043e\u0439 \u0441\u0440\u043e\u043a\u0435. \u041d\u0430 \u0434\u0432\u0443\u043c\u0435\u0440\u043d\u043e\u0439 \u0441\u0435\u0442\u043a\u0435 \u00ab\u0441\u0430\u043c\u043e\u0435 \u043b\u0435\u0432\u043e\u0435\u00bb \u0443\u0436\u0435 \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0447\u0435\u0441\u043a\u0438 \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u043f\u043e\u043d\u044f\u0442\u0438\u0435\u043c. \u041c\u043e\u0436\u043d\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043f\u043e\u0441\u0442\u0440\u043e\u0447\u043d\u044b\u0439 \u043e\u0431\u0445\u043e\u0434, \u043d\u043e \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043e\u0447\u0435\u043d\u044c \u0447\u0430\u0441\u0442\u043d\u044b\u043c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 (\u0438 \u043d\u0435\u0441\u0438\u043c\u043c\u0435\u0442\u0440\u0438\u0447\u043d\u044b\u043c).<\/p>\n<p>\u0418\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0440\u0435\u0448\u0430\u0435\u0442 \u0432\u0434\u043e\u0445\u043d\u043e\u0432\u0438\u0432\u0448\u0438\u0439 \u0441\u0442\u0430\u0442\u044c\u044e <a href=\"https:\/\/github.com\/mxgmn\/MarkovJunior\" rel=\"noopener noreferrer nofollow\">MarkovJunior<\/a>. \u0412 \u043d\u0451\u043c \u0435\u0441\u0442\u044c \u0434\u0432\u0430 \u0432\u0430\u0436\u043d\u044b\u0445 \u0442\u0438\u043f\u0430 \u043f\u0440\u0430\u0432\u0438\u043b \u0437\u0430\u043c\u0435\u043d\u044b (\u0438\u043b\u0438 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 \u0434\u043b\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043f\u0440\u0430\u0432\u0438\u043b):<\/p>\n<ul>\n<li>\n<p><code>exists<\/code>: \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u043e\u0434\u043d\u0443 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0443\u044e \u0437\u0430\u043c\u0435\u043d\u0443;<\/p>\n<\/li>\n<li>\n<p><code>forall<\/code>: \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043d\u0435\u043f\u0435\u0440\u0435\u0441\u0435\u043a\u0430\u044e\u0449\u0438\u0445\u0441\u044f \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0439 \u0441\u0440\u0430\u0437\u0443.<\/p>\n<\/li>\n<\/ul>\n<p>\u041d\u0438\u0436\u0435 \u044f \u043d\u0430\u0437\u044b\u0432\u0430\u044e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0435 \u0440\u0435\u0436\u0438\u043c\u044b <code>one<\/code> \u0438\u043b\u0438 <code>1<\/code> \u0438 <code>all<\/code>. \u041a\u0430\u043a \u043f\u043e\u0431\u043e\u0447\u043a\u0430: \u043c\u044b \u0442\u0435\u0440\u044f\u0435\u043c \u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0441\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0437\u0430\u043c\u0435\u043d\u044b. \u041a\u0430\u043a \u043e\u0442\u043c\u0435\u0447\u0430\u0435\u0442 \u0441\u0430\u043c \u0430\u0432\u0442\u043e\u0440 MarkovJunior &#8212; \u041c\u0430\u043a\u0441\u0438\u043c \u0413\u0443\u043c\u0438\u043d &#8212; \u044d\u0442\u043e \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u043f\u043e\u0442\u0435\u0440\u044e \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438. \u041d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u0442\u0430\u043a\u043e\u0439 \u0444\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u043c \u0432\u0441\u0451 \u0435\u0449\u0451 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u043e\u043b\u0435\u0437\u0435\u043d \u0434\u043b\u044f \u043c\u043e\u0434\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432.<\/p>\n<h3>\u0421\u0442\u043e\u0445\u0430\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043a\u043b\u0435\u0442\u043e\u0447\u043d\u044b\u0439 \u0430\u0432\u0442\u043e\u043c\u0430\u0442 \u043d\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0442\u0438\u043f\u043e\u0432?<\/h3>\n<p>\u041c\u044b \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u0437\u0434\u0435\u0441\u044c \u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0438\u043b\u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0442\u044c \u044f\u0437\u044b\u043a, \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0436\u0435 \u0448\u0438\u0440\u043e\u043a\u0438\u0439, \u043a\u0430\u043a MarkovJunior, \u043d\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u043a\u0430\u043a\u043e\u0433\u043e-\u0442\u043e \u0431\u043b\u0438\u0437\u043a\u043e\u0433\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u0431\u043b\u043e\u043a\u043e\u0432.  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u043e\u0431\u0435\u0440\u0435\u043c \u0441\u0432\u043e\u044e \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0443\u044e \u0441\u0442\u043e\u0445\u0430\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u043c\u0430\u0448\u0438\u043d\u0443 \u043d\u0430 \u0431\u0430\u0437\u0435 <em>pattern-matching<\/em> WL.<\/p>\n<p>\u041d\u0430\u0447\u043d\u0451\u043c \u0441 \u0447\u0451\u0440\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044f 20\u00d720:<\/p>\n<pre><code class=\"haskell\">field = Table[Black, {20}, {20}];field \/\/ ArrayPlot<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/de\/53\/1f\/de531fc28b94423d3070b7bfeb6bb254.gif\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/webt\/de\/53\/1f\/de531fc28b94423d3070b7bfeb6bb254.gif 780w,&#10;       https:\/\/habrastorage.org\/webt\/de\/53\/1f\/de531fc28b94423d3070b7bfeb6bb254.gif 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c \u043f\u0440\u0430\u0432\u0438\u043b\u043e B \u2192 R: \u0447\u0451\u0440\u043d\u0430\u044f \u043a\u043b\u0435\u0442\u043a\u0430 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043a\u0440\u0430\u0441\u043d\u043e\u0439.<\/p>\n<pre><code class=\"haskell\">ClearAll[r];r[any_] := any;r[{b___, Black, a___}] := {b, Red, a};<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<pre><code class=\"haskell\">field \/\/ r \/\/ ArrayPlot<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/de\/53\/1f\/de531fc28b94423d3070b7bfeb6bb254.gif\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/webt\/de\/53\/1f\/de531fc28b94423d3070b7bfeb6bb254.gif 780w,&#10;       https:\/\/habrastorage.org\/webt\/de\/53\/1f\/de531fc28b94423d3070b7bfeb6bb254.gif 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0423\u043f\u0441. \u0412\u0441\u0435 \u0442\u0430\u043a\u0436\u0435 \u0447\u0435\u0440\u043d\u043e. \u042d\u0442\u043e\u0442 \u043f\u0430\u0442\u0442\u0435\u0440\u043d <code>{b___, Black, a___}<\/code> \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u043e\u0434\u043d\u043e\u043c\u0435\u0440\u043d\u044b\u0445 \u0441\u043f\u0438\u0441\u043a\u0430\u0445\/\u043c\u0430\u0441\u0441\u0438\u0432\u0430\u0445. \u041d\u043e \u043f\u043e\u043b\u0435 &#8212; \u044d\u0442\u043e \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u043f\u0438\u0441\u043a\u043e\u0432, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u0432\u044b\u0448\u0435 \u043d\u0430 \u0432\u0441\u0435\u0439 \u0441\u0435\u0442\u043a\u0435 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043d\u0430\u0439\u0434\u0451\u0442. \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0432\u043d\u0435\u0448\u043d\u044e\u044e \u043f\u0430\u0440\u0443 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0441\u0442\u0440\u043e\u043a\u0438 \u0434\u043e \u0438 \u043f\u043e\u0441\u043b\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0435\u0439 \u0441\u0442\u0440\u043e\u043a\u0438:<\/p>\n<pre><code class=\"haskell\">ClearAll[r];r[any_] := any;r[{beforeRows___, {before___, Black, after___}, afterRows___}] :=  {beforeRows, {before, Red, after}, afterRows};field \/\/ r \/\/ ArrayPlot<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/57\/75\/2d\/57752d2f5000650df6456ecf3ddbf50b.gif\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/webt\/57\/75\/2d\/57752d2f5000650df6456ecf3ddbf50b.gif 780w,&#10;       https:\/\/habrastorage.org\/webt\/57\/75\/2d\/57752d2f5000650df6456ecf3ddbf50b.gif 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0415\u0449\u0451 \u043e\u0434\u0438\u043d \u0432\u044b\u0437\u043e\u0432 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0432\u0442\u043e\u0440\u0443\u044e \u043a\u043b\u0435\u0442\u043a\u0443:<\/p>\n<pre><code class=\"haskell\">field \/\/ r \/\/ r \/\/ ArrayPlot<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/4b\/a4\/2d\/4ba42d501751c37710283362371d0852.gif\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/webt\/4b\/a4\/2d\/4ba42d501751c37710283362371d0852.gif 780w,&#10;       https:\/\/habrastorage.org\/webt\/4b\/a4\/2d\/4ba42d501751c37710283362371d0852.gif 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043f\u043e\u043a\u0430 \u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d: \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0441\u043d\u043e\u0432\u0430 \u043f\u0440\u0438\u0432\u043e\u0434\u044f\u0442 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440 \u043a \u043f\u0435\u0440\u0432\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0435\u0439 \u043a\u043b\u0435\u0442\u043a\u0435. \u041c\u043e\u0436\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u0435\u043d\u044c\u043a\u043e \u043f\u043e\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u044d\u0442\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0432 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0439 \u043f\u0440\u0435\u0434\u0438\u043a\u0430\u0442<\/p>\n<pre><code class=\"haskell\">ClearAll[r];r[any_] := any;r[{beforeRows___, {before___, Black, after___}, afterRows___}] :=  {beforeRows, {before, Red, after}, afterRows} \/;    RandomReal[] &lt;= 1\/20^2;ArrayPlot[field = field \/\/ r \/\/ r \/\/ r \/\/ r]<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/57\/60\/8a\/57608a86d3c18dfc754cd777ab9acc41.gif\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/webt\/57\/60\/8a\/57608a86d3c18dfc754cd777ab9acc41.gif 780w,&#10;       https:\/\/habrastorage.org\/webt\/57\/60\/8a\/57608a86d3c18dfc754cd777ab9acc41.gif 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0438\u043b\u0438 \u0432 \u0432\u0438\u0434\u0435 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438<\/p>\n<pre><code class=\"haskell\">Animate[  ArrayPlot[field = field \/\/ r \/\/ r \/\/ r \/\/ r],  {n, 1, 10},  Appearance -&gt; None]<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/00\/0f\/0d\/000f0df59ad122ed75cc265cdc94b4d0.gif\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/webt\/00\/0f\/0d\/000f0df59ad122ed75cc265cdc94b4d0.gif 780w,&#10;       https:\/\/habrastorage.org\/webt\/00\/0f\/0d\/000f0df59ad122ed75cc265cdc94b4d0.gif 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0423\u0441\u043b\u043e\u0432\u0438\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043e\u0431\u0445\u043e\u0434\u0430 \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442\u043e\u0432, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044d\u0442\u043e \u0435\u0449\u0451 \u043d\u0435 \u0440\u0430\u0432\u043d\u043e\u043c\u0435\u0440\u043d\u044b\u0439 \u0432\u044b\u0431\u043e\u0440 \u0441\u0440\u0435\u0434\u0438 \u0432\u0441\u0435\u0445 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0439. \u041f\u043e\u0437\u0436\u0435 \u043c\u044b \u044f\u0432\u043d\u043e \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0438\u043c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0438 \u0432\u044b\u0431\u0435\u0440\u0435\u043c \u043e\u0434\u0438\u043d \u0438\u0437 \u043d\u0438\u0445.<\/p>\n<h3>\u041e\u0434\u043d\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u043e &#8212; \u0432\u043e\u0441\u0435\u043c\u044c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0439<\/h3>\n<p>\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u0440\u043e\u0441\u0442\u0430<\/p>\n<ul>\n<li>\n<p>RB \u2192 RR<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"haskell\">field = Table[Black, {20}, {20}];field[[15,15]] = Red; (*\u0441\u0435\u043c\u044f*)ClearAll[r];r[any_] := any;r[{bf___, {b___, Black,Red, a___}, af___}] := {bf, {b, Red,Red, a}, af} \/; RandomReal[]&lt;=0.5;<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0413\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u0430\u0442\u0442\u0435\u0440\u043d, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u043e\u0431\u044a\u044f\u0432\u0438\u043b\u0438 \u043d\u0435 \u0443\u043c\u0435\u0435\u0442 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u0442\u044c \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u0443\u044e \u043f\u0430\u0440\u0443. \u0423 \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u0430 \u0432\u043e\u0441\u0435\u043c\u044c \u0434\u0438\u044d\u0434\u0440\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u0438\u043c\u043c\u0435\u0442\u0440\u0438\u0439: \u0447\u0435\u0442\u044b\u0440\u0435 \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430 \u0438 \u0447\u0435\u0442\u044b\u0440\u0435 \u043e\u0442\u0440\u0430\u0436\u0451\u043d\u043d\u044b\u0445 \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430. \u0415\u0441\u043b\u0438 \u043f\u0440\u043e\u0433\u043e\u043d\u044f\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u0447\u0435\u0440\u0435\u0437 \u0432\u0441\u0435 \u044d\u0442\u0438 \u043e\u0440\u0438\u0435\u043d\u0442\u0430\u0446\u0438\u0438, \u043e\u0434\u043d\u043e \u0442\u0430\u043a\u043e\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u0431\u0443\u0434\u0435\u0442 \u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432\u043e \u0432\u0441\u0435\u0445 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f\u0445.<\/p>\n<pre><code class=\"haskell\">rot[0][m_] := m;rot[1][m_] := Transpose[Reverse[m]];rot[2][m_] := Reverse[Reverse \/@ m];rot[3][m_] := Reverse[Transpose[m]];mirror[m_] := Reverse \/@ m;symmetries = Join[  Table[rot[k], {k, 0, 3}],  Table[rot[k] @* mirror, {k, 0, 3}]];inverseSymmetries = Join[  Table[rot[Mod[-k, 4]], {k, 0, 3}],  Table[rot[Mod[-k, 4]] @* mirror, {k, 0, 3}]];applyInAllSymmetries[m_] :=  Fold[    #2[[2]][r[#2[[1]][#1]]] &amp;,    m,    Transpose[{symmetries, inverseSymmetries}]  ];<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0422\u043e\u0433\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u044d\u0442\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u0432 \u0446\u0438\u043a\u043b\u0435 \u0442\u0430\u043a:<\/p>\n<pre><code class=\"haskell\">Animate[  ArrayPlot[field = applyInAllSymmetries[field]],   {n, 1, 30},  Appearance-&gt;None]<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/be\/1d\/2a\/be1d2a4deced89d7019ad5f0e71fc30a.gif\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/webt\/be\/1d\/2a\/be1d2a4deced89d7019ad5f0e71fc30a.gif 780w,&#10;       https:\/\/habrastorage.org\/webt\/be\/1d\/2a\/be1d2a4deced89d7019ad5f0e71fc30a.gif 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u041f\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0435\u0449\u0451 \u0442\u0430\u043a\u043e\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e:<\/p>\n<ul>\n<li>\n<p>RBB \u2192 GGR<\/p>\n<\/li>\n<li>\n<p>R_G \u2192 G_R<\/p>\n<\/li>\n<\/ul>\n<p>\u0433\u0434\u0435 _ \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u043b\u044e\u0431\u043e\u0439 \u0446\u0432\u0435\u0442. \u041a\u0440\u0430\u0441\u043d\u0430\u044f \u043a\u043b\u0435\u0442\u043a\u0430 \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u0435\u0442 \u0434\u0432\u0438\u0436\u0443\u0449\u0438\u043c\u0441\u044f \u0444\u0440\u043e\u043d\u0442\u043e\u043c, \u0430 \u0437\u0435\u043b\u0451\u043d\u044b\u0435 \u043a\u043b\u0435\u0442\u043a\u0438 \u0444\u0438\u043a\u0441\u0438\u0440\u0443\u044e\u0442 \u043f\u0440\u043e\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0439 \u043f\u0443\u0442\u044c. \u041f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u0430\u0432\u0438\u043b \u0432\u043e \u0432\u0441\u0435\u0445 \u0441\u0438\u043c\u043c\u0435\u0442\u0440\u0438\u044f\u0445 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0444\u0440\u043e\u043d\u0442\u0443 \u0434\u0432\u0438\u0433\u0430\u0442\u044c\u0441\u044f \u0438 \u043e\u0442\u0441\u0442\u0443\u043f\u0430\u0442\u044c \u043d\u0430\u0437\u0430\u0434 \u043f\u043e \u0441\u0435\u0442\u043a\u0435<\/p>\n<pre><code class=\"haskell\">ClearAll[r, n];r[{before___, {a___, Red,Black,Black, b___}, after___}] :=   {before, {a, Green,Green,Red, b}, after} \/; (RandomReal[]&lt;=0.5);r[{before___, {a___, Red,n_,Green, b___}, after___}] :=   {before, {a, Green,n,Red, b}, after} \/; (RandomReal[]&lt;=0.5);r[any_] := any field = Table[Black, {20}, {20}];field[[RandomInteger[{1,20}],RandomInteger[{1,20}]]] = Red;Animate[  ArrayPlot[field = applyInAllSymmetries[field]],  {n, 1, 30}, Appearance-&gt;None]<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/53\/9f\/2e\/539f2e3b5f683eba3789f5155e4da7bd.gif\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/webt\/53\/9f\/2e\/539f2e3b5f683eba3789f5155e4da7bd.gif 780w,&#10;       https:\/\/habrastorage.org\/webt\/53\/9f\/2e\/539f2e3b5f683eba3789f5155e4da7bd.gif 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u041a\u0440\u0443\u0442\u044c?<\/p>\n<h3>\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0432\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438<\/h3>\n<p>\u0422\u0430\u043a\u043e\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u0430\u0432\u0438\u043b <code>r<\/code> \u0447\u0435\u0440\u0435\u0437 <code>:=<\/code> \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u043e\u0435, \u043d\u043e \u0432 \u043d\u0451\u043c \u0441\u043c\u0435\u0448\u0430\u043d\u044b \u043f\u043e\u0438\u0441\u043a \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f, \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0441\u0442\u044c \u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0441\u0430\u043c\u043e\u0433\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u0430. \u041e\u043d\u043e \u043d\u0435 \u0443\u043c\u0435\u0435\u0442 \u0432\u044b\u0440\u0430\u0437\u0438\u0442\u044c \u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0435\u043d\u043d\u0443\u044e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u0438\u0437 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0444\u0430\u0437: \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0432\u044b\u0440\u0430\u0441\u0442\u0438\u0442\u044c \u043f\u0443\u0442\u044c, \u0437\u0430\u0442\u0435\u043c \u043e\u0442\u043a\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u0438\u0437 \u0442\u0443\u043f\u0438\u043a\u0430, \u0437\u0430\u0442\u0435\u043c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0446\u0432\u0435\u0442\u0430 \u0432 \u043e\u043a\u043e\u043d\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e \u0443\u0441\u043b\u043e\u0432\u043d\u043e\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0447\u0435\u0440\u0435\u0437 <code>\/; (RandomReal[]&lt;=0.5);<\/code> \u044d\u0442\u043e \u043a\u043e\u0448\u043c\u0430\u0440\u043d\u044b\u0439 \u043a\u043e\u0441\u0442\u044b\u043b\u044c \u0438 \u0442\u043e\u0440\u043c\u043e\u0437\u0430.<\/p>\n<p>\u0414\u043b\u044f \u043f\u043e\u043b\u043d\u043e\u0442\u044b \u043d\u0443\u0436\u043d\u044b \u0442\u0430\u043a\u0436\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0443\u0437\u043b\u044b \u043f\u0440\u0430\u0432\u0438\u043b \u0441 \u0440\u0435\u0436\u0438\u043c\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0438 \u043b\u0438\u043c\u0438\u0442\u043e\u043c \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439. \u0420\u0435\u0436\u0438\u043c <code>one<\/code> (\u0438\u043b\u0438 <code>1<\/code>) \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u044f\u0442\u044c \u0432\u0441\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043e\u0434\u043d\u043e\u0433\u043e \u0448\u0430\u0433\u0430 \u0438 \u0432\u044b\u0431\u0438\u0440\u0430\u0442\u044c \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0439. \u0420\u0435\u0436\u0438\u043c <code>all<\/code> \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u043f\u0440\u043e\u0445\u043e\u0434 \u0437\u0430\u043c\u0435\u043d \u043a\u043e \u0432\u0441\u0435\u043c\u0443 \u043f\u043e\u043b\u044e. \u041a\u0430\u0436\u0434\u044b\u0439 \u0443\u0437\u0435\u043b \u043b\u0438\u0431\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u0435\u0449\u0451 \u043e\u0434\u0438\u043d \u0448\u0430\u0433, \u043b\u0438\u0431\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c\u0443.<\/p>\n<p>\u042f\u0432\u043d\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b <code>Rule<\/code> (<code>-&gt;<\/code>) \u0438 <code>RuleDelayed<\/code> (<code>:&gt;<\/code>) \u0434\u0430\u044e\u0442 \u043d\u0430\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f, \u0447\u0435\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f, \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u043a \u0441\u0438\u043c\u0432\u043e\u043b\u0443. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <code>ReplaceAll<\/code> \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043e\u0431\u0445\u043e\u0434 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0441 \u0437\u0430\u043c\u0435\u043d\u043e\u0439:<\/p>\n<pre><code class=\"haskell\">{Red, Blue, Blue, Blue} \/. Blue -&gt; Red<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<pre><code>{Red, Red, Red, Red}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0412 \u044d\u0442\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0437\u0430 \u043e\u0434\u0438\u043d \u043e\u0431\u0445\u043e\u0434 \u0437\u0430\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043a\u0430\u0436\u0434\u044b\u0439 \u0441\u0438\u043d\u0438\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442. \u042d\u0442\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0435 \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0435\u043d\u0438\u0435 \u0443\u0437\u043b\u0430 <code>all<\/code>: \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u043d\u0430\u0431\u043e\u0440 \u043d\u0435\u043f\u0435\u0440\u0435\u0441\u0435\u043a\u0430\u044e\u0449\u0438\u0445\u0441\u044f \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0439 \u0437\u0430 \u043e\u0434\u0438\u043d \u043f\u0440\u043e\u0445\u043e\u0434.<\/p>\n<p>\u0414\u043b\u044f \u0443\u0437\u043b\u0430 <code>one<\/code> &#8212; <code>ReplaceList<\/code> \u043c\u043e\u0436\u0435\u0442 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c\u044b\u0435 \u0437\u0430\u043c\u0435\u043d\u043e\u0439 \u043e\u0434\u043d\u043e\u0433\u043e \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f. \u0417\u0430\u0442\u0435\u043c \u043c\u043e\u0436\u043d\u043e \u044f\u0432\u043d\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043e\u0434\u0438\u043d \u0438\u0437 \u043d\u0438\u0445:<\/p>\n<pre><code class=\"haskell\">ReplaceList[  {Red, Blue, Blue, Blue},  {a___, Blue, b___} -&gt; {a, Red, b}];RandomChoice[%]<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<pre><code>{Red, Blue, Red, Blue}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><code>RandomChoice<\/code> \u0440\u0430\u0432\u043d\u043e\u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442 \u0438\u0437 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432. \u0415\u0441\u043b\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0430\u0432\u0438\u043b \u0438\u043b\u0438 \u0441\u0438\u043c\u043c\u0435\u0442\u0440\u0438\u0439 \u0441\u043e\u0437\u0434\u0430\u044e\u0442 \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442, \u0442\u0430\u043a\u043e\u0439 \u0434\u0443\u0431\u043b\u0438\u043a\u0430\u0442 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437 \u0438 \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u0438\u0439 \u0432\u0435\u0441.<\/p>\n<p>\u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e <code>ReplaceList<\/code> \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442 \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u043a\u043e \u0432\u0441\u0435\u043c\u0443 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044e. \u041e\u0431\u0451\u0440\u0442\u043e\u0447\u043d\u044b\u0439 \u0448\u0430\u0431\u043b\u043e\u043d <code>{a___, ..., b___}<\/code> \u0434\u0435\u043b\u0430\u0435\u0442 \u043a\u0430\u0436\u0434\u0443\u044e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u0443\u044e \u0437\u0430\u043c\u0435\u043d\u0443 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435\u043c \u0441\u043e \u0432\u0441\u0435\u043c \u0441\u043f\u0438\u0441\u043a\u043e\u043c, \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044f \u043e\u043a\u0440\u0443\u0436\u0430\u044e\u0449\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b. \u0418\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440 \u043d\u0438\u0436\u0435 \u043e\u0431\u043e\u0431\u0449\u0430\u0435\u0442 \u044d\u0442\u043e\u0442 \u0448\u0430\u0433 \u043f\u043e\u0434\u044a\u0451\u043c\u0430 \u043d\u0430 \u0434\u0432\u0443\u043c\u0435\u0440\u043d\u044b\u0435 \u0441\u0435\u0442\u043a\u0438.<\/p>\n<h3>\u041c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0439 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440<\/h3>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0443 \u043d\u0430\u0441 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440. \u0415\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 &#8212; \u044d\u0442\u043e \u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0435\u043d\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0443\u0437\u043b\u043e\u0432, \u0438 \u043a\u0430\u0436\u0434\u044b\u0439 \u0443\u0437\u0435\u043b \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043d\u0430\u0431\u043e\u0440 \u043f\u0440\u0430\u0432\u0438\u043b. \u0423\u0437\u043b\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0432 \u043e\u0434\u043d\u043e\u043c \u0438\u0437 \u0434\u0432\u0443\u0445 \u0440\u0435\u0436\u0438\u043c\u043e\u0432:<\/p>\n<ul>\n<li>\n<p><strong>one:<\/strong> \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u043d\u0438\u044f \u0438 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043e\u0434\u043d\u043e;<\/p>\n<\/li>\n<li>\n<p><strong>all:<\/strong> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <code>ReplaceAll<\/code> \u043a\u0430\u043a \u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0445\u043e\u0434 \u0437\u0430\u043c\u0435\u043d, \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u043c\u044b\u0445 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e.<\/p>\n<\/li>\n<\/ul>\n<p>\u0423 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0443\u0437\u043b\u0430 \u0442\u0430\u043a\u0436\u0435 \u0435\u0441\u0442\u044c \u043b\u0438\u043c\u0438\u0442 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439. \u0423\u0437\u0435\u043b <code>one<\/code> \u0441 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u043f\u0435\u0440\u0435\u043a\u0440\u044b\u0432\u0430\u044e\u0449\u0438\u043c\u0438\u0441\u044f \u043f\u0440\u0430\u0432\u0438\u043b\u0430\u043c\u0438 \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u0432\u0437\u0432\u0435\u0448\u0435\u043d\u043d\u044b\u0439 \u0432\u044b\u0431\u043e\u0440 \u0441\u0440\u0435\u0434\u0438 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432.<\/p>\n<p>\u0423\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0439 \u043f\u043e\u0442\u043e\u043a:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/0f\/ad\/66\/0fad6660538ba114b87e7e6970223d83.png\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/0f\/ad\/66\/0fad6660538ba114b87e7e6970223d83.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/0f\/ad\/66\/0fad6660538ba114b87e7e6970223d83.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0447\u0438\u0441\u0442\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u0432\u043c\u0435\u0441\u0442\u043e \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u0432 \u043a\u0430\u043a JavaScript. \u041a\u0430\u0436\u0434\u044b\u0439 \u0432\u044b\u0437\u043e\u0432 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u0441\u0435\u0442\u043a\u0443 \u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440\u0430, \u0430 \u0437\u0430\u0442\u0435\u043c \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u043f\u0430\u0440\u0443 \u00ab\u0441\u0435\u0442\u043a\u0430-\u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435\u00bb.<\/p>\n<p>\u041c\u044b \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u043c \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b \u0441\u0438\u043c\u043c\u0435\u0442\u0440\u0438\u0438, \u0447\u0442\u043e\u0431\u044b \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u044b\u0435 \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u043c\u043e\u0433\u043b\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0432 \u043b\u044e\u0431\u043e\u0439 \u043e\u0440\u0438\u0435\u043d\u0442\u0430\u0446\u0438\u0438.<\/p>\n<details class=\"spoiler\">\n<summary>\u0424\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440\u0430<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"haskell\">ops = {symmetries, inverseSymmetries};tops = Transpose[ops];propagate[input_, state_] := With[{  nodeNumber = state[\"nodeNumber\"]}, If[nodeNumber &lt;= Length[state[\"nodes\"]], With[{  rl = state[\"nodes\"][[nodeNumber]],  step = state[\"step\"]}, Switch[rl[[1]],  1,    Module[{variants},      variants = Join @@ MapThread[        Map[#2, ReplaceList[rl[[3]]][#1[input]]] &amp;,        ops      ];      If[Length[variants] == 0, Return[{        input, Join[state, &lt;|\"step\" -&gt; 0, \"nodeNumber\" -&gt; nodeNumber + 1|&gt;]      }]];      {        RandomChoice[variants],        Join[state, If[step &lt; rl[[2]] - 1,            &lt;|\"step\" -&gt; step + 1|&gt;,            &lt;|\"step\" -&gt; 0, \"nodeNumber\" -&gt; nodeNumber + 1|&gt;          ]        ]      }    ],  All, Module[{},    With[{transformed = Fold[      #2[[2]][ReplaceAll[#2[[1]][#1], rl[[3]]]] &amp;,      input,      tops    ]},      If[transformed === input, Return[{        input, Join[state, &lt;|\"step\" -&gt; 0, \"nodeNumber\" -&gt; nodeNumber + 1|&gt;]      }]];      {        transformed,        Join[state, If[step &lt; rl[[2]] - 1,            &lt;|\"step\" -&gt; step + 1|&gt;,            &lt;|\"step\" -&gt; 0, \"nodeNumber\" -&gt; nodeNumber + 1|&gt;        ]]      }    ]]]], {input, state}]]<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<p>\u0412\u043d\u0443\u0442\u0440\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u0432\u0441\u0451 \u0435\u0449\u0451 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0430 \u043d\u0430 \u0434\u0432\u0443\u0445 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f\u0445: <code>ReplaceList<\/code> \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u043e\u0434\u043d\u043e\u0448\u0430\u0433\u043e\u0432\u044b\u0445 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432 \u0438 <code>ReplaceAll<\/code> \u0434\u043b\u044f \u043f\u0440\u043e\u0445\u043e\u0434\u043e\u0432 \u0437\u0430\u043c\u0435\u043d.<\/p>\n<p>\u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440\u0430 \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u044b\u0435 0-\u043c\u0435\u0440\u043d\u044b\u0435 (A-&gt;B) \u0438 1-\u043c\u0435\u0440\u043d\u044b\u0435 (AB -&gt; BA) \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u043d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u0443\u044e\u0442\u0441\u044f \u0432 \u0448\u0430\u0431\u043b\u043e\u043d\u044b \u0432\u0441\u0435\u0439 \u0441\u0435\u0442\u043a\u0438 \u0432 2-\u043c\u0435\u0440\u043d\u044b\u0435. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435, \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0438\u043c\u043c\u0435\u0442\u0440\u0438\u0438 \u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u044b \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0432 \u0435\u0434\u0438\u043d\u043e\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438.<\/p>\n<details class=\"spoiler\">\n<summary>\u041d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u0440\u0430\u0432\u0438\u043b<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"haskell\">levelUp[0][expr_] := expr;levelUp[1][expr_] := Module[{lr, rl}, expr \/. {  (RuleDelayed | Rule)[a_, Verbatim[Condition][b_, c_]] :&gt;    RuleDelayed[{lr___, a, rl___}, Condition[{lr, b, rl}, c]],  (RuleDelayed | Rule)[a_, b_] :&gt;    RuleDelayed[{lr___, a, rl___}, {lr, b, rl}]}];levelUp[2][expr_] := Module[{lr, rl, af, bf}, expr \/. {  (RuleDelayed | Rule)[a_, Verbatim[Condition][b_, c_]] :&gt;    RuleDelayed[{lr___, {af___, a, bf___}, rl___},      Condition[{lr, {af, b, bf}, rl}, c]],  (RuleDelayed | Rule)[a_, b_] :&gt;    RuleDelayed[{lr___, {af___, a, bf___}, rl___},      {lr, {af, b, bf}, rl}],  (RuleDelayed | Rule)[a_, Verbatim[Condition][b_, c_]] :&gt;    RuleDelayed[{lr___, {af___, a, bf___}, rl___},      Condition[{lr, {af, b, bf}, rl}, c]],  (RuleDelayed | Rule)[a_, b_] :&gt;    RuleDelayed[{lr___, {af___, a, bf___}, rl___},      {lr, {af, b, bf}, rl}]}];correctRules[rl : {All, n_, rule_Rule | rule_RuleDelayed}] :=  If[!MatchQ[rule[[1]], {___, List[__], ___}] &amp;&amp;      MatchQ[rule[[1]], {___, expr_, ___}],    {All, n, rule},    {All, n, rule}  ];correctRules[rl : {All, n_, rules_List}] :=  If[Or @@ Map[      (!MatchQ[#[[1]], {___, List[__], ___}] &amp;&amp;        MatchQ[#[[1]], {___, expr_, ___}]) &amp;,      rules    ],    {All, n, rules},    {All, n, rules}  ];correctRules[rl : {All, n_, rules_}] := rl;correctRules[rl : {1, n_, rule_Rule | rule_RuleDelayed}] :=  If[!MatchQ[rule[[1]], {___, List[__], ___}] &amp;&amp;      MatchQ[rule[[1]], {___, expr_, ___}],    {1, n, levelUp@rule},    {1, n, levelUp@rule}  ];correctRules[rl : {1, n_, rules_List}] :=  If[Or @@ Map[      (!MatchQ[#[[1]], {___, List[__], ___}] &amp;&amp;        MatchQ[#[[1]], {___, expr_, ___}]) &amp;,      rules    ],    {1, n, levelUp \/@ rules},    {1, n, levelUp \/@ rules}  ];correctRules[rl : {1, n_, rule_Rule | rule_RuleDelayed}] := {1, n, levelUp@rule};correctRules[rl : {1, n_, rules_List}] := {1, n, levelUp \/@ rules};levelUp[testRl_Rule | testRl_RuleDelayed] := Which[  MatchQ[testRl[[1]], {___, List[__], ___}],    testRl,  MatchQ[testRl[[1]], {___, expr_, ___}],    levelUp[1][testRl],  True,    levelUp[2][testRl]]<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<p>\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u0443\u0440\u043e\u0432\u043d\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u044f\u0447\u0435\u0439\u043a\u0438 \u0440\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0448\u0430\u0431\u043b\u043e\u043d \u0443\u0440\u043e\u0432\u043d\u044f \u0441\u0435\u0442\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u043e\u043a\u0440\u0443\u0436\u0430\u044e\u0449\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u0438 \u0432\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438:<\/p>\n<pre><code class=\"haskell\">Black -&gt; Orange \/\/ levelUp<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<pre><code>{lr$___, {af$___, Black, bf$___}, rl$___} :&gt;  {lr$, {af$, Orange, bf$}, rl$}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u0432\u0435\u0440\u043d\u0443\u0442\u044c\u0441\u044f \u043a \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u043c \u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c \u0438\u0445, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043d\u043e\u0432\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434<\/p>\n<h3>\u041c\u043e\u0434\u0435\u043b\u044c \u0440\u043e\u0441\u0442\u0430<\/h3>\n<p>\u041f\u0435\u0440\u0432\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u0434\u043b\u044f \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440\u0430: \u043e\u0434\u043d\u0430 \u043a\u0440\u0430\u0441\u043d\u0430\u044f \u043a\u043b\u0435\u0442\u043a\u0430 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u0441\u043e\u0441\u0435\u0434\u043d\u044e\u044e \u043a\u0440\u0430\u0441\u043d\u0443\u044e \u043a\u043b\u0435\u0442\u043a\u0443<\/p>\n<pre><code>one  1 \u0440\u0430\u0437: B \u2192 Oone  \u043a\u0440\u0443\u0442\u0438\u043c \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e: BO \u2192 OO<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u0435\u0440\u0432\u044b\u0439 \u0443\u0437\u0435\u043b \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u0441\u0435\u043c\u044f (\u0437\u0430\u0440\u043e\u0434\u044b\u0448?), \u0430 \u0432\u0442\u043e\u0440\u043e\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u0443\u0436\u0435 \u043c\u043e\u0434\u0435\u043b\u0438\u0440\u0443\u0435\u0442 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0439 \u0440\u043e\u0441\u0442. \u0422\u0430\u043a \u043e\u043d\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0432 \u043d\u043e\u0432\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438:<\/p>\n<pre><code class=\"haskell\">nodes = {};AppendTo[nodes, {  1, 1, {    Black -&gt; Orange  }}];AppendTo[nodes, {  1, Infinity, {    {b___, Black,Orange, a___} -&gt; {b, Orange,Orange, a}  }}];<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u0435\u0433\u043e:<\/p>\n<pre><code class=\"haskell\">state = &lt;|  \"nodes\" -&gt; correctRules\/@nodes,  \"nodeNumber\"-&gt;1, \"step\"-&gt;0|&gt;;field = Table[Black, {20}, {20}];Animate[  ArrayPlot[({field, state} = propagate[field, state])\/\/First],   {n,1,30}, Appearance-&gt;None]<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/42\/ef\/ac\/42efacb4904686c9701fd0eab53d28c2.gif\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/webt\/42\/ef\/ac\/42efacb4904686c9701fd0eab53d28c2.gif 780w,&#10;       https:\/\/habrastorage.org\/webt\/42\/ef\/ac\/42efacb4904686c9701fd0eab53d28c2.gif 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<h3>\u0413\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u043b\u0430\u0431\u0438\u0440\u0438\u043d\u0442\u0430<\/h3>\n<p>\u041b\u0430\u0431\u0438\u0440\u0438\u043d\u0442 \u0441\u0442\u0440\u043e\u0438\u0442\u0441\u044f \u0434\u0432\u0443\u043c\u044f \u0444\u0430\u0437\u0430\u043c\u0438. \u0412 \u043f\u0435\u0440\u0432\u043e\u0439 \u0430\u043a\u0442\u0438\u0432\u043d\u0430\u044f \u043a\u043b\u0435\u0442\u043a\u0430 \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0437\u0430 \u0441\u043e\u0431\u043e\u0439 \u0441\u043b\u0435\u0434 \u0438 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0435 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435. \u041a\u043e\u0433\u0434\u0430 \u043e\u043d\u0430 \u0437\u0430\u0441\u0442\u0440\u0435\u0432\u0430\u0435\u0442, \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u0444\u0430\u0437\u0430 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u043f\u043e \u0441\u043b\u0435\u0434\u0443 \u043d\u0430\u0437\u0430\u0434, \u043f\u043e\u043a\u0430 \u0441\u043d\u043e\u0432\u0430 \u043d\u0435 \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u043c\u0435\u0441\u0442\u043e \u0434\u043b\u044f \u201c\u0440\u043e\u0441\u0442\u0430\u201d \u043a\u043b\u0435\u0442\u043e\u043a:<\/p>\n<pre><code>one  1 \u0440\u0430\u0437: B \u2192 Oone  \u043f\u043e\u043a\u0430 \u0435\u0441\u0442\u044c \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f: OBB \u2192 OYOall  \u043f\u043e\u043a\u0430 \u0435\u0441\u0442\u044c \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f: Y \u2192 O<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0417\u0434\u0435\u0441\u044c O &#8212; \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u0444\u0440\u043e\u043d\u0442, B &#8212; \u043d\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u043a\u043b\u0435\u0442\u043a\u0430, Y &#8212; \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u043a\u043b\u0435\u0442\u043a\u0430<\/p>\n<pre><code class=\"haskell\">nodes = {};AppendTo[nodes, {  1, 1, {    Black -&gt; Orange  }}];AppendTo[nodes, {  1, Infinity, {    {a___, Orange,Black,Black, b___} :&gt; {a, Orange,Yellow,Orange, b}  }}];AppendTo[nodes, {  All, Infinity, {    Yellow -&gt; Orange  }}];state = &lt;|  \"nodes\" -&gt; correctRules\/@nodes,  \"nodeNumber\"-&gt;1,\"step\"-&gt;0|&gt;;field = Table[Black, {20}, {20}];Animate[  ArrayPlot[(    {field, state} = propagate[field, state];    {field, state} = propagate[field, state];    {field, state} = propagate[field, state]  )\/\/First],   {n,1,10}, Appearance-&gt;None]<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/a9\/3d\/77\/a93d77d5c9654634b5e745a2756a8055.gif\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/webt\/a9\/3d\/77\/a93d77d5c9654634b5e745a2756a8055.gif 780w,&#10;       https:\/\/habrastorage.org\/webt\/a9\/3d\/77\/a93d77d5c9654634b5e745a2756a8055.gif 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<h3>\u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u044f \u043f\u0440\u0430\u0432\u0438\u043b<\/h3>\n<p>\u041d\u0430\u0431\u043e\u0440 \u043f\u0435\u0440\u0435\u043a\u0440\u044b\u0432\u0430\u044e\u0449\u0438\u0445\u0441\u044f \u043f\u0440\u0430\u0432\u0438\u043b \u0432\u043d\u0443\u0442\u0440\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u0443\u0437\u043b\u0430 <code>one<\/code> \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0437\u0430\u0434\u0430\u0451\u0442 \u0432\u0437\u0432\u0435\u0448\u0435\u043d\u043d\u044b\u0439 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0439 \u0432\u044b\u0431\u043e\u0440 \u0441\u0440\u0435\u0434\u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0432\u0448\u0438\u0445\u0441\u044f \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432. \u0414\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0442\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c <em>\u0441\u0430\u043c\u043e\u0438\u0437\u0431\u0435\u0433\u0430\u044e\u0449\u0443\u044e \u0437\u043c\u0435\u0439\u043a\u0443<\/em><\/p>\n<pre><code>one  \u043f\u043e\u043a\u0430 \u0435\u0441\u0442\u044c \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f:    BW \u2192 WL    BW \u2192 WO<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0412\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u0438 \u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0433\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u043c\u0438 \u0432\u0438\u0434\u0430 <code>\/;<\/code>, \u043a\u0430\u043a \u0432 \u0440\u0430\u043d\u043d\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438. \u0413\u043b\u0430\u0432\u043d\u043e\u0435 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u0442\u0435\u043f\u0435\u0440\u044c \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0441\u0442\u044c \u0437\u0430\u0434\u0430\u043d\u0430 \u044f\u0432\u043d\u043e \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u0441\u043f\u0438\u0441\u043a\u0430 \u0432\u0441\u0435\u0445 \u043f\u0440\u0430\u0432\u0438\u043b<\/p>\n<pre><code class=\"haskell\">nodes = {};AppendTo[nodes, {  1, 1, {    Black -&gt; White  }}];AppendTo[nodes, {  1, Infinity, {    {a___, Black,White, b___} :&gt; {a, White,Blue, b},    {a___, Black,White, b___} :&gt; {a, White,Orange, b}  }}];state = &lt;|  \"nodes\" -&gt; correctRules\/@nodes,  \"nodeNumber\"-&gt;1,\"step\"-&gt;0|&gt;;Animate[  ArrayPlot[({field, state} = propagate[field, state])\/\/First],   {n,1,30}, Appearance-&gt;None]<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/bd\/48\/12\/bd48123c51132b34f37110e08e81e870.gif\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/webt\/bd\/48\/12\/bd48123c51132b34f37110e08e81e870.gif 780w,&#10;       https:\/\/habrastorage.org\/webt\/bd\/48\/12\/bd48123c51132b34f37110e08e81e870.gif 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<h3>\u0413\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u0440\u0435\u043a\u0438<\/h3>\n<p>\u0411\u043e\u043b\u0435\u0435 \u0434\u043b\u0438\u043d\u043d\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u043e\u043d\u043d\u043e \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0442 \u0434\u0432\u0430 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0445 \u043a\u043e\u043d\u043a\u0443\u0440\u0438\u0440\u0443\u044e\u0449\u0438\u0445 \u0440\u0435\u0433\u0438\u043e\u043d\u0430. \u0418\u0445 \u0433\u0440\u0430\u043d\u0438\u0446\u0430 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0432\u043e\u0434\u043e\u0439; \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0446\u0432\u0435\u0442\u0430 \u043e\u0447\u0438\u0449\u0430\u044e\u0442\u0441\u044f; \u0440\u0435\u043a\u0430 \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0435\u0442\u0441\u044f; \u043e\u0441\u0442\u0430\u0432\u0448\u0430\u044f\u0441\u044f \u0437\u0435\u043c\u043b\u044f \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0434\u0432\u0443\u043c\u044f \u043e\u0442\u0442\u0435\u043d\u043a\u0430\u043c\u0438 \u0442\u0440\u0430\u0432\u044b<\/p>\n<pre><code class=\"haskell\">nodes = {};AppendTo[nodes, {   1, 1,  {         Black -&gt; Yellow  }}];AppendTo[nodes, {  1, 1,  {         Black -&gt; Red  }}];AppendTo[nodes, {  1, Infinity,  {        {a___, Red,Black, b___} :&gt; {a, Red,Red, b},    {a___, Yellow,Black, b___} :&gt; {a, Yellow,Yellow, b}  }}];AppendTo[nodes, {  All, Infinity,  {        {a___, Red, Yellow, b___} :&gt; {a, (RGBColor[1\/3, 1\/3, 1]),(RGBColor[1\/3, 1\/3, 1]), b}  }}];AppendTo[nodes, {  All, Infinity,  {        Yellow -&gt; Black,    Red -&gt; Black  }}];AppendTo[nodes, {  All, 1,  {        {a___, (RGBColor[1\/3, 1\/3, 1]),Black, b___} :&gt; {a, (RGBColor[1\/3, 1\/3, 1]),(RGBColor[1\/3, 1\/3, 1]), b}  }}];AppendTo[nodes, {  All, Infinity,  {        {a___, (RGBColor[1\/3, 1\/3, 1]),Black, b___} :&gt; {a, Green,Green, b}  }}];AppendTo[nodes, {  1, 13,  {        Black -&gt; (RGBColor[0, 2\/3, 0])  }}];AppendTo[nodes, {  1, Infinity,  {        {a___, (RGBColor[0, 2\/3, 0]),Black, b___} :&gt; {a, (RGBColor[0, 2\/3, 0]),(RGBColor[0, 2\/3, 0]), b},    {a___, Green,Black, b___} :&gt; {a, Green,Green, b}  }}];<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c<\/p>\n<pre><code class=\"haskell\">state = &lt;|  \"nodes\" -&gt; correctRules\/@nodes,  \"nodeNumber\"-&gt;1,\"step\"-&gt;0|&gt;;field = Table[Black, {20}, {20}];Animate[  ArrayPlot[(    Do[{field, state} = propagate[field, state];, {12}];       {field, state} = propagate[field, state]  )\/\/First],   {n,1,220}, Appearance-&gt;None, RefreshRate-&gt;20]<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/02\/89\/8e\/02898e3b22913948ce0cca02f208387f.gif\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/webt\/02\/89\/8e\/02898e3b22913948ce0cca02f208387f.gif 780w,&#10;       https:\/\/habrastorage.org\/webt\/02\/89\/8e\/02898e3b22913948ce0cca02f208387f.gif 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<h3>\u041f\u043e\u043b\u0438\u0440\u0443\u0435\u043c \u0434\u043e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438<\/h3>\n<p>\u0427\u0435\u0433\u043e \u043d\u0435 \u0445\u0432\u0430\u0442\u0430\u0435\u0442:<\/p>\n<ul>\n<li>\n<p>\u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c \u0441\u0438\u043c\u043c\u0435\u0442\u0440\u0438\u044e \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0443\u0437\u043b\u0430<\/p>\n<\/li>\n<li>\n<p>\u0443\u0434\u043e\u0431\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441<\/p>\n<\/li>\n<\/ul>\n<p>\u042d\u0442\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u0435: <a href=\"https:\/\/github.com\/JerryI\/MarkovJunior\" rel=\"noopener noreferrer nofollow\">JerryI`MarkovJunior<\/a>. \u041e\u043d\u0430 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u0430 \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430\u043c\u0438 Wolfram. \u0421\u043a\u0430\u0447\u0430\u0439\u0442\u0435 \u0435\u0451 \u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"haskell\">PacletDirectoryLoad[\"MarkovJunior\"]<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0418\u043b\u0438, \u0435\u0441\u043b\u0438 \u0432\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 WLJS Notebook:<\/p>\n<pre><code class=\"haskell\">LPMRepositories[{  \"Github\" -&gt; \"https:\/\/github.com\/JerryI\/MarkovJunior\" -&gt; \"master\"}]<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0417\u0430\u0442\u0435\u043c \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u0435 \u043f\u0430\u043a\u0435\u0442 \u0432 \u043f\u043e\u043b\u0435 \u0438\u043c\u0435\u043d:<\/p>\n<pre><code class=\"haskell\">Needs[\"CoffeeLiqueur`Workshop`MarkovJunior`\" -&gt; \"mj`\"];<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0443\u0437\u043b\u043e\u0432 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u0434\u043b\u044f \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u0441\u0438\u043c\u043c\u0435\u0442\u0440\u0438\u0439:<\/p>\n<pre><code class=\"haskell\">{  1 | All,  _Integer | Infinity,  Automatic | All | None | \"Rotation\" | \"Mirror\" | \"MirrorX\" | \"MirrorY\",  {rules...}}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<h4>\u0426\u0432\u0435\u0442\u044b<\/h4>\n<p>\u0421\u043b\u043e\u0436\u043d\u0430\u044f \u0441\u0446\u0435\u043d\u0430 \u0442\u043e\u0436\u0435 \u0441\u0442\u0440\u043e\u0438\u0442\u0441\u044f \u0438\u0437 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u0448\u0430\u0433\u043e\u0432. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u0431\u0440\u0430\u0437\u0443\u044e\u0442\u0441\u044f \u043d\u0435\u0431\u043e \u0438 \u043f\u043e\u0447\u0432\u0430, \u0437\u0430\u0442\u0435\u043c \u043d\u0430 \u043b\u0438\u043d\u0438\u0438 \u0433\u0440\u0443\u043d\u0442\u0430 \u0432\u044b\u0441\u0430\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u0442\u0435\u0431\u0435\u043b\u044c, \u043f\u043e\u0442\u043e\u043c \u0432\u0435\u0442\u0432\u0438, \u043b\u0438\u0441\u0442\u044c\u044f \u0438 \u0446\u0432\u0435\u0442\u044b. \u0412\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0446\u0432\u0435\u0442\u0430 \u043f\u043e\u043b\u0435\u0437\u043d\u044b \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u043c\u043e\u0433\u0443\u0442 \u0440\u0430\u0437\u043b\u0438\u0447\u0430\u0442\u044c \u00ab\u043e\u0431\u044a\u0435\u043a\u0442 \u0443\u0436\u0435 \u0433\u043e\u0442\u043e\u0432\u00bb \u0438 \u00ab\u043e\u0431\u044a\u0435\u043a\u0442 \u0435\u0449\u0451 \u0440\u0430\u0441\u0442\u0451\u0442\u00bb.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u043c \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435 \u0431\u0435\u0437 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0441\u0430\u0445\u0430\u0440\u0430, \u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0443\u0436\u0430\u0441\u043d\u043e, \u0442\u0430\u043a \u043a\u0430\u043a \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0446\u0432\u0435\u0442\u043e\u0432 \u043d\u0435 \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u044e\u0442\u0441\u044f \u0432 \u0438\u043a\u043e\u043d\u043a\u0438. \u0412\u043f\u0440\u043e\u0447\u0435\u043c \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0432\u0441\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0442\u0430\u043a\u0436\u0435 \u043d\u0430 \u0447\u0438\u0441\u043b\u0430 1,2,3\u2026 \u0431\u0435\u0437 \u043f\u043e\u0442\u0435\u0440\u0438 \u043e\u0431\u0449\u043d\u043e\u0441\u0442\u0438  \ud83d\ude09<\/p>\n<details class=\"spoiler\">\n<summary>\u041f\u0440\u0430\u0432\u0438\u043b\u0430 \u0432\u044b\u0440\u0430\u0449\u0438\u0432\u0430\u043d\u0438\u044f \u0446\u0432\u0435\u0442\u043e\u0432<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"haskell\">nodes = {};AppendTo[nodes, {   1, 1, Automatic, {         Black -&gt; (RGBColor[1, 1, 0])  }}];AppendTo[nodes, {  1, 3, Automatic, {         Black -&gt; (RGBColor[1, 0, 0])  }}];AppendTo[nodes, {  1, Infinity, Automatic, {        {a___, (RGBColor[1, 0, 0]),Black, b___} :&gt; {a, (RGBColor[1, 0, 0]),(RGBColor[1, 0, 0]), b},    {a___, (RGBColor[1, 1, 0]),Black, b___} :&gt; {a, (RGBColor[1, 1, 0]),(RGBColor[1, 1, 0]), b}  }}];AppendTo[nodes, {  All, Infinity, Automatic, {        {a___, (RGBColor[1, 0, 0]), b___} :&gt; {a, (RGBColor[0.87, 0.94, 1]), b},    {a___, (RGBColor[1, 1, 0]), b___} :&gt; {a, (RGBColor[0.6, 0.4, 0.2]), b}  }}];AppendTo[nodes, {  1, Infinity, All, {        {      bf___,      {a1___, (RGBColor[0.87, 0.94, 1]),(RGBColor[0.87, 0.94, 1]),(RGBColor[0.87, 0.94, 1]), b1___},      {a2___, (RGBColor[0.87, 0.94, 1]),(RGBColor[0.87, 0.94, 1]),(RGBColor[0.87, 0.94, 1]), b2___},      {a3___, (RGBColor[0.6, 0.4, 0.2]),(RGBColor[0.6, 0.4, 0.2]),(RGBColor[0.6, 0.4, 0.2]), b3___},      af___    } :&gt; {      bf,      {a1   , (RGBColor[0.87, 0.94, 1]),(RGBColor[0.87, 0.94, 1]),(RGBColor[0.87, 0.94, 1]), b1   },      {a2   , (RGBColor[0.87, 0.94, 1]),(RGBColor[0, 2\/3, 0]),(RGBColor[0.87, 0.94, 1]), b2   },      {a3   , (RGBColor[0.6, 0.4, 0.2]),(RGBColor[0.6, 0.4, 0.2]),(RGBColor[0.6, 0.4, 0.2]), b3   },      af    } \/; Length[{a1}]==Length[{a2}]==Length[{a3}]    }}];AppendTo[nodes, {  1, Infinity, \"MirrorX\", {        {      bf___,      {a1___, (RGBColor[0.87, 0.94, 1]),(RGBColor[0.87, 0.94, 1]),(RGBColor[0.87, 0.94, 1]), b1___},      {a2___, (RGBColor[0.87, 0.94, 1]),(RGBColor[0.87, 0.94, 1]),(RGBColor[0, 2\/3, 0]), b2___},      {a3___, (RGBColor[0.87, 0.94, 1]),(RGBColor[0.87, 0.94, 1]),(RGBColor[0.87, 0.94, 1]), b3___},      af___    } :&gt; {      bf,      {a1   , (RGBColor[0.87, 0.94, 1]),(RGBColor[0.87, 0.94, 1]),(RGBColor[0.87, 0.94, 1]), b1   },      {a2   , (RGBColor[0.87, 0.94, 1]),(RGBColor[0, 2\/3, 0]),(RGBColor[0, 2\/3, 0]), b2   },      {a3   , (RGBColor[0.87, 0.94, 1]),(RGBColor[0.87, 0.94, 1]),(RGBColor[0.87, 0.94, 1]), b3   },      af    } \/; Length[{a1}]==Length[{a2}]==Length[{a3}],    {      bf___,      {a1___, (RGBColor[0.87, 0.94, 1]),(RGBColor[0.87, 0.94, 1]),(RGBColor[0.87, 0.94, 1]), b1___},      {a2___, (RGBColor[0.87, 0.94, 1]),(RGBColor[0.87, 0.94, 1]),(RGBColor[0.87, 0.94, 1]), b2___},      {a3___, (RGBColor[0.87, 0.94, 1]),(RGBColor[0, 2\/3, 0]),(RGBColor[0, 2\/3, 0]), b3___},      af___    } :&gt; {      bf,      {a1   , (RGBColor[0.87, 0.94, 1]),(RGBColor[0.87, 0.94, 1]),(RGBColor[0.87, 0.94, 1]), b1   },      {a2   , (RGBColor[0.87, 0.94, 1]),(RGBColor[0, 2\/3, 0]),(RGBColor[0.87, 0.94, 1]), b2   },      {a3   , (RGBColor[0.87, 0.94, 1]),(RGBColor[0, 2\/3, 0]),(RGBColor[0, 2\/3, 0]), b3   },      af    } \/; Length[{a1}]==Length[{a2}]==Length[{a3}],            {      bf___,      {a0___, (RGBColor[0.87, 0.94, 1]),(RGBColor[0.87, 0.94, 1]),(RGBColor[0.87, 0.94, 1]), b0___},      {a1___, (RGBColor[0.87, 0.94, 1]),(RGBColor[0.87, 0.94, 1]),(RGBColor[0.87, 0.94, 1]), b1___},      {a2___, (RGBColor[0.87, 0.94, 1]),(RGBColor[0.87, 0.94, 1]),(RGBColor[0.87, 0.94, 1]), b2___},      {a3___, (RGBColor[0.87, 0.94, 1]),(RGBColor[0, 2\/3, 0]),(RGBColor[0.87, 0.94, 1]), b3___},      af___    } :&gt; {      bf,      {a0   , (RGBColor[0.87, 0.94, 1]),(RGBColor[0.87, 0.94, 1]),(RGBColor[0.87, 0.94, 1]), b0   },      {a1   , (RGBColor[0.87, 0.94, 1]),(RGBColor[0.87, 0.94, 1]),(RGBColor[0.87, 0.94, 1]), b1   },      {a2   , (RGBColor[0.87, 0.94, 1]),(RGBColor[0, 2\/3, 0]),(RGBColor[0.87, 0.94, 1]), b2   },      {a3   , (RGBColor[0.87, 0.94, 1]),(RGBColor[0, 2\/3, 0]),(RGBColor[0.87, 0.94, 1]), b3   },      af    } \/; Length[{a1}]==Length[{a2}]==Length[{a3}]==Length[{a0}],        {      bf___,      {a0___, (RGBColor[0.87, 0.94, 1]),(RGBColor[0.87, 0.94, 1]),(RGBColor[0.87, 0.94, 1]),(RGBColor[0.87, 0.94, 1]), b0___},      {a1___, (RGBColor[0.87, 0.94, 1]),(RGBColor[0, 2\/3, 0]),(RGBColor[0.87, 0.94, 1]),(RGBColor[0.87, 0.94, 1]), b1___},      {a2___, (RGBColor[0.87, 0.94, 1]),(RGBColor[0, 2\/3, 0]),(RGBColor[0.87, 0.94, 1]),(RGBColor[0.87, 0.94, 1]), b2___},      {a3___, (RGBColor[0.87, 0.94, 1]),(RGBColor[0, 2\/3, 0]),(RGBColor[0.87, 0.94, 1]),(RGBColor[0.87, 0.94, 1]), b3___},      af___    } :&gt; {      bf,      {a0   , (RGBColor[0.87, 0.94, 1]),(RGBColor[0.87, 0.94, 1]),(RGBColor[0.87, 0.94, 1]),(RGBColor[0.87, 0.94, 1]), b0   },      {a1   , (RGBColor[0.87, 0.94, 1]),(RGBColor[0.87, 0.94, 1]),(RGBColor[0.87, 0.94, 1]),(RGBColor[0.87, 0.94, 1]), b1   },      {a2   , (RGBColor[0.87, 0.94, 1]),(RGBColor[0, 2\/3, 0]),(RGBColor[0, 2\/3, 0]),(RGBColor[0.87, 0.94, 1]), b2   },      {a3   , (RGBColor[0.87, 0.94, 1]),(RGBColor[0, 2\/3, 0]),(RGBColor[0.87, 0.94, 1]),(RGBColor[0.87, 0.94, 1]), b3   },      af    } \/; RandomReal[]&lt;0.5 &amp;&amp; Length[{a0}]==Length[{a1}]==Length[{a2}]==Length[{a3}],    {      bf___,      {a1___, (RGBColor[0.87, 0.94, 1]),(RGBColor[0.87, 0.94, 1]),(RGBColor[0.87, 0.94, 1]), b1___},      {a2___, (RGBColor[0.87, 0.94, 1]),(RGBColor[0.87, 0.94, 1]),(RGBColor[0.87, 0.94, 1]), b2___},      {a3___, (RGBColor[0.87, 0.94, 1]),(RGBColor[0, 2\/3, 0]),(RGBColor[0.87, 0.94, 1]), b3___},      af___    } :&gt; {      bf,      {a1   , (RGBColor[0.87, 0.94, 1]),(RGBColor[0.87, 0.94, 1]),(RGBColor[0.87, 0.94, 1]), b1   },      {a2   , (RGBColor[0.87, 0.94, 1]),(RGBColor[1, 0, 0]),(RGBColor[0.87, 0.94, 1]), b2   },      {a3   , (RGBColor[0.87, 0.94, 1]),(RGBColor[0, 2\/3, 0]),(RGBColor[0.87, 0.94, 1]), b3   },      af    } \/; RandomReal[]&lt;0.2 &amp;&amp; Length[{a1}]==Length[{a2}]==Length[{a3}]  }}];AppendTo[nodes, {  All, Infinity, All, {        {      bf___,      {a0___, (RGBColor[0.87, 0.94, 1]),(RGBColor[0.87, 0.94, 1]),(RGBColor[0.87, 0.94, 1]), b0___},      {a1___, (RGBColor[0.87, 0.94, 1]),(RGBColor[1, 0, 0]),(RGBColor[0.87, 0.94, 1]), b1___},      {a2___, (RGBColor[0.87, 0.94, 1]),(RGBColor[0, 2\/3, 0]),(RGBColor[0.87, 0.94, 1]), b2___},      {a3___, (RGBColor[0.87, 0.94, 1]),(RGBColor[0, 2\/3, 0]),(RGBColor[0.87, 0.94, 1]), b3___},      af___    } :&gt; {      bf,      {a0   , (RGBColor[0.87, 0.94, 1]),(RGBColor[1, 0, 0]),(RGBColor[0.87, 0.94, 1]), b0   },      {a1   , (RGBColor[1, 0, 0]),(RGBColor[1, 1, 0]),(RGBColor[1, 0, 0]), b1   },      {a2   , (RGBColor[0.87, 0.94, 1]),(RGBColor[1, 0, 0]),(RGBColor[0.87, 0.94, 1]), b2   },      {a3   , (RGBColor[0.87, 0.94, 1]),(RGBColor[0, 2\/3, 0]),(RGBColor[0.87, 0.94, 1]), b3   },      af    } \/; Length[{a0}]==Length[{a1}]==Length[{a2}]==Length[{a3}]    }}];<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<p>\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435<\/p>\n<pre><code class=\"haskell\">state = mj`MarkovState[Table[Black, {30}, {30}], nodes]<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440<\/p>\n<pre><code class=\"haskell\">(state=mj`Propagate[state]) \/\/ mj`GetArray \/\/ ArrayPlot<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/5c\/45\/d0\/5c45d042c3a802131bcc763cdfbac10a.gif\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/webt\/5c\/45\/d0\/5c45d042c3a802131bcc763cdfbac10a.gif 780w,&#10;       https:\/\/habrastorage.org\/webt\/5c\/45\/d0\/5c45d042c3a802131bcc763cdfbac10a.gif 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<h4>\u0421\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u044f \u043f\u0430\u0434\u0430\u044e\u0449\u0435\u0433\u043e \u043f\u0435\u0441\u043a\u0430<\/h4>\n<p>\u0414\u043b\u044f \u043f\u0435\u0441\u043a\u0430 \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u0441\u0434\u0432\u0438\u043d\u0443\u0442\u044c \u0447\u0430\u0441\u0442\u0438\u0446\u0443 \u0432\u043d\u0438\u0437. \u0415\u0441\u043b\u0438 \u043a\u043b\u0435\u0442\u043a\u0430 \u0441\u043d\u0438\u0437\u0443 \u0437\u0430\u043d\u044f\u0442\u0430, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b \u0434\u0438\u0430\u0433\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u0445\u043e\u0434\u044b; \u0435\u0441\u043b\u0438 \u0438 \u043e\u043d\u0438 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b, \u043f\u0435\u0441\u0447\u0438\u043d\u043a\u0430 \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u043d\u0430 \u043c\u0435\u0441\u0442\u0435:<\/p>\n<pre><code>one  \u043f\u043e\u043a\u0430 \u0435\u0441\u0442\u044c \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f:    1       0    0  \u2192   1    10     01    1x \u2192  1x    01     10    x1 \u2192  x1<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0418 \u0432\u043e\u0442 \u043a\u0430\u043a \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0432 \u043a\u043e\u0434\u0435. \u0417\u0434\u0435\u0441\u044c \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0434\u0432\u0443\u043c\u0435\u0440\u043d\u044b\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0438 \u0432\u044b\u043d\u0443\u0436\u0434\u0435\u043d\u044b \u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0447\u0438\u0441\u043b\u043e \u0440\u044f\u0434\u043e\u0432 \u0441\u043b\u0435\u0432\u0430 \u0438 \u0441\u043f\u0440\u0430\u0432\u0430 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442<\/p>\n<pre><code class=\"haskell\">nodes = {};AppendTo[nodes, {  1, Infinity, None, {    {      bf___,      {a1___, 1, b1___},      {a2___, 0, b2___},      af___    } :&gt; {      bf,      {a1   , 0, b1   },      {a2   , 1, b2   },      af    } \/; Length[{a1}]==Length[{a2}],        {      bf___,      {a1___,    0,    1,  b1___},      {a2___,    k_,    1,  b2___},      af___    } :&gt; {      bf,      {a1   ,    1,    0,  b1   },      {a2   ,    k,    1,  b2   },      af    } \/; Length[{a1}]==Length[{a2}],    {      bf___,      {a1___,    1,    0,  b1___},      {a2___,    1,    k_,  b2___},      af___    } :&gt; {      bf,      {a1   ,    0,    1,  b1   },      {a2   ,    1,    k,  b2   },      af    } \/; Length[{a1}]==Length[{a2}]  }}];state = mj`MarkovState[Table[RandomChoice[{0,0,0,0,0,1}], {20}, {20}], nodes];<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/3b\/ae\/33\/3bae336430c9b0f7a0304e79873b9519.gif\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/webt\/3b\/ae\/33\/3bae336430c9b0f7a0304e79873b9519.gif 780w,&#10;       https:\/\/habrastorage.org\/webt\/3b\/ae\/33\/3bae336430c9b0f7a0304e79873b9519.gif 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u041a\u0430\u043a-\u0442\u043e \u0441\u043a\u0443\u0447\u043d\u043e\u2026 \u0410 \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043b\u0430\u043d\u0434\u0448\u0430\u0444\u0442 \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u043a\u0430\u043a \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0441 \u043d\u0438\u043c \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c<\/p>\n<details class=\"spoiler\">\n<summary>\u041f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u043d\u044b\u0439 \u043b\u0430\u043d\u0434\u0448\u0430\u0444\u0442<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"haskell\">nodes = {};AppendTo[nodes, {  1, 2, None, {    {bf___,    {0, b1__}} :&gt; {bf,                    {5, b1}},    {bf___,    {b1__, 0}} :&gt; {bf,                    {b1, 5}}      } }];AppendTo[nodes, {  1, 13, None, {    {      bf___,      {a1___, 0, b1___},      {a2___, 5, b2___},      af___    } :&gt; {      bf,      {a1,    5, b1},      {a2,    5, b2},      af    }   \/; Length[{a1}]==Length[{a2}]   } }];AppendTo[nodes, {  All, Infinity, None, {    {      bf___,      {a1___, 5, 0, b1___},      {a2___, k_, 0, b2___},      af___    } :&gt; {      bf,      {a1,    5, 0, b1},      {a2,    k, 5, b2},      af    }   \/; Length[{a1}]==Length[{a2}],            {      bf___,      {a1___, 0, 5, b1___},      {a2___, 0, k_, b2___},      af___    } :&gt; {      bf,      {a1,    0, 5, b1},      {a2,    5, k, b2},      af    }   \/; Length[{a1}]==Length[{a2}]      } }];AppendTo[nodes, {  All, Infinity, None, {    {      bf___,      {a1___, 5, b1___},      {a2___, 0, b2___},      af___    } :&gt; {      bf,      {a1,    5, b1},      {a2,    5, b2},      af    }   \/; Length[{a1}]==Length[{a2}]   } }];AppendTo[nodes, {  All, Infinity, None, {    {      {a1___, 0, b1___},      {a2___, 0, b2___},      {a3___, 0, b3___},      af___    } :&gt; {      {a1,    1, b1},      {a2,    1, b2},      {a3,    1, b3},      af    }   \/; Length[{a1}]==Length[{a2}]==Length[{a3}]    } }];AppendTo[nodes, {  1, Infinity, None, {    {      bf___,      {a1___, 1, b1___},      {a2___, 0, b2___},      af___    } :&gt; {      bf,      {a1   , 0, b1   },      {a2   , 1, b2   },      af    } \/; Length[{a1}]==Length[{a2}],        {      bf___,      {a1___,    0,    1,  b1___},      {a2___,    k_,    1,  b2___},      af___    } :&gt; {      bf,      {a1   ,    1,    0,  b1   },      {a2   ,    k,    1,  b2   },      af    } \/; Length[{a1}]==Length[{a2}],    {      bf___,      {a1___,    1,    0,  b1___},      {a2___,    1,    k_,  b2___},      af___    } :&gt; {      bf,      {a1   ,    0,    1,  b1   },      {a2   ,    1,    k,  b2   },      af    } \/; Length[{a1}]==Length[{a2}]  }}];state = mj`MarkovState[Table[0, {20}, {20}], nodes];<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/b2\/08\/df\/b208df118f3455cd8429ae3ad9a11cc2.gif\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/webt\/b2\/08\/df\/b208df118f3455cd8429ae3ad9a11cc2.gif 780w,&#10;       https:\/\/habrastorage.org\/webt\/b2\/08\/df\/b208df118f3455cd8429ae3ad9a11cc2.gif 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u041c\u044b \u0442\u0443\u0442 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u0444\u0438\u0437\u0438\u043a\u0443 \u0441\u043f\u043b\u043e\u0448\u043d\u043e\u0439 \u0441\u0440\u0435\u0434\u044b, \u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u043f\u0440\u0430\u0432\u0434\u043e\u043f\u043e\u0434\u043e\u0431\u043d\u043e.<\/p>\n<h4>\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f<\/h4>\n<p>\u042d\u0442\u043e\u0442 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440 \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u043d\u043e \u043c\u0430\u043b. \u041e\u043d \u043d\u0435 \u043f\u0440\u0435\u0442\u0435\u043d\u0434\u0443\u0435\u0442 \u043d\u0430 \u043f\u043e\u043b\u043d\u043e\u0442\u0443 MarkovJunior. \u041f\u043e \u0441\u0432\u043e\u0435\u0439 \u0441\u0443\u0442\u0438 \u044d\u0442\u043e\u0442 \u043f\u043e\u0434\u0445\u043e\u0434 \u0441\u0442\u0440\u043e\u0438\u0442 \u0441\u043b\u043e\u0436\u043d\u044b\u0435 \u043a\u043b\u0435\u0442\u043e\u0447\u043d\u044b\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u044b \u043f\u043e\u0432\u0435\u0440\u0445 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u043e\u0432 Wolfram Language. \u0417\u0430 \u044d\u0442\u0443 \u0433\u0438\u0431\u043a\u043e\u0441\u0442\u044c \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u043b\u0430\u0442\u0438\u0442\u044c: \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u043d\u044b\u0435 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u044b \u0432\u0440\u043e\u0434\u0435 <code>___<\/code> \u043c\u043e\u0433\u0443\u0442 \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0441 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u043c\u0438 \u0440\u0430\u0437\u043d\u043e\u0439 \u0434\u043b\u0438\u043d\u044b \u0438 \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u043e\u0437\u0438\u0446\u0438\u044f\u0445. \u041a\u043e\u0433\u0434\u0430 \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u0434\u0430\u0451\u0442 \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0439, <code>ReplaceList<\/code> \u0441\u043f\u043e\u0441\u043e\u0431\u0435\u043d \u0431\u044b\u0441\u0442\u0440\u043e \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0441\u0435\u0442\u043e\u043a, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0434\u0443\u0431\u043b\u0438\u0440\u0443\u044e\u0449\u0438\u0435\u0441\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b. \u0427\u0430\u0441\u0442\u044c \u044d\u0442\u043e\u0433\u043e \u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0443\u0441\u0442\u0440\u0430\u043d\u0438\u0442\u044c, \u043d\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u0439 (<code>\/;<\/code>) \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u043d\u044b\u0445 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u043e\u0432 \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043e\u0441\u0442\u0430\u0432\u0430\u043b\u043e\u0441\u044c \u0431\u044b \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0437\u0430\u0442\u0440\u0430\u0442\u043d\u044b\u043c. \u0422\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435, WL \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u0447\u0435\u043d\u044c \u0443\u0434\u043e\u0431\u0435\u043d \u0434\u043b\u044f \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043b\u0435\u0442\u043e\u0447\u043d\u044b\u0445 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u043e\u0432 \u0438 \u0441\u0438\u0441\u0442\u0435\u043c \u043f\u0440\u0430\u0432\u0438\u043b \u0437\u0430\u043c\u0435\u043d.<\/p>\n<\/div>\n<p>\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\/articles\/1065604\/\">https:\/\/habr.com\/ru\/articles\/1065604\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u0410\u043b\u0433\u043e\u0440\u0438\u0444\u043c \u041c\u0430\u0440\u043a\u043e\u0432\u0430 \u0438\u043b\u0438 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u041c\u0430\u0440\u043a\u043e\u0432\u0430 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0444\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u043d\u0438\u044f \u0441\u0442\u0440\u043e\u043a. \u041e\u043d\u0430 \u0441\u043d\u043e\u0432\u0430 \u0438 \u0441\u043d\u043e\u0432\u0430 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442 \u0441\u043b\u043e\u0432\u0430 \u043f\u043e \u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0435\u043d\u043d\u043e\u043c\u0443 \u0441\u043f\u0438\u0441\u043a\u0443 \u043f\u0440\u0430\u0432\u0438\u043b, \u043f\u043e\u043a\u0430 \u043d\u0435 \u0437\u0430\u043a\u043e\u043d\u0447\u0430\u0442\u0441\u044f \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0438\u043b\u0438 \u043f\u043e\u043f\u0430\u0434\u0435\u0442\u0441\u044f \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u0430\u044f \u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u0443\u044e\u0449\u0430\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c. \u041d\u0410\u041c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u043d\u044b\u043c \u043f\u043e \u0422\u044c\u044e\u0440\u0438\u043d\u0433\u0443 \u0438 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u0445\u043e\u0436 \u043d\u0430 \u0435\u0433\u043e \u043c\u0430\u0448\u0438\u043d\u0443. \u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435, \u043a \u0446\u0435\u043f\u044f\u043c \u041c\u0430\u0440\u043a\u043e\u0432\u0430 \u044d\u0442\u043e \u043d\u0435 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f: \u0432 \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u043c\u0435 \u043d\u0435\u0442 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u0435\u0439 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430\u042d\u0442\u0430 \u043a\u0440\u043e\u0448\u0435\u0447\u043d\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0432\u044b\u0440\u0430\u0437\u0438\u0442\u0435\u043b\u044c\u043d\u0430 \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0445 (\u043d\u0435 \u0418\u0418!) \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 \u043f\u0440\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0439. \u0412\u0441\u0451, \u0447\u0442\u043e \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0430\u0432\u0438\u043b \u0437\u0430\u043c\u0435\u043d \u0434\u043b\u044f \u043c\u0435\u043d\u044f \u0441\u0440\u0430\u0437\u0443 \u043d\u0430\u0432\u0435\u0432\u0430\u0435\u0442 \u043c\u044b\u0441\u043b\u0438 \u043e \u042f\u041f, \u0433\u0434\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u043e \u0432\u043e\u043a\u0440\u0443\u0433 \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0438 \u0437\u0430\u043c\u0435\u043d\u044b \u0438\u0445 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u043c\u0438 &#8212; Wolfram Language. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043a\u0442\u043e-\u0442\u043e \u0438\u0437 \u0432\u0430\u0441 \u0435\u0433\u043e \u0437\u043d\u0430\u0435\u0442 \u043f\u043e \u043f\u0440\u043e\u043f\u0440\u0438\u0435\u0442\u0430\u0440\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 Mathematica, \u043d\u043e \u0441 2019 \u0433\u043e\u0434\u0430 \u0435\u043c\u0443 \u043c\u043e\u0436\u043d\u043e \u043a\u0443\u0448\u0430\u0442\u044c \u043a\u0430\u043a \u043f\u0438\u0442\u043e\u043d \u0438\u0437 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 &#8212; Freeware Wolfram Engine, \u0430 \u0441 2024 \u0438 \u0441\u0430\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0431\u043b\u043e\u043a\u043d\u043e\u0442\u043e\u0432 \u0432 \u0432\u0438\u0434\u0435 FOSS \u0438\u043b\u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u043a VSCode.\u041d\u0430 \u0425\u0430\u0431\u0440\u0435 \u0443\u0436\u0435 \u043f\u0438\u0441\u0430\u043b\u0438 \u043f\u0440\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0444\u043c\u044b, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0438\u0445 \u0441\u0442\u043e\u0445\u0430\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043e\u0431\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0438 \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0440\u043e\u0448\u043e\u041d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u041c\u0430\u0440\u043a\u043e\u0432\u0430 \u043a\u0430\u043a \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u044f\u0437\u044b\u043a\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f\u0421\u0442\u043e\u0445\u0430\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u044f\u0437\u044b\u043a \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 \u041c\u0430\u0440\u043a\u043e\u0432\u0430\u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u044d\u0442\u043e\u0442 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u0438 \u043f\u043e\u0441\u043b\u0443\u0436\u0438\u043b \u0432\u0434\u043e\u0445\u043d\u043e\u0432\u0435\u043d\u0438\u0435\u043c \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438. ~\u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0438 2 \u043a\u043e\u043f\u0435\u0439\u043a\u0438~ \u041e\u0434\u043d\u0430\u043a\u043e \u0442\u0435\u043c\u0430 \u0438\u043d\u0444\u0435\u0440\u0435\u043d\u0441\u0430 \u0438 \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u0430\u0432\u0438\u043b \u043d\u0435 \u0431\u044b\u043b\u0430 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0440\u0430\u0441\u043a\u0440\u044b\u0442\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0437\u0434\u0435\u0441\u044c \u043c\u044b \u0435\u0451 \u043e\u0442\u0440\u0435\u0432\u0435\u0440\u0441\u0438\u043c\u2026\u0410\u043d\u0434\u0440\u0435\u0439 \u0410\u043d\u0434\u0440\u0435\u0435\u0432\u0438\u0447 \u041c\u0430\u0440\u043a\u043e\u0432-\u043c\u043b\u0430\u0434\u0448\u0438\u0439\u0412 \u043a\u043e\u043d\u0446\u0435 1940-\u0445 \u041c\u0430\u0440\u043a\u043e\u0432 (\u041c\u043b\u0430\u0434\u0448\u0438\u0439) \u0441\u0444\u043e\u0440\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u043b \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b (\u0430\u043b\u0433\u043e\u0440\u0438\u0444\u043c\u044b), \u0438\u0441\u0441\u043b\u0435\u0434\u0443\u044f \u0444\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u043d\u044f\u0442\u0438\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u043c\u043e\u0441\u0442\u0438. \u0423 \u0430\u043b\u0433\u043e\u0440\u0438\u0444\u043c\u0430 \u0435\u0441\u0442\u044c \u0430\u043b\u0444\u0430\u0432\u0438\u0442 (\u043f\u0443\u0441\u0442\u044c \u0431\u0443\u0434\u0435\u0442 ABC) \u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0435\u043d\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u043f\u0440\u0430\u0432\u0438\u043b \u0437\u0430\u043c\u0435\u043d\u044b:A -&gt; BB -&gt; CEnd\u041d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u0448\u0430\u0433\u0435 \u043c\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0441\u0432\u0435\u0440\u0445\u0443 \u0432\u043d\u0438\u0437, \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u043f\u0435\u0440\u0432\u043e\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u043e\u0435, \u0437\u0430\u043c\u0435\u043d\u044f\u0435\u0442 \u0435\u0433\u043e \u0441\u0430\u043c\u043e\u0435 \u043b\u0435\u0432\u043e\u0435 \u0432\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0435 \u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0437\u0430\u043d\u043e\u0432\u043eABBABBBABBBBCBBBCCBBCCCBCCCC\u041f\u0440\u043e\u0441\u0442\u043e, \u0432\u0435\u0440\u043d\u043e? \u0420\u0430\u0431\u043e\u0442\u0430 \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u044e\u0449\u0435\u0433\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u0430, \u043b\u0438\u0431\u043e \u043a\u043e\u0433\u0434\u0430 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u043f\u0440\u0430\u0432\u0438\u043b \u043d\u0435 \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c. \u041d\u043e \u0442\u0430\u043a\u0430\u044f \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u0446\u0435\u043f\u043e\u0447\u043a\u0430 \u0437\u0430\u043c\u0435\u043d \u043d\u0435 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0433\u043b\u0430\u0432\u043d\u043e\u0433\u043e \u2013 \u0442\u0430\u043a\u0438\u043c\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u0430\u043c\u0438 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435. \u0412\u043e\u0437\u044c\u043c\u0451\u043c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u0430:BA -&gt; AB\u0422\u043e\u0433\u0434\u0430 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043cBBABABABBAABBBAABBABABABBAABBB\u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0438\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438.\u0412\u043e\u0437\u043d\u044f \u0441\u043e \u0441\u0442\u0440\u043e\u0447\u043a\u0430\u043c\u0438\u0412 Wolfram Language \u0434\u043b\u044f \u0441\u0442\u0440\u043e\u043a \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0443\u0434\u043e\u0431\u043d\u044b\u0435 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430 \u0437\u0430\u043c\u0435\u043d\u044b \u043f\u043e\u0434\u0441\u0442\u0440\u043e\u043a &#8212; StringReplace. \u041d\u043e \u0435\u0433\u043e \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0430 \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u043e\u0434\u043d\u043e\u043c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c \u043c\u0435\u0441\u0442\u0435: \u043c\u0430\u0440\u043a\u043e\u0432\u0441\u043a\u0438\u0439 \u0448\u0430\u0433 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442 \u043f\u0435\u0440\u0432\u043e\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u043e\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0440\u043e\u0432\u043d\u043e \u043e\u0434\u043d\u0443 \u0437\u0430\u043c\u0435\u043d\u0443. \u0421\u043f\u0438\u0441\u043e\u043a \u043f\u0440\u0430\u0432\u0438\u043b \u0432 StringReplace &#8212; \u044d\u0442\u043e \u043d\u0430\u0431\u043e\u0440 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432 \u0437\u0430 \u043e\u0434\u0438\u043d \u043f\u0440\u043e\u0445\u043e\u0434.\u0412 \u043f\u0435\u0440\u0432\u044b\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445 \u043c\u044b \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u044e\u0449\u0438\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0438 \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u043e \u043d\u0438 \u043e\u0434\u043d\u043e.StringReplace[&#171;AAA&#187;, {&#171;A&#187; -&gt; &#171;B&#187;, &#171;B&#187; -&gt; &#171;C&#187;}]&#187;BBB&#187;\u041c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043e\u0436\u0438\u0434\u0430\u0442\u044c, \u0447\u0442\u043e \u0441\u043d\u0430\u0447\u0430\u043b\u0430 A \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u044f\u0442\u0441\u044f \u0432 B, \u0430 \u0437\u0430\u0442\u0435\u043c \u044d\u0442\u0438 B \u0432 \u0442\u043e\u043c \u0436\u0435 \u0432\u044b\u0437\u043e\u0432\u0435 \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u044f\u0442\u0441\u044f \u0432 C. \u041d\u043e \u043d\u043e\u0432\u044b\u0435 B \u0443\u0436\u0435 \u043d\u0435 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0432\u0442\u043e\u0440\u044b\u043c \u043f\u0440\u0430\u0432\u0438\u043b\u043e\u043c. \u041d\u0443\u0436\u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0430\u0445\u043e\u0434\u0438\u0442 \u043f\u0435\u0440\u0432\u043e\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0435\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u0437\u0430\u043c\u0435\u043d\u044f\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0433\u043e \u043b\u0435\u0432\u043e\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435 \u0438 \u0437\u0430\u0442\u0435\u043c \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441ClearAll[markovStep];markovStep[rules_][s_String] := Module[{rule},  rule = SelectFirst[    rules,    StringContainsQ[s, First[#]] &amp;,    Missing[&#171;NotFound&#187;]  ];  If[MissingQ[rule], s, StringReplace[s, rule, 1]]];rules = {&#171;A&#187; -&gt; &#171;B&#187;, &#171;B&#187; -&gt; &#171;C&#187;};NestWhileList[markovStep[rules], &#171;AAA&#187;, UnsameQ, 2, 12]\u0421\u043c\u043e\u0442\u0440\u0438\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442{&#171;BAA&#187;, &#171;CAA&#187;, &#171;CBA&#187;, &#171;CCA&#187;, &#171;CCB&#187;, &#171;CCC&#187;, &#171;CCC&#187;, &#171;CCC&#187;} SelectFirst \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 \u043f\u0440\u0430\u0432\u0438\u043b, \u0430 \u0442\u0440\u0435\u0442\u0438\u0439 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 StringReplace \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u0435\u0442 \u0437\u0430\u043c\u0435\u043d\u0443 \u043e\u0434\u043d\u0438\u043c \u043b\u0435\u0432\u044b\u043c \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435\u043c. NestWhileList \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0435 \u0441\u043b\u043e\u0432\u0430 \u0438 \u043f\u0440\u0435\u043a\u0440\u0430\u0449\u0430\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0443, \u043a\u043e\u0433\u0434\u0430 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 \u0448\u0430\u0433 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043c\u0435\u043d\u044f\u0435\u0442. \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0447\u0438\u0441\u043b\u043e\u0432\u043e\u0439 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 &#8212; \u043f\u0440\u0435\u0434\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u0435\u043b\u044c \u0434\u043b\u044f \u0441\u0438\u0441\u0442\u0435\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u044e\u0442\u0441\u044f.\u0421 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u043f\u0440\u0430\u0432\u0438\u043b\u043e\u043c BA \u2192 AB \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u0435 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u043d\u0438\u0435 \u0432\u0435\u0434\u0451\u0442 \u0441\u0435\u0431\u044f \u043a\u0430\u043a \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430 \u043f\u0443\u0437\u044b\u0440\u044c\u043a\u043e\u043c: \u043a\u0430\u0436\u0434\u044b\u0439 \u0448\u0430\u0433 \u0441\u0434\u0432\u0438\u0433\u0430\u0435\u0442 \u043e\u0434\u043d\u0443 B \u0432\u043f\u0440\u0430\u0432\u043e.rules = {&#171;BA&#187; -&gt; &#171;AB&#187;};NestWhileList[markovStep[rules], &#171;BABABA&#187;, UnsameQ, 2, 20]{&#171;ABBABA&#187;, &#171;ABABBA&#187;, &#171;AABBBA&#187;, &#171;AABBAB&#187;, &#171;AABABB&#187;, &#171;AAABBB&#187;}\u0422\u0440\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u043d\u0438\u0436\u0435 \u0443\u0436\u0435 \u043e\u0431\u0440\u0430\u0437\u0443\u044e\u0442 \u0446\u0438\u043a\u043b, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u0447\u0438\u0441\u043b\u0430 \u0448\u0430\u0433\u043e\u0432 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u043a\u0441\u0442\u0430\u0442\u0438rules = {  &#171;BA&#187; -&gt; &#171;AB&#187;,  &#171;BB&#187; -&gt; &#171;AA&#187;,  &#171;A&#187; -&gt; &#171;B&#187;};NestList[markovStep[rules], &#171;AAA&#187;, 12]{&#171;AAA&#187;,&#187;AAA&#187;,&#187;BAA&#187;,&#187;ABA&#187;,&#187;ABA&#187;,&#187;BBA&#187;,&#187;BAB&#187;,&#187;BAB&#187;,&#187;BBB&#187;}\u041e\u0442 \u0441\u0442\u0440\u043e\u043a \u043a \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u043c\u0421\u0442\u0440\u043e\u043a\u0438 \u0437\u0434\u0435\u0441\u044c \u043d\u0443\u0436\u043d\u044b \u0431\u044b\u043b\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043d\u0430 \u043d\u0438\u0445 \u0445\u043e\u0440\u043e\u0448\u043e \u0432\u0438\u0434\u043d\u043e \u043c\u0435\u0445\u0430\u043d\u0438\u043a\u0443 \u0438 \u0431\u043b\u0438\u0437\u043a\u043e \u043a \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0442\u0440\u0430\u043a\u0442\u043e\u0432\u043a\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0444\u043c\u043e\u0432. \u041f\u0440\u0430\u0432\u0438\u043b\u0430 Wolfram Language \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0448\u0438\u0440\u0435: \u043e\u043d\u0438 \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u044e\u0442 \u043b\u044e\u0431\u044b\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f: \u0447\u0438\u0441\u043b\u0430, \u0441\u043f\u0438\u0441\u043a\u0438, \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f, \u0446\u0432\u0435\u0442\u0430, \u0433\u0440\u0430\u0444\u044b \u0438 \u043b\u044e\u0431\u0443\u044e \u0434\u0440\u0443\u0433\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443. \u0412 \u044d\u0442\u043e\u043c \u0441\u043c\u044b\u0441\u043b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438 \u043a\u043e\u0434 &#8212; \u044d\u0442\u043e \u043e\u0434\u043d\u043e \u0438 \u0442\u043e \u0436\u0435.\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0443\u0436\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0430\u0432\u0438\u043b\u043e\u043c:f[x_] := x + 1DownValues[f]{HoldPattern[f[x_]] :&gt; x + 1}\u0412 \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u043e\u0439 \u0442\u0435\u0440\u043c\u0438\u043d\u043e\u043b\u043e\u0433\u0438\u0438 \u044d\u0442\u043e \u043e\u0431\u044b\u0447\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044ff[3]f[Red]41 + RGBColor[1,0,0]\u0427\u0442\u0435\u043d\u0438\u0435 \u0436\u0435 \u0442\u0430\u043a\u043e\u0435: \u043a\u043e\u0433\u0434\u0430 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u043f\u043e\u0434 f[x_], \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0435\u0433\u043e \u043d\u0430 x + 1. \u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u043e\u0431\u0440\u0430\u0437\u0446\u0430 x_ \u0441\u0432\u044f\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0439 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 \u0438 \u0434\u0435\u043b\u0430\u0435\u0442 \u0435\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u043c \u0441\u043f\u0440\u0430\u0432\u0430.\u041f\u0440\u0438\u043c\u0435\u0440 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u043e\u0432_        (* \u043e\u0434\u043d\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435  aka any *)__       (* \u043e\u0434\u043d\u043e \u0438\u043b\u0438 \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439 *)___      (* \u043d\u043e\u043b\u044c \u0438\u043b\u0438 \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439 *)_Integer (* \u043e\u0434\u043d\u043e \u0446\u0435\u043b\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043e\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435  *){_, _}   (* \u0441\u043f\u0438\u0441\u043e\u043a \u0440\u043e\u0432\u043d\u043e \u0438\u0437 \u0434\u0432\u0443\u0445 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439 *)3          (* \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0438\u0441\u043b\u043e 3 *)_?(Mod[#,2]==0&amp;).   (* \u0432\u0441\u0435 \u0447\u0438\u0441\u043b\u0430 \u0434\u0435\u043b\u0438\u043c\u044b\u0435 \u043d\u0430 2 \u0431\u0435\u0437 \u043e\u0441\u0442\u0430\u0442\u043a\u0430 *)\u041f\u0440\u044f\u043c\u044b\u0435 \u0438 \u043e\u0442\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043c\u043e\u0433\u0443\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043a\u0430\u043a \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u043e\u0435 \u0430\u0441\u0441\u043e\u0446\u0438\u0430\u0442\u0438\u0432\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435:h[_] = Missing[];setHash[key_, value_] := h[key] = value;getHash[key_] := h[key];getHash[31]setHash[31, Red];getHash[31]getHash[32]Missing[]RedRedMissing[]\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 h[31] \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0438\u043c\u0435\u0435\u0442 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 \u043d\u0430\u0434 \u043e\u0431\u0449\u0438\u043c h[_].\u041c\u0430\u0448\u0438\u043d\u0430 \u0437\u0430\u043c\u0435\u043d \u043d\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f\u0445\u0412\u0435\u0440\u043d\u0451\u043c\u0441\u044f \u043a \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0435, \u043d\u043e \u0437\u0430\u043c\u0435\u043d\u0438\u043c \u0441\u0438\u043c\u0432\u043e\u043b\u044b \u0446\u0432\u0435\u0442\u0430\u043c\u0438 (\u043f\u043e\u0447\u0435\u043c\u0443 \u0431\u044b \u0438 \u043d\u0435\u0442). \u041f\u0440\u0430\u0432\u0438\u043b\u043e Blue, Red \u2192 Red, Blue \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044f\u043c\u0438 \u0434\u043e \u0438 \u043f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0438\u043d\u0435-\u043a\u0440\u0430\u0441\u043d\u043e\u0439 \u043f\u0430\u0440\u044b:ClearAll[apply];apply[{b___, Blue, Red, a___}] := {b, Red, Blue, a};apply[any_] := any;FixedPoint[apply, {Blue, Red, Blue, Red, Blue, Red}]{Red,Red,Red,Blue,Blue,Blue}FixedPoint \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u0442 apply, \u043f\u043e\u043a\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043d\u0435 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043d\u0435\u0442 \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f. \u041e\u0442\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 (:=) apply[any_] := any \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0437\u0430\u0434\u0430\u0451\u0442 \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u043c\u0430\u0440\u043a\u043e\u0432\u0441\u043a\u0430\u044f \u043c\u0430\u0448\u0438\u043d\u0430, \u043f\u043e\u0447\u0442\u0438 \u0446\u0435\u043b\u0438\u043a\u043e\u043c \u0441\u043e\u0431\u0440\u0430\u043d\u043d\u0430\u044f \u0438\u0437 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0438 \u0442\u0438\u043f\u043e\u0432 \u044f\u0437\u044b\u043a\u0430. \u041f\u043e\u0445\u043e\u0436\u0435, \u0437\u0434\u0435\u0441\u044c \u043c\u044b \u043d\u0435\u043d\u0430\u0434\u043e\u043b\u0433\u043e \u043e\u0431\u043e\u0433\u043d\u0430\u043b\u0438 TypeScript \u043f\u043e \u0432\u044b\u0440\u0430\u0437\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438.\u0417\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u043c\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f\u0412 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u043c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0435 \u041c\u0430\u0440\u043a\u043e\u0432\u0430 \u043d\u0435\u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u043e\u0441\u0442\u044c \u0432\u044b\u0431\u043e\u0440\u0430 \u0437\u0430\u043c\u0435\u043d \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u043e\u0432 \u0432 \u0441\u0442\u0440\u043e\u043a\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u043e: \u0432\u0441\u0435\u0433\u0434\u0430 \u0431\u0435\u0440\u0435\u0442\u0441\u044f \u0441\u0430\u043c\u043e\u0435 \u043b\u0435\u0432\u043e\u0435 \u0438\u0437 \u043d\u0438\u0445 \u043f\u043e \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044e \u043a \u0446\u0435\u043b\u043e\u0439 \u0441\u0440\u043e\u043a\u0435. \u041d\u0430 \u0434\u0432\u0443\u043c\u0435\u0440\u043d\u043e\u0439 \u0441\u0435\u0442\u043a\u0435 \u00ab\u0441\u0430\u043c\u043e\u0435 \u043b\u0435\u0432\u043e\u0435\u00bb \u0443\u0436\u0435 \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0447\u0435\u0441\u043a\u0438 \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u043f\u043e\u043d\u044f\u0442\u0438\u0435\u043c. \u041c\u043e\u0436\u043d\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043f\u043e\u0441\u0442\u0440\u043e\u0447\u043d\u044b\u0439 \u043e\u0431\u0445\u043e\u0434, \u043d\u043e \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043e\u0447\u0435\u043d\u044c \u0447\u0430\u0441\u0442\u043d\u044b\u043c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 (\u0438 \u043d\u0435\u0441\u0438\u043c\u043c\u0435\u0442\u0440\u0438\u0447\u043d\u044b\u043c).\u0418\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0440\u0435\u0448\u0430\u0435\u0442 \u0432\u0434\u043e\u0445\u043d\u043e\u0432\u0438\u0432\u0448\u0438\u0439 \u0441\u0442\u0430\u0442\u044c\u044e MarkovJunior. \u0412 \u043d\u0451\u043c \u0435\u0441\u0442\u044c \u0434\u0432\u0430 \u0432\u0430\u0436\u043d\u044b\u0445 \u0442\u0438\u043f\u0430 \u043f\u0440\u0430\u0432\u0438\u043b \u0437\u0430\u043c\u0435\u043d\u044b (\u0438\u043b\u0438 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 \u0434\u043b\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043f\u0440\u0430\u0432\u0438\u043b):exists: \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u043e\u0434\u043d\u0443 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0443\u044e \u0437\u0430\u043c\u0435\u043d\u0443;forall: \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043d\u0435\u043f\u0435\u0440\u0435\u0441\u0435\u043a\u0430\u044e\u0449\u0438\u0445\u0441\u044f \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0439 \u0441\u0440\u0430\u0437\u0443.\u041d\u0438\u0436\u0435 \u044f \u043d\u0430\u0437\u044b\u0432\u0430\u044e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0435 \u0440\u0435\u0436\u0438\u043c\u044b one \u0438\u043b\u0438 1 \u0438 all. \u041a\u0430\u043a \u043f\u043e\u0431\u043e\u0447\u043a\u0430: \u043c\u044b \u0442\u0435\u0440\u044f\u0435\u043c \u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0441\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0437\u0430\u043c\u0435\u043d\u044b. \u041a\u0430\u043a \u043e\u0442\u043c\u0435\u0447\u0430\u0435\u0442 \u0441\u0430\u043c \u0430\u0432\u0442\u043e\u0440 MarkovJunior &#8212; \u041c\u0430\u043a\u0441\u0438\u043c \u0413\u0443\u043c\u0438\u043d &#8212; \u044d\u0442\u043e \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u043f\u043e\u0442\u0435\u0440\u044e \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438. \u041d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u0442\u0430\u043a\u043e\u0439 \u0444\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u043c \u0432\u0441\u0451 \u0435\u0449\u0451 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u043e\u043b\u0435\u0437\u0435\u043d \u0434\u043b\u044f \u043c\u043e\u0434\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432.\u0421\u0442\u043e\u0445\u0430\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043a\u043b\u0435\u0442\u043e\u0447\u043d\u044b\u0439 \u0430\u0432\u0442\u043e\u043c\u0430\u0442 \u043d\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0442\u0438\u043f\u043e\u0432?\u041c\u044b \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u0437\u0434\u0435\u0441\u044c \u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0438\u043b\u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0442\u044c \u044f\u0437\u044b\u043a, \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0436\u0435 \u0448\u0438\u0440\u043e\u043a\u0438\u0439, \u043a\u0430\u043a MarkovJunior, \u043d\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u043a\u0430\u043a\u043e\u0433\u043e-\u0442\u043e \u0431\u043b\u0438\u0437\u043a\u043e\u0433\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u0431\u043b\u043e\u043a\u043e\u0432.  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u043e\u0431\u0435\u0440\u0435\u043c \u0441\u0432\u043e\u044e \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0443\u044e \u0441\u0442\u043e\u0445\u0430\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u043c\u0430\u0448\u0438\u043d\u0443 \u043d\u0430 \u0431\u0430\u0437\u0435 pattern-matching WL.\u041d\u0430\u0447\u043d\u0451\u043c \u0441 \u0447\u0451\u0440\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044f 20\u00d720:field = Table[Black, {20}, {20}];field \/\/ ArrayPlot\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c \u043f\u0440\u0430\u0432\u0438\u043b\u043e B \u2192 R: \u0447\u0451\u0440\u043d\u0430\u044f \u043a\u043b\u0435\u0442\u043a\u0430 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043a\u0440\u0430\u0441\u043d\u043e\u0439.ClearAll[r];r[any_] := any;r[{b___, Black, a___}] := {b, Red, a};field \/\/ r \/\/ ArrayPlot\u0423\u043f\u0441. \u0412\u0441\u0435 \u0442\u0430\u043a\u0436\u0435 \u0447\u0435\u0440\u043d\u043e. \u042d\u0442\u043e\u0442 \u043f\u0430\u0442\u0442\u0435\u0440\u043d {b___, Black, a___} \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u043e\u0434\u043d\u043e\u043c\u0435\u0440\u043d\u044b\u0445 \u0441\u043f\u0438\u0441\u043a\u0430\u0445\/\u043c\u0430\u0441\u0441\u0438\u0432\u0430\u0445. \u041d\u043e \u043f\u043e\u043b\u0435 &#8212; \u044d\u0442\u043e \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u043f\u0438\u0441\u043a\u043e\u0432, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u0432\u044b\u0448\u0435 \u043d\u0430 \u0432\u0441\u0435\u0439 \u0441\u0435\u0442\u043a\u0435 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043d\u0430\u0439\u0434\u0451\u0442. \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0432\u043d\u0435\u0448\u043d\u044e\u044e \u043f\u0430\u0440\u0443 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0441\u0442\u0440\u043e\u043a\u0438 \u0434\u043e \u0438 \u043f\u043e\u0441\u043b\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0435\u0439 \u0441\u0442\u0440\u043e\u043a\u0438:ClearAll[r];r[any_] := any;r[{beforeRows___, {before___, Black, after___}, afterRows___}] :=  {beforeRows, {before, Red, after}, afterRows};field \/\/ r \/\/ ArrayPlot\u0415\u0449\u0451 \u043e\u0434\u0438\u043d \u0432\u044b\u0437\u043e\u0432 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0432\u0442\u043e\u0440\u0443\u044e \u043a\u043b\u0435\u0442\u043a\u0443:field \/\/ r \/\/ r \/\/ ArrayPlot\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043f\u043e\u043a\u0430 \u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d: \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0441\u043d\u043e\u0432\u0430 \u043f\u0440\u0438\u0432\u043e\u0434\u044f\u0442 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440 \u043a \u043f\u0435\u0440\u0432\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0435\u0439 \u043a\u043b\u0435\u0442\u043a\u0435. \u041c\u043e\u0436\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u0435\u043d\u044c\u043a\u043e \u043f\u043e\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u044d\u0442\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0432 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0439 \u043f\u0440\u0435\u0434\u0438\u043a\u0430\u0442ClearAll[r];r[any_] := any;r[{beforeRows___, {before___, Black, after___}, afterRows___}] :=  {beforeRows, {before, Red, after}, afterRows} \/;    RandomReal[] &lt;= 1\/20^2;ArrayPlot[field = field \/\/ r \/\/ r \/\/ r \/\/ r]\u0438\u043b\u0438 \u0432 \u0432\u0438\u0434\u0435 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438Animate[  ArrayPlot[field = field \/\/ r \/\/ r \/\/ r \/\/ r],  {n, 1, 10},  Appearance -&gt; None]\u0423\u0441\u043b\u043e\u0432\u0438\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043e\u0431\u0445\u043e\u0434\u0430 \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442\u043e\u0432, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044d\u0442\u043e \u0435\u0449\u0451 \u043d\u0435 \u0440\u0430\u0432\u043d\u043e\u043c\u0435\u0440\u043d\u044b\u0439 \u0432\u044b\u0431\u043e\u0440 \u0441\u0440\u0435\u0434\u0438 \u0432\u0441\u0435\u0445 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0439. \u041f\u043e\u0437\u0436\u0435 \u043c\u044b \u044f\u0432\u043d\u043e \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0438\u043c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0438 \u0432\u044b\u0431\u0435\u0440\u0435\u043c \u043e\u0434\u0438\u043d \u0438\u0437 \u043d\u0438\u0445.\u041e\u0434\u043d\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u043e &#8212; \u0432\u043e\u0441\u0435\u043c\u044c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0439\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u0440\u043e\u0441\u0442\u0430RB \u2192 RRfield = Table[Black, {20}, {20}];field[[15,15]] = Red; (*\u0441\u0435\u043c\u044f*)ClearAll[r];r[any_] := any;r[{bf___, {b___, Black,Red, a___}, af___}] := {bf, {b, Red,Red, a}, af} \/; RandomReal[]&lt;=0.5;\u0413\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u0430\u0442\u0442\u0435\u0440\u043d, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u043e\u0431\u044a\u044f\u0432\u0438\u043b\u0438 \u043d\u0435 \u0443\u043c\u0435\u0435\u0442 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u0442\u044c \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u0443\u044e \u043f\u0430\u0440\u0443. \u0423 \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u0430 \u0432\u043e\u0441\u0435\u043c\u044c \u0434\u0438\u044d\u0434\u0440\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u0438\u043c\u043c\u0435\u0442\u0440\u0438\u0439: \u0447\u0435\u0442\u044b\u0440\u0435 \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430 \u0438 \u0447\u0435\u0442\u044b\u0440\u0435 \u043e\u0442\u0440\u0430\u0436\u0451\u043d\u043d\u044b\u0445 \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430. \u0415\u0441\u043b\u0438 \u043f\u0440\u043e\u0433\u043e\u043d\u044f\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u0447\u0435\u0440\u0435\u0437 \u0432\u0441\u0435 \u044d\u0442\u0438 \u043e\u0440\u0438\u0435\u043d\u0442\u0430\u0446\u0438\u0438, \u043e\u0434\u043d\u043e \u0442\u0430\u043a\u043e\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u0431\u0443\u0434\u0435\u0442 \u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432\u043e \u0432\u0441\u0435\u0445 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f\u0445.rot[0][m_] := m;rot[1][m_] := Transpose[Reverse[m]];rot[2][m_] := Reverse[Reverse \/@ m];rot[3][m_] := Reverse[Transpose[m]];mirror[m_] := Reverse \/@ m;symmetries = Join[  Table[rot[k], {k, 0, 3}],  Table[rot[k] @* mirror, {k, 0, 3}]];inverseSymmetries = Join[  Table[rot[Mod[-k, 4]], {k, 0, 3}],  Table[rot[Mod[-k, 4]] @* mirror, {k, 0, 3}]];applyInAllSymmetries[m_] :=  Fold[    #2[[2]][r[#2[[1]][#1]]] &amp;,    m,    Transpose[{symmetries, inverseSymmetries}]  ];\u0422\u043e\u0433\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u044d\u0442\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u0432 \u0446\u0438\u043a\u043b\u0435 \u0442\u0430\u043a:Animate[  ArrayPlot[field = applyInAllSymmetries[field]],   {n, 1, 30},  Appearance-&gt;None]\u041f\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0435\u0449\u0451 \u0442\u0430\u043a\u043e\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e:RBB \u2192 GGRR_G \u2192 G_R\u0433\u0434\u0435 _ \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u043b\u044e\u0431\u043e\u0439 \u0446\u0432\u0435\u0442. \u041a\u0440\u0430\u0441\u043d\u0430\u044f&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-489428","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/489428","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=489428"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/489428\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=489428"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=489428"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=489428"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}