{"id":442888,"date":"2024-12-25T15:05:14","date_gmt":"2024-12-25T15:05:14","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=442888"},"modified":"-0001-11-30T00:00:00","modified_gmt":"2024-12-25T15:05:14","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=442888","title":{"rendered":"<span>\u0420\u0435\u0448\u0435\u043d\u0438\u0435 Advent of Code \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043c\u0430\u043a\u0440\u043e\u0441\u043e\u0432 Rust<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u041f\u0438\u0441\u0430\u0442\u044c \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0441\u043e\u0444\u0442 \u0441\u043b\u043e\u0436\u043d\u043e. \u041d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0442\u0435\u0441\u0442\u043e\u0432, \u043e\u0431\u0434\u0443\u043c\u044b\u0432\u0430\u043d\u0438\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u0448\u0438\u0445 \u0441\u0430\u0439\u0434\u044d\u0444\u0444\u0435\u043a\u0442\u043e\u0432, \u043c\u0443\u043a\u0438 \u0432\u044b\u0431\u043e\u0440\u0430 \u043c\u0435\u0436\u0434\u0443 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043f\u0430\u043c\u044f\u0442\u0438. \u0418\u0434\u0435\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u00a0\u2014 \u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435\u00a0\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f. \u041d\u0438\u043a\u0430\u043a\u0438\u0445 \u0442\u0435\u0431\u0435 \u043c\u0443\u043a \u0432\u044b\u0431\u043e\u0440\u0430, \u0431\u0430\u0433\u043e\u0432 \u0438 \u0437\u0430\u0431\u043e\u0442. \u041d\u043e\u00a0\u0447\u0442\u043e, \u0435\u0441\u043b\u0438 \u043c\u044b \u043f\u043e\u0439\u0434\u0435\u043c \u0434\u0430\u043b\u044c\u0448\u0435, \u0447\u0442\u043e\u00a0\u0435\u0441\u043b\u0438 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043e\u0442\u0432\u0435\u0442 \u043d\u0430\u00a0\u043d\u0430\u0448 \u0432\u043e\u043f\u0440\u043e\u0441 \u0435\u0449\u0435 \u0434\u043e\u00a0\u0442\u043e\u0433\u043e, \u043a\u0430\u043a\u00a0\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f?<\/p>\n<p>\u0412\u00a0\u044d\u0442\u043e\u043c \u0433\u043e\u0434\u0443 \u044f \u0445\u043e\u0442\u0435\u043b \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u0443\u044e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u0434\u043b\u044f\u00a0\u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0447\u0435\u043b\u043b\u0435\u043d\u0434\u0436\u0430 Advent of Code. \u0415\u0441\u043b\u0438 \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0438 \u043c\u043e\u0436\u0435\u0442 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c, \u043e\u043d\u0430 \u0434\u043e\u043b\u0436\u043d\u0430\u00a0\u0431\u044b\u0442\u044c \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u043d\u0430\u00a0Rust. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u043c\u0443\u0447\u0430\u0435\u043c \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0435 \u043c\u0430\u043a\u0440\u043e\u0441\u044b Rust \u0434\u043b\u044f\u00a0\u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043e\u0442\u0432\u0435\u0442\u0430 \u043d\u0430\u00a0\u0437\u0430\u0434\u0430\u0447\u0443 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0434\u043d\u044f Advent of Code \u0432\u00a0\u0432\u0438\u0434\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438.<\/p>\n<pre><code class=\"rust\">$ cargo build    Compiling advent-of-code-2024 v0.1.0 (\/home\/glados\/Code\/advent-of-code-2024) error[E0080]: evaluation of constant value failed    --&gt; src\/main.rs:142:5     | 142 |     panic!(\"{}\", format!(\"The answer is {answer}\"));     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the evaluated program panicked at 'The answer is 11', src\/main.rs:142:5<\/code><\/pre>\n<h2>\u0417\u0430\u0434\u0430\u0447\u0430<\/h2>\n<p>\u041f\u0440\u043e\u0447\u0438\u0442\u0430\u0439\u0442\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u0437\u0430\u0434\u0430\u0447\u0438 <a href=\"https:\/\/adventofcode.com\/2024\/day\/1\">\u0442\u0443\u0442<\/a>. <\/p>\n<p>\u0413\u0440\u0443\u0431\u043e \u0433\u043e\u0432\u043e\u0440\u044f, \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435: \u043f\u043e\u043b\u0443\u0447\u0438\u0432 \u0434\u0432\u0435 \u043a\u043e\u043b\u043e\u043d\u043a\u0438 \u0447\u0438\u0441\u0435\u043b, \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u0443\u0439\u0442\u0435 \u043e\u0431\u0435, \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u0439\u0442\u0435 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u0443\u044e \u0440\u0430\u0437\u043d\u0438\u0446\u0443 \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u0438 \u043f\u0440\u043e\u0441\u0443\u043c\u043c\u0438\u0440\u0443\u0439\u0442\u0435 \u0438\u0445.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u0430\u0448\u0430 \u0440\u0435\u043b\u0438\u0433\u0438\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043d\u0430\u00a0\u0442\u0430\u043a\u043e\u0435 \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u0432\u043e\u0442 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043d\u0430\u00a0python:<\/p>\n<pre><code class=\"python\">\"\"\"Warning: This code completes in a shocking O(n log n) time complexity and allocates memory with reckless abandon.\"\"\" input = [   3,   4,   4,   3,   2,   5,   1,   3,   3,   9,   3,   3, ] left = sorted(input[::2]) right = sorted(input[1::2]) print(sum(abs(l - r) for l, r in zip(left, right))) # 11 <\/code><\/pre>\n<p>\u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u043d\u0430\u00a0python \u043d\u0435\u00a0\u0442\u043e\u043b\u044c\u043a\u043e \u0435\u043b\u0435 \u0447\u0438\u0442\u0430\u0435\u043c\u043e\u0435, \u0442\u0430\u043a \u0435\u0449\u0435 \u0438 \u043d\u0435\u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e\u0435\u00a0\u2014 <code>O(n log n)<\/code>. \u0415\u0441\u043b\u0438 \u043c\u044b \u043d\u0435\u00a0\u0445\u043e\u0442\u0438\u043c, \u0447\u0442\u043e\u0431\u044b \u0418\u0418 \u043e\u0442\u043e\u0431\u0440\u0430\u043b \u0443\u00a0\u043d\u0430\u0441 \u0440\u0430\u0431\u043e\u0442\u0443, \u043d\u0430\u0434\u043e \u0441\u0442\u0440\u0435\u043c\u0438\u0442\u044c\u0441\u044f \u043a\u00a0\u0431\u043e\u043b\u0435\u0435 \u0432\u044b\u0441\u043e\u043a\u043e\u0439 \u043f\u043b\u0430\u043d\u043a\u0435. \u0421\u043a\u043e\u0440\u043e \u0432\u0441\u0435 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435 <code>O(1)<\/code> \u0441\u0442\u0430\u043d\u0435\u0442 \u043d\u0435\u043f\u0440\u0438\u0435\u043c\u043b\u0435\u043c\u044b\u043c.<\/p>\n<p>\u0411\u043b\u0430\u0433\u043e\u0440\u043e\u0434\u043d\u044b\u0439 \u043f\u043e\u0440\u044b\u0432, \u043d\u043e\u00a0\u0434\u0430\u043b\u0435\u043a\u043e \u043d\u0435\u00a0\u0438\u0434\u0435\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430.<\/p>\n<h2>\u0421\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u0441\u0442\u0432\u043e<\/h2>\n<p>\u0415\u0441\u043b\u0438 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u043f\u043e\u0438\u0441\u0442\u0438\u043d\u0435 \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u0443\u044e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443\u00a0\u2014 \u0442\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0434\u0430\u0435\u0442 \u043d\u0430\u043c \u043e\u0442\u0432\u0435\u0442 \u043d\u0438 \u0440\u0430\u0437\u0443 \u043d\u0435\u00a0\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u044f\u0441\u044c, \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0432\u00a0\u0441\u0430\u043c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440. \u0421\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 Rust \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u0434\u0432\u0430 \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439 \u043d\u0430\u00a0\u044d\u0442\u0430\u043f\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438: \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442 \u0438 \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0435 \u043c\u0430\u043a\u0440\u043e\u0441\u044b.<\/p>\n<p>\u0422\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442 \u0434\u043b\u044f\u00a0\u0440\u0430\u0441\u0447\u0435\u0442\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043d\u0430\u00a0\u044d\u0442\u0430\u043f\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0441\u0435\u0433\u043e. \u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442 \u0432\u00a0Rust \u0441\u0438\u043b\u044c\u043d\u043e \u0440\u0430\u0437\u0432\u0438\u043b\u043e\u0441\u044c \u0437\u0430\u00a0\u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u0438 \u0441\u0442\u0430\u043b\u043e \u043a\u0440\u0430\u0439\u043d\u0435 <a href=\"https:\/\/www.youtube.com\/watch?v=zXCr1BH5Y-4\">\u043c\u043e\u0449\u043d\u044b\u043c<\/a> \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u043c. \u041d\u043e\u00a0\u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0441\u0442\u0430\u0442\u044c\u0438 \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u00ab\u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u0430\u043a\u0440\u043e\u0441\u043e\u0432 Rust\u00bb, \u0442\u0430\u043a \u0447\u0442\u043e\u00a0\u0438\u0445 \u043c\u044b \u0438 \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c.<\/p>\n<h3>\u0420\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0441\u043f\u0438\u0441\u043a\u0430<\/h3>\n<p>\u041f\u0435\u0440\u0432\u044b\u0439 \u0448\u0430\u0433\u00a0\u2014 \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c \u0438\u043c\u0435\u044e\u0449\u0438\u0435\u0441\u044f \u043a\u043e\u043b\u043e\u043d\u043a\u0438 \u043d\u0430 2\u00a0\u0441\u043f\u0438\u0441\u043a\u0430. <\/p>\n<pre><code class=\"rust\">let answer = day1! {   3   4   4   3   2   5   1   3   3   9   3   3 };<\/code><\/pre>\n<p>\u0412\u043e\u0442 \u0442\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 <a href=\"https:\/\/play.rust-lang.org\/?version=stable&amp;mode=debug&amp;edition=2021&amp;gist=f6dc966e4d2ca824eb5cc3b43abffd32\">\u043c\u0430\u043a\u0440\u043e\u0441<\/a>: <\/p>\n<pre><code class=\"rust\">macro_rules! day1 {     \/\/ match two numbers at a time, storing them in left and right lists     (@split [$($lcol:tt)*] [$($rcol:tt)*] $l:tt $r:tt $($tail:tt)*) =&gt; {         day1!(@split [$($lcol)* $l] [$($rcol)* $r] $($tail)*)     };     \/\/ base case when no numbers remain     (@split [$($lcol:tt)*] [$($rcol:tt)*]) =&gt; {         todo!()     };     \/\/ entry     ($($tail:tt)*) =&gt; { day1!(@split [] [] $($tail)*) }; }<\/code><\/pre>\n<p>\u041d\u0435\u00a0\u0437\u0430\u043b\u0435\u0437\u0430\u044f \u0432\u00a0\u0434\u0435\u0431\u0440\u0438 \u0438\u0445 \u0440\u0430\u0431\u043e\u0442\u044b, \u043c\u0430\u043a\u0440\u043e\u0441\u044b, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c\u044b\u0435 \u0441\u00a0\u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>macro_rules!<\/code> \u044d\u0442\u043e \u043d\u0430\u0431\u043e\u0440 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432 \u0438 \u0440\u0430\u0441\u043a\u0440\u044b\u0442\u0438\u0439. \u041e\u00a0\u043d\u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u0434\u0443\u043c\u0430\u0442\u044c \u043a\u0430\u043a\u00a0\u043e\u00a0\u043d\u0430\u0431\u043e\u0440\u0435 \u043f\u0440\u0430\u0432\u0438\u043b \u0438\u0437\u00a0\u0434\u0432\u0443\u0445 \u0447\u0430\u0441\u0442\u0435\u0439: <\/p>\n<pre><code class=\"rust\">macro_rules! some_macro {   (pattern1) =&gt; { expansion1 };   (pattern2) =&gt; { expansion2 };   \/* ... *\/ }<\/code><\/pre>\n<p>\u041a\u0430\u0436\u0434\u043e\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u0433\u043e\u0432\u043e\u0440\u0438\u0442: \u00ab\u0415\u0441\u043b\u0438 \u0432\u0438\u0434\u0438\u0448\u044c \u0442\u0430\u043a\u043e\u0439 \u0448\u0430\u0431\u043b\u043e\u043d, \u0437\u0430\u043c\u0435\u043d\u044f\u0439 \u0435\u0433\u043e \u044d\u0442\u0438\u043c \u0440\u0430\u0441\u043a\u0440\u044b\u0442\u0438\u0435\u043c\u00bb. \u041c\u0430\u043a\u0440\u043e\u0441 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0434\u043e\u00a0\u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 \u043d\u0435\u00a0\u043e\u0441\u0442\u0430\u043d\u0435\u0442\u0441\u044f \u0447\u0430\u0441\u0442\u0435\u0439 \u0434\u043b\u044f\u00a0\u0440\u0430\u0441\u043a\u0440\u044b\u0442\u0438\u044f. \u0421\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432 \u043c\u043e\u0436\u0435\u0442\u00a0\u0431\u044b\u0442\u044c \u0441\u043b\u043e\u0436\u043d\u044b\u043c, \u043d\u043e\u00a0\u043c\u044b \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c\u0441\u044f \u043d\u0430\u00a0\u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0448\u0430\u0431\u043b\u043e\u043d\u0430\u0445 \u0432\u00a0\u0440\u0430\u043c\u043a\u0430\u0445 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438.<\/p>\n<p>\u041d\u0430\u0447\u043d\u0435\u043c \u0441\u00a0\u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u0448\u0430\u0431\u043b\u043e\u043d\u0430 <code>($a:tt) =&gt; { $a $a };<\/code>. \u0414\u043b\u044f\u00a0Rust \u043e\u043d \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442:<\/p>\n<ul>\n<li>\n<p>\u041e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0439 \u043e\u0434\u0438\u043d \u0442\u043e\u043a\u0435\u043d <code>(tt)<\/code> \u0438 \u043d\u0430\u0437\u044b\u0432\u0430\u0439 \u0435\u0433\u043e <code>a<\/code>.<\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u043c\u0435\u043d\u0438 \u0435\u0433\u043e, \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u044f \u0442\u043e\u043a\u0435\u043d \u0434\u0432\u0430\u0436\u0434\u044b<\/p>\n<\/li>\n<\/ul>\n<p>\u0422\u0430\u043a <code>foo<\/code> \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f <code>foo foo<\/code>, \u0430 <code>1<\/code> \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f <code>1 1<\/code>.<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0442\u043e\u043a\u0435\u043d\u043e\u0432 \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u0435\u0442\u00a0\u0431\u044b\u0442\u044c \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0430 \u0441\u00a0\u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>($($tail:tt)*)<\/code>. \u0421\u0438\u043c\u0432\u043e\u043b <code>*<\/code>, \u043a\u0430\u043a\u00a0\u0438 \u0432\u00a0\u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u0445, \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u043d\u043e\u043b\u044c \u0438\u043b\u0438\u00a0\u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u0435\u043d\u0438\u0439. \u041a\u00a0\u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u0434\u043b\u044f\u00a0\u0432\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f <code>1 2 3<\/code>:<\/p>\n<ul>\n<li>\n<p>\u0420\u0430\u0441\u043a\u0440\u044b\u0442\u0438\u0435 <code>($($tail)*)<\/code> \u0440\u0430\u0441\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0432 <code>1 2 3<\/code><\/p>\n<\/li>\n<li>\n<p>\u0420\u0430\u0441\u043a\u0440\u044b\u0442\u0438\u0435 <code>($($tail:$tail)*)<\/code> \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432 <code>1:1 2:2 3:3<\/code><\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u043e\u00a0\u0441\u0443\u0442\u0438, \u0432\u0441\u0435 \u0432\u043e\u00a0\u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u0441\u043a\u043e\u0431\u043a\u0430\u0445 \u0434\u0443\u0431\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f\u00a0\u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0435\u0433\u043e \u0442\u043e\u043a\u0435\u043d\u0430.<\/p>\n<p>\u0418 \u043d\u0430\u043a\u043e\u043d\u0435\u0446, \u0448\u0430\u0431\u043b\u043e\u043d\u044b \u043c\u043e\u0433\u0443\u0442 \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0441\u00a0\u0442\u043e\u043a\u0435\u043d\u0430\u043c\u0438 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e. \u0428\u0430\u0431\u043b\u043e\u043d <code>(abc $($tail:tt)*)<\/code> \u0431\u0443\u0434\u0435\u0442 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0434\u043b\u044f\u00a0\u043b\u044e\u0431\u043e\u0433\u043e \u0432\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0435\u0433\u043e\u0441\u044f \u0441\u00a0\u0442\u043e\u043a\u0435\u043d\u0430 <code>abc<\/code>.<\/p>\n<p>\u042d\u0442\u043e\u0433\u043e \u0432\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0434\u043e\u043b\u0436\u043d\u043e\u00a0\u0431\u044b\u0442\u044c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c \u0432\u0445\u043e\u0434\u043d\u043e\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e<\/p>\n<pre><code class=\"rust\">    \/\/ entry     ($($tail:tt)*) =&gt; { day1!(@split [] [] $($tail)*) };<\/code><\/pre>\n<p>\u042d\u0442\u043e \u044d\u0442\u0430\u043f \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0438. \u0422\u0443\u0442 \u043c\u044b<\/p>\n<ul>\n<li>\n<p>\u0421\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c 0\u00a0\u0438\u043b\u0438\u00a0\u0431\u043e\u043b\u0435\u0435 \u0442\u043e\u043a\u0435\u043d\u043e\u0432 (\u0432\u0435\u0441\u044c\/\u043b\u044e\u0431\u043e\u0439 \u0432\u0432\u043e\u0434).<\/p>\n<\/li>\n<li>\n<p>\u041e\u0431\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u043c \u0432\u00a0\u043d\u043e\u0432\u044b\u0439 \u043c\u0430\u043a\u0440\u043e\u0441, \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u0439\u0441\u044f \u0441\u043e <code>@split<\/code>.<\/p>\n<\/li>\n<li>\n<p>\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0434\u0432\u0430 \u043f\u0443\u0441\u0442\u044b\u0445 \u0441\u043f\u0438\u0441\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u00a0\u0438\u0442\u043e\u0433\u0435 \u0431\u0443\u0434\u0443\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043f\u0440\u0430\u0432\u0443\u044e \u0438 \u043b\u0435\u0432\u0443\u044e \u043a\u043e\u043b\u043e\u043d\u043a\u0438 \u0447\u0438\u0441\u0435\u043b.<\/p>\n<\/li>\n<li>\n<p>\u0412\u00a0\u043a\u043e\u043d\u0446\u0435 \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u043d\u0430\u0448\u0438 \u0432\u0445\u043e\u0434\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043d\u0435\u0442\u0440\u043e\u043d\u0443\u0442\u044b\u043c\u0438.<\/p>\n<\/li>\n<\/ul>\n<p><code>@split<\/code> \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043d\u0430\u043c \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435\u043c, \u0437\u0430\u0434\u0430\u0432 \u043d\u043e\u0432\u043e\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u0434\u043b\u044f\u00a0\u0448\u0430\u0431\u043b\u043e\u043d\u0430, \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0435\u0433\u043e\u0441\u044f \u0441 <code>@split<\/code>. \u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 <code>@_name_<\/code> \u043e\u0431\u0443\u0441\u043b\u043e\u0432\u043b\u0435\u043d\u043e \u043a\u043e\u043d\u0432\u0435\u043d\u0446\u0438\u0435\u0439 \u044f\u0437\u044b\u043a\u0430. \u042d\u0442\u043e \u043c\u043e\u0436\u0435\u0442\u00a0\u0431\u044b\u0442\u044c \u043b\u044e\u0431\u0430\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0442\u043e\u043a\u0435\u043d\u043e\u0432, \u0434\u043b\u044f\u00a0\u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0437\u0430\u0434\u0430\u0442\u044c \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435.<\/p>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, <code>day1!( 1 2 3 4)<\/code> \u0440\u0430\u0441\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 <code>day1!(@split [] [] 1 2 3 4)<\/code>.<\/p>\n<p>\u041d\u0430\u0441\u0442\u043e\u044f\u0449\u0430\u044f \u043c\u0430\u0433\u0438\u044f \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0434\u0430\u043b\u044c\u0448\u0435.<\/p>\n<pre><code class=\"rust\">    \/\/ match two numbers at a time, storing them in left and right lists     (@split [$($lcol:tt)*] [$($rcol:tt)*] $l:tt $r:tt $($tail:tt)*) =&gt; {         day1!(@split [$($lcol)* $l] [$($rcol)* $r] $($tail)*)     };<\/code><\/pre>\n<p>\u042d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0441\u043b\u043e\u0436\u043d\u043e, \u043d\u043e\u00a0\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043b\u0435\u0433\u043a\u043e \u043f\u043e\u043d\u044f\u0442\u044c \u043d\u0430\u00a0\u043f\u0440\u0438\u043c\u0435\u0440\u0435.<\/p>\n<p>\u041d\u0430\u0447\u0438\u043d\u0430\u044f \u0441\u00a0\u0440\u0430\u0441\u043a\u0440\u044b\u0442\u0438\u044f \u0441\u00a0\u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u0448\u0430\u0433\u0430 <code>day1!(@split [] [] 1 2 3 4)<\/code>, \u043f\u043e\u0434\u00a0\u0448\u0430\u0431\u043b\u043e\u043d \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0442:<\/p>\n<ul>\n<li>\n<p>\u041b\u0438\u0442\u0435\u0440\u0430\u043b \u0442\u043e\u043a\u0435\u043d\u0430 <code>@split<\/code><\/p>\n<\/li>\n<li>\n<p>\u041f\u0443\u0441\u0442\u044b\u0435 \u0441\u043f\u0438\u0441\u043a\u0438 <code>[] []<\/code> (<code>[$($lcol:tt)*] [$($(rcol:tt)*]<\/code>)<\/p>\n<\/li>\n<li>\n<p>\u041f\u0435\u0440\u0432\u043e\u0435 \u0447\u0438\u0441\u043b\u043e <code>1<\/code> (<code>$l<\/code>)<\/p>\n<\/li>\n<li>\n<p>\u0412\u0442\u043e\u0440\u043e\u0435 \u0447\u0438\u0441\u043b\u043e <code>2<\/code> (<code>$r<\/code>)<\/p>\n<\/li>\n<li>\n<p>\u0418 \u0432\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0442\u043e\u043a\u0435\u043d\u044b <code>3 4<\/code> (<code>$($tail:tt)*<\/code>)<\/p>\n<\/li>\n<\/ul>\n<p>\u0417\u0430\u0442\u0435\u043c \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u0440\u0430\u0441\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 <code>day1!(@split [1] [2] 3 4)<\/code>. \u0420\u0430\u0441\u043a\u0440\u044b\u0442\u0438\u0435 \u0432\u00a0\u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u043d\u043e\u0432\u044b\u0439 \u043c\u0430\u043a\u0440\u043e\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439:<\/p>\n<ul>\n<li>\n<p>\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 <code>1<\/code> \u0432\u00a0\u043a\u043e\u043d\u0435\u0446 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430 (<code>[$($lcol)* $l]<\/code>)<\/p>\n<\/li>\n<li>\n<p>\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 <code>2<\/code> \u0432\u00a0\u043a\u043e\u043d\u0435\u0446 \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430 (<code>[$($(rcol)* $r]<\/code>)<\/p>\n<\/li>\n<li>\n<p>\u041e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0442\u043e\u043a\u0435\u043d\u044b \u043e\u0441\u0442\u0430\u044e\u0442\u0441\u044f \u0432\u00a0\u043a\u043e\u043d\u0446\u0435 <code>3 4<\/code> (<code>$($tail)*<\/code>)<\/p>\n<\/li>\n<\/ul>\n<p>\u0414\u0440\u0443\u0433\u0438\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438, \u043c\u044b \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0435\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043a\u043e\u043b\u043e\u043d\u043e\u043a \u0432\u00a0\u0434\u0432\u0443\u0445 \u0441\u043f\u0438\u0441\u043a\u0430\u0445 \u0438 \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u043d\u0435\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u0435 \u0442\u043e\u043a\u0435\u043d\u044b \u0432\u00a0\u043a\u043e\u043d\u0446\u0435. \u042d\u0442\u043e \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0434\u0432\u0430 \u0442\u043e\u043a\u0435\u043d\u0430 \u0438\u0437\u00a0\u0435\u0449\u0435 \u043d\u0435\u00a0\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u043e\u0433\u043e \u0432\u0432\u043e\u0434\u0430, \u0430\u00a0\u0440\u0430\u0441\u043a\u0440\u044b\u0442\u0438\u0435 \u043f\u043e\u043c\u0435\u0449\u0430\u0435\u0442 \u0438\u0445 \u0432\u00a0\u043d\u0443\u0436\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a.<\/p>\n<p>\u041f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e\u0435 \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0442\u043e\u043a\u0435\u043d\u043e\u0432 \u0438\u0437\u00a0\u0445\u0432\u043e\u0441\u0442\u0430 \u0438 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u0430\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445\u00a0\u2014 \u043f\u0430\u0442\u0442\u0435\u0440\u043d, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f<a href=\"https:\/\/veykril.github.io\/tlborm\/decl-macros\/patterns\/tt-muncher.html\"> <u>tt munching<\/u><\/a>. \u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u0434\u043b\u044f\u00a0\u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u0430\u043c\u0438 \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442<a href=\"https:\/\/veykril.github.io\/tlborm\/decl-macros\/patterns\/push-down-acc.html\"> <u>push down accumulation<\/u><\/a>.<\/p>\n<p>\u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442\u0441\u044f, \u043f\u043e\u043a\u0430 \u043d\u0435\u00a0\u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u043d\u0435\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u0445 \u0442\u043e\u043a\u0435\u043d\u043e\u0432 \u043d\u0430\u00a0\u0432\u0445\u043e\u0434\u0435.<\/p>\n<pre><code class=\"rust\">day1!(@split [] [] 1 2 3 4)      \/\/ Match and split first pair (1,2) -&gt; day1!(@split [1] [2] 3 4)     \/\/ Match and split second pair (3,4) -&gt; day1!(@split [1 3] [2 4])     \/\/ No more pairs to match. move to base case<\/code><\/pre>\n<p>\u041d\u0430\u00a0\u0434\u0430\u043d\u043d\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u0443\u00a0\u043d\u0430\u0441 \u043d\u0435\u00a0\u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0442\u043e\u043a\u0435\u043d\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432 <code>$l $r<\/code> \u0438 \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043d\u0435\u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u043e. \u042d\u0442\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043d\u0430\u0441 \u043a\u00a0\u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u043c\u0443 \u043f\u0440\u0430\u0432\u0438\u043b\u0443, \u043e\u0442\u043d\u043e\u0441\u044f\u0449\u0435\u043c\u0443\u0441\u044f \u043a\u00a0\u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u044e \u0441\u043f\u0438\u0441\u043a\u0430.<\/p>\n<pre><code class=\"rust\">    \/\/ base case when no numbers remain     (@split [$($lcol:tt)*] [$($rcol:tt)*]) =&gt; {         todo!()     };<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0443\u00a0\u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0434\u0432\u0430 \u0441\u043f\u0438\u0441\u043a\u0430 \u043d\u0435\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0442\u043e\u043a\u0435\u043d\u043e\u0432 \u0438 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u0442\u044c \u043a\u00a0\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0444\u0430\u0437\u0435 \u043d\u0430\u0448\u0435\u0439 \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b.<\/p>\n<h3>\u0421\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430 \u0441\u043f\u0438\u0441\u043a\u0430<\/h3>\n<p>\u041d\u0430\u0434\u0435\u044e\u0441\u044c, \u0447\u0442\u043e\u00a0\u043f\u0440\u043e\u0448\u043b\u0430\u044f \u0447\u0430\u0441\u0442\u044c\u00a0\u0431\u044b\u043b\u0430 \u043c\u044f\u0433\u043a\u0438\u043c \u0432\u0432\u0435\u0434\u0435\u043d\u0438\u0435\u043c \u0432\u00a0\u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0435 \u043c\u0430\u043a\u0440\u043e\u0441\u044b \u0432\u00a0rust, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e\u00a0\u044d\u0442\u0430 \u0447\u0430\u0441\u0442\u044c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u043a\u043b\u044f\u0442\u0430.<\/p>\n<p>\u0414\u0430\u043b\u044c\u0448\u0435 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c <code>2 1 4 3<\/code> \u0441\u00a0\u043f\u0440\u043e\u0448\u043b\u043e\u0433\u043e \u0448\u0430\u0433\u0430 \u0434\u043e <code>1 2 3 4<\/code> \u043d\u0430\u00a0\u044d\u0442\u0430\u043f\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438. \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0432\u00a0\u0442\u043e\u043c, \u0447\u0442\u043e\u00a0\u043c\u0430\u043a\u0440\u043e\u0441\u044b \u043d\u0435\u00a0\u0443\u043c\u0435\u044e\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441\u00a0\u0443\u0441\u043b\u043e\u0432\u0438\u044f\u043c\u0438, \u043e\u043d\u0438\u00a0\u043b\u0438\u0448\u044c \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0438 \u0440\u0430\u0441\u043a\u0440\u044b\u0432\u0430\u044e\u0442 \u0442\u043e\u043a\u0435\u043d\u044b. \u041d\u0435\u0442 \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u0441\u043a\u0430\u0437\u0430\u0442\u044c \u00ab\u0435\u0441\u043b\u0438 <code>a &gt; b<\/code>, \u0440\u0430\u0441\u043a\u0440\u043e\u0439 \u0432 <code>b a<\/code>, \u0432\u00a0\u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435\u00a0\u2014 \u0432 <code>a b<\/code>\u00bb. \u041f\u043e\u00a0\u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435 \u043d\u0435\u00a0\u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e.<\/p>\n<p>\u041a\u043e\u043d\u0435\u0447\u043d\u043e \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0431\u0440\u0443\u0442\u0444\u043e\u0440\u0441\u0438\u0442\u044c \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435, \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u0432 \u0448\u0430\u0431\u043b\u043e\u043d\u044b \u0434\u043b\u044f\u00a0\u043a\u0430\u0436\u0434\u043e\u0439 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0439 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u0438.<\/p>\n<pre><code class=\"rust\">  (@sort 1 1) =&gt; { 1 1 };   (@sort 1 2) =&gt; { 1 2 };   (@sort 2 1) =&gt; { 1 2 };   (@sort 1 3) =&gt; { 1 3 };   (@sort 3 1) =&gt; { 1 3 };   \/* ... *\/<\/code><\/pre>\n<p>\u041d\u043e \u044d\u0442\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u043e\u0447\u0435\u043d\u044c \u043a\u043e\u0441\u0442\u044b\u043b\u044c\u043d\u043e\u2026<\/p>\n<p>\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u044f \u044d\u0442\u0443 \u0438\u0434\u0435\u044e, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0443 \u043f\u0443\u0437\u044b\u0440\u044c\u043a\u043e\u043c \u0432 \u0432\u0438\u0434\u0435 \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u043c\u0430\u043a\u0440\u043e\u0441\u0430.<\/p>\n<details class=\"spoiler\">\n<summary>\u041f\u043e\u043b\u043d\u044b\u0439 \u043c\u0430\u043a\u0440\u043e\u0441 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u043f\u0443\u0437\u044b\u0440\u044c\u043a\u043e\u043c<\/summary>\n<div class=\"spoiler__content\">\n<p><a href=\"https:\/\/play.rust-lang.org\/?version=stable&amp;mode=debug&amp;edition=2021&amp;gist=146d65cb34a1bb6a955f0055dfbd74f3\">playground<\/a><\/p>\n<pre><code class=\"rust\">macro_rules! bubble_sort {     (@bubble [$($work:tt)*] [$($final:tt)*] 1 1 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 1] [$($final)*] 1 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 1 2 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 1] [$($final)*] 2 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 1 3 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 1] [$($final)*] 3 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 1 4 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 1] [$($final)*] 4 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 1 5 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 1] [$($final)*] 5 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 1 6 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 1] [$($final)*] 6 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 1 7 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 1] [$($final)*] 7 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 1 8 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 1] [$($final)*] 8 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 1 9 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 1] [$($final)*] 9 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 2 1 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 1] [$($final)*] 2 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 2 2 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 2] [$($final)*] 2 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 2 3 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 2] [$($final)*] 3 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 2 4 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 2] [$($final)*] 4 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 2 5 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 2] [$($final)*] 5 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 2 6 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 2] [$($final)*] 6 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 2 7 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 2] [$($final)*] 7 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 2 8 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 2] [$($final)*] 8 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 2 9 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 2] [$($final)*] 9 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 3 1 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 1] [$($final)*] 3 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 3 2 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 2] [$($final)*] 3 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 3 3 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 3] [$($final)*] 3 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 3 4 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 3] [$($final)*] 4 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 3 5 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 3] [$($final)*] 5 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 3 6 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 3] [$($final)*] 6 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 3 7 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 3] [$($final)*] 7 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 3 8 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 3] [$($final)*] 8 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 3 9 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 3] [$($final)*] 9 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 4 1 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 1] [$($final)*] 4 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 4 2 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 2] [$($final)*] 4 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 4 3 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 3] [$($final)*] 4 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 4 4 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 4] [$($final)*] 4 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 4 5 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 4] [$($final)*] 5 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 4 6 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 4] [$($final)*] 6 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 4 7 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 4] [$($final)*] 7 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 4 8 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 4] [$($final)*] 8 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 4 9 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 4] [$($final)*] 9 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 5 1 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 1] [$($final)*] 5 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 5 2 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 2] [$($final)*] 5 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 5 3 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 3] [$($final)*] 5 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 5 4 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 4] [$($final)*] 5 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 5 5 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 5] [$($final)*] 5 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 5 6 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 5] [$($final)*] 6 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 5 7 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 5] [$($final)*] 7 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 5 8 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 5] [$($final)*] 8 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 5 9 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 5] [$($final)*] 9 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 6 1 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 1] [$($final)*] 6 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 6 2 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 2] [$($final)*] 6 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 6 3 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 3] [$($final)*] 6 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 6 4 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 4] [$($final)*] 6 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 6 5 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 5] [$($final)*] 6 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 6 6 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 6] [$($final)*] 6 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 6 7 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 6] [$($final)*] 7 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 6 8 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 6] [$($final)*] 8 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 6 9 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 6] [$($final)*] 9 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 7 1 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 1] [$($final)*] 7 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 7 2 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 2] [$($final)*] 7 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 7 3 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 3] [$($final)*] 7 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 7 4 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 4] [$($final)*] 7 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 7 5 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 5] [$($final)*] 7 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 7 6 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 6] [$($final)*] 7 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 7 7 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 7] [$($final)*] 7 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 7 8 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 7] [$($final)*] 8 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 7 9 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 7] [$($final)*] 9 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 8 1 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 1] [$($final)*] 8 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 8 2 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 2] [$($final)*] 8 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 8 3 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 3] [$($final)*] 8 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 8 4 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 4] [$($final)*] 8 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 8 5 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 5] [$($final)*] 8 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 8 6 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 6] [$($final)*] 8 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 8 7 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 7] [$($final)*] 8 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 8 8 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 8] [$($final)*] 8 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 8 9 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 8] [$($final)*] 9 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 9 1 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 1] [$($final)*] 9 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 9 2 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 2] [$($final)*] 9 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 9 3 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 3] [$($final)*] 9 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 9 4 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 4] [$($final)*] 9 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 9 5 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 5] [$($final)*] 9 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 9 6 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 6] [$($final)*] 9 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 9 7 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 7] [$($final)*] 9 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 9 8 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 8] [$($final)*] 9 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 9 9 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 9] [$($final)*] 9 $($tail)*) };       (@bubble [$($work:tt)*] [$($final:tt)*] $tail:tt) =&gt; { bubble_sort!(@bubble [] [$($final)* $tail] $($work)* ) };      (@bubble [] [$($final:tt)*]) =&gt; { todo!() };      \/\/ entry     ($($sortme:tt)* ) =&gt; { bubble_sort!(@bubble [] [] $($sortme)* ) } }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0412\u00a0\u043e\u0441\u043d\u043e\u0432\u0435 \u043b\u0435\u0436\u0438\u0442 \u0434\u0432\u0430 \u0442\u0438\u043f\u0430 \u043f\u0440\u0430\u0432\u0438\u043b.<\/p>\n<p>\u041f\u0435\u0440\u0432\u043e\u0435\u00a0\u2014 \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u043f\u0430\u0440\u044b \u0447\u0438\u0441\u0435\u043b:<\/p>\n<pre><code class=\"rust\">(@bubble [$($work:tt)*] [$($final:tt)*] 2 1 $($tail:tt)*) =&gt; {     bubble_sort!(@bubble [$($work)* 1] [$($final)*] 2 $($tail)*) };<\/code><\/pre>\n<p>\u0422\u0430\u043a\u043e\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0431\u0435\u0440\u0435\u0442 \u0434\u0432\u0430 \u0447\u0438\u0441\u043b\u0430, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u043d\u0430\u0438\u043c\u0435\u043d\u044c\u0448\u0435\u0435 \u0432\u00a0\u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0438 \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u0435\u0435 \u0447\u0438\u0441\u043b\u043e \u0441\u00a0\u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0447\u0438\u0441\u043b\u0430\u043c\u0438 \u0434\u043b\u044f\u00a0\u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f.<\/p>\n<p>\u042d\u0442\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u0442\u0441\u044f, \u043f\u043e\u043a\u0430 \u043d\u0435\u00a0\u043e\u0441\u0442\u0430\u043d\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u043e \u0447\u0438\u0441\u043b\u043e, \u043d\u0430\u00a0\u044d\u0442\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u043c\u044b \u0443\u0436\u0435 \u0437\u043d\u0430\u0435\u043c, \u0447\u0442\u043e\u00a0\u043e\u043d\u043e \u043d\u0430\u0438\u0431\u043e\u043b\u044c\u0448\u0435\u0435 \u0438\u0437\u00a0\u0434\u0430\u043d\u043d\u043e\u0439 \u043f\u0430\u0440\u0442\u0438\u0438. \u0412\u0442\u043e\u0440\u043e\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u043d\u0430\u0438\u0431\u043e\u043b\u044c\u0448\u0435\u0435 \u0447\u0438\u0441\u043b\u043e \u0432\u00a0\u0444\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a, \u043e\u0431\u043d\u0443\u043b\u044f\u0435\u0442 \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u043e\u0441\u0442\u0430\u0432\u0448\u0438\u0445\u0441\u044f \u0447\u0438\u0441\u0435\u043b.<\/p>\n<pre><code class=\"rust\">(@bubble [$($work:tt)*] [$($final:tt)*] $tail:tt) =&gt; {     bubble_sort!(@bubble [] [$($final)* $tail] $($work)*) };<\/code><\/pre>\n<p>\u0412\u043e\u0442 \u0442\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0432\u0436\u0438\u0432\u0443\u044e: <\/p>\n<pre><code class=\"rust\">bubble_sort!(@bubble [] [] 4 3 2 1)     \/\/ Initial state bubble_sort!(@bubble [3] [] 4 2 1)      \/\/ 3 &lt; 4, add 3 to work bubble_sort!(@bubble [3 2] [] 4 1)      \/\/ 2 &lt; 4, add 2 to work bubble_sort!(@bubble [3 2 1] [] 4)      \/\/ 1 &lt; 4, add 1 to work bubble_sort!(@bubble [] [4] 3 2 1)      \/\/ 4 is largest, add to final bubble_sort!(@bubble [2] [4] 3 1)       \/\/ 2 &lt; 3, add 2 to work bubble_sort!(@bubble [2 1] [] 3)        \/\/ 1 &lt; 3, add 1 to work bubble_sort!(@bubble [] [4 3] 2 1)      \/\/ 3 is largest, add to final bubble_sort!(@bubble [1] [4 3] 2)       \/\/ 1 &lt; 2, add 1 to work bubble_sort!(@bubble [] [4 3 2] 1)      \/\/ 2 is largest, add to final bubble_sort!(@bubble [] [4 3 2 1])      \/\/ 1 is largest, add to final<\/code><\/pre>\n<p>\u0418 \u043d\u0430\u043a\u043e\u043d\u0435\u0446, \u0431\u0430\u0437\u043e\u0432\u043e\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u0435, \u043a\u043e\u0433\u0434\u0430 \u0431\u043e\u043b\u044c\u0448\u0435 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u0447\u0435\u0433\u043e. <\/p>\n<pre><code class=\"rust\">([] [$($final:tt)*]) =&gt; {   todo!() }<\/code><\/pre>\n<p>\u041d\u0430 \u0434\u0430\u043d\u043d\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u0432 <code>final<\/code> \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0442\u043e\u043a\u0435\u043d\u043e\u0432, \u0433\u043e\u0442\u043e\u0432\u0430\u044f \u043a \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435.  <\/p>\n<h3>\u0421\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u0432\u0441\u0435 \u0432\u043e\u0435\u0434\u0438\u043d\u043e  <\/h3>\n<p>\u041a\u00a0\u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u0443\u00a0\u043d\u0430\u0441 \u0434\u0432\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b:<\/p>\n<ol>\n<li>\n<p>\u041d\u0430\u0448\u0430 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430 \u043f\u0443\u0437\u044b\u0440\u044c\u043a\u043e\u043c \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u043e\u0434\u0438\u043d \u0441\u043f\u0438\u0441\u043e\u043a \u0437\u0430\u00a0\u0440\u0430\u0437, \u0430\u00a0\u0441\u043f\u0438\u0441\u043a\u0430 \u0443\u00a0\u043d\u0430\u0441 \u0434\u0432\u0430.<\/p>\n<\/li>\n<li>\n<p>\u041c\u044b \u043d\u0435\u00a0\u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0435 \u0440\u0430\u0441\u043a\u0440\u044b\u0442\u0438\u0435 \u043c\u0430\u043a\u0440\u043e\u0441\u043e\u0432.<\/p>\n<\/li>\n<\/ol>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043f\u043e\u0447\u0435\u043c\u0443 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u043d\u0435\u00a0\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u0412\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043b\u043e\u0433\u0438\u0447\u043d\u043e:<\/p>\n<pre><code class=\"rust\">(@split [$($lcol:tt)*] [$($(rcol:tt)*]) =&gt; {     answer!(         [bubble_sort!($($lcol)*)]          [bubble_sort!($($rcol)*)]     ) };<\/code><\/pre>\n<p>\u041d\u043e\u00a0\u043d\u0435\u00a0\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u041f\u043e\u043b\u0443\u0447\u0430\u044f \u043d\u0430\u00a0\u0432\u0432\u043e\u0434\u0435 <code>[1 3 2] [4 6 5]<\/code>, \u043c\u044b\u00a0\u0431\u044b \u0445\u043e\u0442\u0435\u043b\u0438, \u0447\u0442\u043e\u0431\u044b \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0430\u0441\u043a\u0440\u044b\u043b\u0438\u0441\u044c \u043c\u0430\u043a\u0440\u043e\u0441\u044b <code>bubble_sort<\/code>, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043d\u0435\u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435: <\/p>\n<pre><code class=\"rust\">answer!([3 2 1] [6 5 4])<\/code><\/pre>\n<p>\u041d\u043e\u00a0\u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043c\u0430\u043a\u0440\u043e\u0441\u043e\u0432 \u0432\u00a0Rust \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0435\u00a0\u0442\u0430\u043a. \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0435\u0442 <code>answer!<\/code> \u043a\u0430\u043a\u00a0\u043c\u0430\u043a\u0440\u043e\u0441 \u0438 \u0431\u0443\u0434\u0435\u0442 \u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u0438\u0441\u043a\u0430\u0442\u044c \u0432\u043d\u0443\u0442\u0440\u0438 \u043d\u0435\u0433\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0434\u043b\u044f\u00a0\u0442\u043e\u043a\u0435\u043d\u043e\u0432 <code>[bubble_sort!($($lcol)*)] [bubble_sort!($($rcol)*)]<\/code>.<\/p>\n<p>\u041d\u0435\u0442 \u043a\u0430\u043a\u043e\u0433\u043e\u2011\u043b\u0438\u0431\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u00ab\u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c\u00bb \u0440\u0430\u0441\u043a\u0440\u044b\u0442\u0438\u0435 \u043c\u0430\u043a\u0440\u043e\u0441\u0430 \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0432\u043d\u0435\u0448\u043d\u0435\u043c\u0443 \u043c\u0430\u043a\u0440\u043e\u0441\u0443. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 push down accumulation. \u041c\u0430\u043a\u0440\u043e\u0441\u044b \u043d\u0435\u00a0\u043c\u043e\u0433\u0443\u0442\u00a0\u0431\u044b\u0442\u044c \u0432\u043b\u043e\u0436\u0435\u043d\u044b. \u0412\u043c\u0435\u0441\u0442\u043e \u00ab\u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438\u00bb \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0432\u044b\u0448\u0435, \u043c\u044b \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043a\u0430\u043a\u00a0\u0442\u043e\u043a\u0435\u043d\u044b \u0432\u00a0\u043d\u0430\u0447\u0430\u043b\u0435 \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c\u0443 \u0440\u0430\u0441\u043a\u0440\u044b\u0442\u0438\u044e.<\/p>\n<p>\u0412\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u043c\u044b \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u0434\u0440\u0443\u0433\u0438\u043c \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u043e\u043c\u00a0\u2014 <a href=\"https:\/\/veykril.github.io\/tlborm\/decl-macros\/patterns\/callbacks.html\">\u043a\u043e\u043b\u0431\u044d\u043a\u0430\u043c\u0438<\/a>, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0441\u043f\u0438\u0441\u043a\u0438 \u0432\u00a0\u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0432\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u043c\u0430\u043a\u0440\u043e\u0441\u0430. \u041f\u0430\u0442\u0442\u0435\u0440\u043d \u043a\u043e\u043b\u0431\u044d\u043a\u043e\u0432 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0432\u00a0\u0441\u0435\u0431\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443 \u0438\u043c\u0435\u043d\u0438 \u043c\u0430\u043a\u0440\u043e\u0441\u0430 \u0434\u043b\u044f\u00a0\u0440\u0430\u0441\u043a\u0440\u044b\u0442\u0438\u044f.<\/p>\n<pre><code class=\"rust\">macro_rules! duplicate_and_call {   ($callback:tt $($tail:tt)*) =&gt; {       $callback!($($tail)* $($tail)*)   } }  \/\/ Now when we call: duplicate_and_call!(foo 1 2 3) \/\/ It expands to: foo!(1 2 3 1 2 3)<\/code><\/pre>\n<p>\u0412\u044b\u0437\u043e\u0432 <code>duplicate_and_call!(foo 1 2 3)<\/code> \u0440\u0430\u0441\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 <code>foo!(1 2 3 1 2 3)<\/code>. \u042d\u0442\u043e \u043f\u043e\u00a0\u0441\u0443\u0442\u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0440\u0430\u0441\u043a\u0440\u044b\u0442\u0438\u0435 (<code>1 2 3 1 2 3<\/code>) \u0434\u0440\u0443\u0433\u043e\u043c\u0443 \u043c\u0430\u043a\u0440\u043e\u0441\u0443 \u0434\u043b\u044f\u00a0\u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438.<\/p>\n<p>\u041a\u0430\u0436\u0434\u043e\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e <code>bubble_sort<\/code> \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043a\u043e\u043b\u0431\u044d\u043a (<code>$callback:tt<\/code>) \u0438 \u0435\u0433\u043e \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b (<code>($($state:tt)*)<\/code>). \u041e\u043d\u0438 \u0432\u00a0\u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f \u0434\u0430\u043b\u044c\u0448\u0435 \u0431\u0435\u0437\u00a0\u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439, \u043f\u043e\u043a\u0430 \u043d\u0435\u00a0\u0434\u043e\u0441\u0442\u0438\u0433\u0430\u0435\u0442\u0441\u044f \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e. \u041f\u0440\u0438\u0448\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0435\u0433\u043e.<\/p>\n<pre><code class=\"rust\">(@bubble $callback:tt ($($args:tt)*) [] [$($final:tt)*]) =&gt; {     $callback!( $($args)* [$($final)*] ) };<\/code><\/pre>\n<p>\u0412\u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a\u00a0\u0431\u044b\u043b\u00a0\u0431\u044b \u0440\u0430\u0441\u043a\u0440\u044b\u0442 \u043c\u0430\u043a\u0440\u043e\u0441 <code>bubble_sort<\/code> \u0441\u00a0\u043d\u043e\u0432\u044b\u043c \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u043c \u043f\u0440\u0430\u0432\u0438\u043b\u043e\u043c. <\/p>\n<pre><code class=\"rust\">bubble_sort!(foo (blah blah) 5 4 6) \/\/ initial input \/* all the intermediate bubble_sort steps *\/ bubble_sort!(@bubble foo (blah blah) [] [6 5 4]) \/\/ terminal rule foo!(blah blah [6 5 4])<\/code><\/pre>\n<p>\u041c\u0430\u043a\u0440\u043e\u0441 <code>bubble_sort<\/code> \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0432\u00a0\u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0432\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u043b\u0431\u044d\u043a\u0430, \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u0438 \u043d\u0435\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a. \u0412\u00a0\u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u0438\u0442\u043e\u0433\u0435 \u043e\u043d \u043f\u0435\u0440\u0435\u0434\u0430\u0441\u0442 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u0432\u043c\u0435\u0441\u0442\u0435 \u0441\u00a0\u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u0441\u043f\u0438\u0441\u043a\u043e\u043c \u0432\u00a0\u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043d\u044b\u0445 \u0441\u043a\u043e\u0431\u043a\u0430\u0445 \u043c\u0430\u043a\u0440\u043e\u0441\u0443 \u043a\u043e\u043b\u0431\u044d\u043a\u0430.<\/p>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u044d\u0442\u043e, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043c\u0430\u043a\u0440\u043e\u0441 <code>double_bubble<\/code>, \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0449\u0438\u0439 \u0434\u0432\u0430 \u043d\u0435\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0441\u043f\u0438\u0441\u043a\u0430 \u0438\u0437 <code>split_list<\/code> \u0438 \u0440\u0430\u0441\u043a\u0440\u044b\u0432\u0430\u044e\u0449\u0438\u0439\u0441\u044f \u0432\u00a0\u0434\u0432\u0430 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f <code>bubble_sort<\/code>.<\/p>\n<pre><code class=\"rust\">macro_rules! double_bubble {     \/\/ match the two unsorted lists     ([$($l:tt)*] [$($r:tt)*]) =&gt; {         \/\/ sort the right list, and forward it to double_bubble!(@stage1         bubble_sort!(double_bubble (@stage1 [$($l)*]) $($r)*)     };      \/\/ match the unsorted left list and the sorted right list     (@stage1 [$($unsorted:tt)*] [$($sorted:tt)*]) =&gt; {         \/\/ sort the left list and forward both to double_bubble!(@stage2         bubble_sort!(double_bubble (@stage2 [$($sorted)*]) $($unsorted)*)     };      \/\/ Match two sorted lists     (@stage2 [$($l:tt)*] [$($r:tt)*]) =&gt; {         todo!()     }; }<\/code><\/pre>\n<p>\u041f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u044f \u0440\u0430\u0441\u043a\u0440\u044b\u0442\u0438\u044f <code>bubble_sort<\/code>, \u0432\u043e\u0442 \u0442\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0440\u0430\u0441\u043a\u0440\u044b\u0442\u0438\u044f <code>double_bubble<\/code>. <\/p>\n<pre><code class=\"rust\">double_bubble!([2 1 3] [5 4 6])                         \/\/ initial input -&gt; bubble_sort!(double_bubble (@stage1 [2 1 3]) 5 4 6)  \/\/ sort first list \/* bubble sort expansions *\/ -&gt; double_bubble!(@stage1 [2 1 3] [6 5 4])              \/\/ first list sorted -&gt; bubble_sort!(double_bubble (@stage2 [6 5 4]) 2 1 3)  \/\/ sort second list \/* bubble sort expansions *\/ -&gt; double_bubble!(@stage2 [6 5 4] [3 2 1])              \/\/ both lists sorted<\/code><\/pre>\n<p>\u0418 \u0442\u0435\u043f\u0435\u0440\u044c, \u043a\u043e\u0433\u0434\u0430 \u0443\u00a0\u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0434\u0432\u0430 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0441\u043f\u0438\u0441\u043a\u0430, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u043d\u0430\u0448\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435. <\/p>\n<h2>\u041e\u0442\u0432\u0435\u0442<\/h2>\n<p>\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0448\u0430\u0433\u00a0\u2014 \u0432\u044b\u0437\u043e\u0432 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0434\u043b\u044f\u00a0\u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u043e\u0442\u0432\u0435\u0442\u0430. \u0412\u044b\u00a0\u0436\u0435 \u043f\u043e\u043c\u043d\u0438\u0442\u0435, \u043d\u0430\u0448\u0430 \u0446\u0435\u043b\u044c\u00a0\u2014 \u0441\u043b\u043e\u0436\u0438\u0442\u044c \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u0443\u044e \u0440\u0430\u0437\u043d\u0438\u0446\u0443 \u043c\u0435\u0436\u0434\u0443 \u043f\u0430\u0440\u0430\u043c\u0438 \u0447\u0438\u0441\u0435\u043b \u0432\u00a0\u0441\u043f\u0438\u0441\u043a\u0430\u0445.<\/p>\n<pre><code class=\"rust\">(@stage2 [$($l:tt)*] [$($r:tt)*]) =&gt; {     $(         { if $l &gt; $r { $l - $r } else { $r - $l} } +     )* 0 };<\/code><\/pre>\n<p>\u0412\u043e\u0442 \u0438 \u0432\u0441\u0435! \u041f\u043e\u043b\u0443\u0447\u0438\u0432 \u043d\u0430\u00a0\u0432\u0445\u043e\u0434\u0435 \u043d\u0435\u0447\u0442\u043e \u0432\u0440\u043e\u0434\u0435 <code>[3 2 1] [6 5 4]<\/code>, \u043d\u0430\u0448 \u043c\u0430\u043a\u0440\u043e\u0441 \u0440\u0430\u0441\u043a\u0440\u043e\u0435\u0442\u0441\u044f \u0432\u00a0\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435: <\/p>\n<pre><code>if 3 &gt; 6 { 3 - 6 } else { 6 - 3 } + if 2 &gt; 5 { 2 - 5 } else { 5 - 2 } + if 1 &gt; 4 { 1 - 4 } else { 4 - 1 } + 0 <\/code><\/pre>\n<p>\u041c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u0443\u044e \u0440\u0430\u0437\u043d\u0438\u0446\u0443 \u043c\u0435\u0436\u0434\u0443 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0437\u00a0\u043f\u0430\u0440 \u0438 \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u043c \u0438\u0445 \u0432\u043c\u0435\u0441\u0442\u0435. \u0413\u043e\u0442\u043e\u0432\u043e!<\/p>\n<p>\u0412\u043e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u044d\u0442\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043d\u0438\u0433\u0434\u0435 \u043d\u0435\u00a0\u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f. \u0425\u043e\u0442\u044c \u044f \u0438 \u0441\u043a\u0430\u0437\u0430\u043b, \u0447\u0442\u043e\u00a0const \u043d\u0435\u00a0\u0431\u0443\u0434\u0435\u0442, \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e<a href=\"https:\/\/docs.rs\/const-str\/0.5.7\/const_str\/macro.format.html\"> <u>const_str::format<\/u><\/a> \u0434\u043b\u044f\u00a0\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0442\u0440\u043e\u043a\u0438 \u0438 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u0432\u00a0\u043f\u0430\u043d\u0438\u043a\u0435 \u043d\u0430\u00a0\u044d\u0442\u0430\u043f\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438.<\/p>\n<pre><code class=\"rust\">const fn _main() -&gt; usize {     const answer: usize = day1! {         3   4         4   3         2   5         1   3         3   9         3   3     };     panic!(\"{}\", format!(\"The answer is {answer}\")); }<\/code><\/pre>\n<pre><code class=\"rust\">$ cargo run -r    Compiling advent-of-code-2024 v0.1.0 (\/home\/glados\/Code\/advent-of-code-2024) error[E0080]: evaluation of constant value failed    --&gt; src\/main.rs:142:5     | 142 |     panic!(\"{}\", format!(\"The answer is {answer}\"));     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the evaluated program panicked at 'The answer is 11', src\/main.rs:142:5  ...  For more information about this error, try `rustc --explain E0080`. error: could not compile `advent-of-code-2024` (bin \"advent-of-code-2024\") due to 1 previous error<\/code><\/pre>\n<p>\u0412\u043e\u0442 \u0442\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043c\u0430\u043a\u0440\u043e\u0441 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0432<a href=\"https:\/\/play.rust-lang.org\/?version=stable&amp;mode=debug&amp;edition=2021&amp;gist=ac609da98ee8d6b7a64376557243a16b\"> <u>playground<\/u><\/a>.<\/p>\n<p>\u0418 \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b\u0438. \u0418\u0434\u0435\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0433\u043e\u0442\u043e\u0432\u0430. \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0434\u0430\u0435\u0442 \u043d\u0430\u043c \u043e\u0442\u0432\u0435\u0442 \u0435\u0449\u0435 \u0434\u043e\u00a0\u0442\u043e\u0433\u043e, \u043a\u0430\u043a\u00a0\u043c\u044b \u0437\u0430\u0434\u0430\u043b\u0438 \u0432\u043e\u043f\u0440\u043e\u0441. \u041d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u043e\u0432\u0435\u0440\u0445\u0435\u0434\u0430 \u0432\u00a0\u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0435, \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0431\u0430\u0433\u043e\u0432, \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c. \u0418\u0434\u0435\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u00a0\u2014 \u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0435\u00a0\u0431\u044b\u043b\u043e.<\/p>\n<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/869716\/\"> https:\/\/habr.com\/ru\/articles\/869716\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u041f\u0438\u0441\u0430\u0442\u044c \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0441\u043e\u0444\u0442 \u0441\u043b\u043e\u0436\u043d\u043e. \u041d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0442\u0435\u0441\u0442\u043e\u0432, \u043e\u0431\u0434\u0443\u043c\u044b\u0432\u0430\u043d\u0438\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u0448\u0438\u0445 \u0441\u0430\u0439\u0434\u044d\u0444\u0444\u0435\u043a\u0442\u043e\u0432, \u043c\u0443\u043a\u0438 \u0432\u044b\u0431\u043e\u0440\u0430 \u043c\u0435\u0436\u0434\u0443 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043f\u0430\u043c\u044f\u0442\u0438. \u0418\u0434\u0435\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u00a0\u2014 \u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435\u00a0\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f. \u041d\u0438\u043a\u0430\u043a\u0438\u0445 \u0442\u0435\u0431\u0435 \u043c\u0443\u043a \u0432\u044b\u0431\u043e\u0440\u0430, \u0431\u0430\u0433\u043e\u0432 \u0438 \u0437\u0430\u0431\u043e\u0442. \u041d\u043e\u00a0\u0447\u0442\u043e, \u0435\u0441\u043b\u0438 \u043c\u044b \u043f\u043e\u0439\u0434\u0435\u043c \u0434\u0430\u043b\u044c\u0448\u0435, \u0447\u0442\u043e\u00a0\u0435\u0441\u043b\u0438 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043e\u0442\u0432\u0435\u0442 \u043d\u0430\u00a0\u043d\u0430\u0448 \u0432\u043e\u043f\u0440\u043e\u0441 \u0435\u0449\u0435 \u0434\u043e\u00a0\u0442\u043e\u0433\u043e, \u043a\u0430\u043a\u00a0\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f?<\/p>\n<p>\u0412\u00a0\u044d\u0442\u043e\u043c \u0433\u043e\u0434\u0443 \u044f \u0445\u043e\u0442\u0435\u043b \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u0443\u044e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u0434\u043b\u044f\u00a0\u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0447\u0435\u043b\u043b\u0435\u043d\u0434\u0436\u0430 Advent of Code. \u0415\u0441\u043b\u0438 \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0438 \u043c\u043e\u0436\u0435\u0442 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c, \u043e\u043d\u0430 \u0434\u043e\u043b\u0436\u043d\u0430\u00a0\u0431\u044b\u0442\u044c \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u043d\u0430\u00a0Rust. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u043c\u0443\u0447\u0430\u0435\u043c \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0435 \u043c\u0430\u043a\u0440\u043e\u0441\u044b Rust \u0434\u043b\u044f\u00a0\u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043e\u0442\u0432\u0435\u0442\u0430 \u043d\u0430\u00a0\u0437\u0430\u0434\u0430\u0447\u0443 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0434\u043d\u044f Advent of Code \u0432\u00a0\u0432\u0438\u0434\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438.<\/p>\n<pre><code class=\"rust\">$ cargo build    Compiling advent-of-code-2024 v0.1.0 (\/home\/glados\/Code\/advent-of-code-2024) error[E0080]: evaluation of constant value failed    --&gt; src\/main.rs:142:5     | 142 |     panic!(\"{}\", format!(\"The answer is {answer}\"));     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the evaluated program panicked at 'The answer is 11', src\/main.rs:142:5<\/code><\/pre>\n<h2>\u0417\u0430\u0434\u0430\u0447\u0430<\/h2>\n<p>\u041f\u0440\u043e\u0447\u0438\u0442\u0430\u0439\u0442\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u0437\u0430\u0434\u0430\u0447\u0438 <a href=\"https:\/\/adventofcode.com\/2024\/day\/1\">\u0442\u0443\u0442<\/a>. <\/p>\n<p>\u0413\u0440\u0443\u0431\u043e \u0433\u043e\u0432\u043e\u0440\u044f, \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435: \u043f\u043e\u043b\u0443\u0447\u0438\u0432 \u0434\u0432\u0435 \u043a\u043e\u043b\u043e\u043d\u043a\u0438 \u0447\u0438\u0441\u0435\u043b, \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u0443\u0439\u0442\u0435 \u043e\u0431\u0435, \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u0439\u0442\u0435 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u0443\u044e \u0440\u0430\u0437\u043d\u0438\u0446\u0443 \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u0438 \u043f\u0440\u043e\u0441\u0443\u043c\u043c\u0438\u0440\u0443\u0439\u0442\u0435 \u0438\u0445.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u0430\u0448\u0430 \u0440\u0435\u043b\u0438\u0433\u0438\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043d\u0430\u00a0\u0442\u0430\u043a\u043e\u0435 \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u0432\u043e\u0442 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043d\u0430\u00a0python:<\/p>\n<pre><code class=\"python\">\"\"\"Warning: This code completes in a shocking O(n log n) time complexity and allocates memory with reckless abandon.\"\"\" input = [   3,   4,   4,   3,   2,   5,   1,   3,   3,   9,   3,   3, ] left = sorted(input[::2]) right = sorted(input[1::2]) print(sum(abs(l - r) for l, r in zip(left, right))) # 11 <\/code><\/pre>\n<p>\u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u043d\u0430\u00a0python \u043d\u0435\u00a0\u0442\u043e\u043b\u044c\u043a\u043e \u0435\u043b\u0435 \u0447\u0438\u0442\u0430\u0435\u043c\u043e\u0435, \u0442\u0430\u043a \u0435\u0449\u0435 \u0438 \u043d\u0435\u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e\u0435\u00a0\u2014 <code>O(n log n)<\/code>. \u0415\u0441\u043b\u0438 \u043c\u044b \u043d\u0435\u00a0\u0445\u043e\u0442\u0438\u043c, \u0447\u0442\u043e\u0431\u044b \u0418\u0418 \u043e\u0442\u043e\u0431\u0440\u0430\u043b \u0443\u00a0\u043d\u0430\u0441 \u0440\u0430\u0431\u043e\u0442\u0443, \u043d\u0430\u0434\u043e \u0441\u0442\u0440\u0435\u043c\u0438\u0442\u044c\u0441\u044f \u043a\u00a0\u0431\u043e\u043b\u0435\u0435 \u0432\u044b\u0441\u043e\u043a\u043e\u0439 \u043f\u043b\u0430\u043d\u043a\u0435. \u0421\u043a\u043e\u0440\u043e \u0432\u0441\u0435 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435 <code>O(1)<\/code> \u0441\u0442\u0430\u043d\u0435\u0442 \u043d\u0435\u043f\u0440\u0438\u0435\u043c\u043b\u0435\u043c\u044b\u043c.<\/p>\n<p>\u0411\u043b\u0430\u0433\u043e\u0440\u043e\u0434\u043d\u044b\u0439 \u043f\u043e\u0440\u044b\u0432, \u043d\u043e\u00a0\u0434\u0430\u043b\u0435\u043a\u043e \u043d\u0435\u00a0\u0438\u0434\u0435\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430.<\/p>\n<h2>\u0421\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u0441\u0442\u0432\u043e<\/h2>\n<p>\u0415\u0441\u043b\u0438 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u043f\u043e\u0438\u0441\u0442\u0438\u043d\u0435 \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u0443\u044e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443\u00a0\u2014 \u0442\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0434\u0430\u0435\u0442 \u043d\u0430\u043c \u043e\u0442\u0432\u0435\u0442 \u043d\u0438 \u0440\u0430\u0437\u0443 \u043d\u0435\u00a0\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u044f\u0441\u044c, \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0432\u00a0\u0441\u0430\u043c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440. \u0421\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 Rust \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u0434\u0432\u0430 \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439 \u043d\u0430\u00a0\u044d\u0442\u0430\u043f\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438: \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442 \u0438 \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0435 \u043c\u0430\u043a\u0440\u043e\u0441\u044b.<\/p>\n<p>\u0422\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442 \u0434\u043b\u044f\u00a0\u0440\u0430\u0441\u0447\u0435\u0442\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043d\u0430\u00a0\u044d\u0442\u0430\u043f\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0441\u0435\u0433\u043e. \u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442 \u0432\u00a0Rust \u0441\u0438\u043b\u044c\u043d\u043e \u0440\u0430\u0437\u0432\u0438\u043b\u043e\u0441\u044c \u0437\u0430\u00a0\u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u0438 \u0441\u0442\u0430\u043b\u043e \u043a\u0440\u0430\u0439\u043d\u0435 <a href=\"https:\/\/www.youtube.com\/watch?v=zXCr1BH5Y-4\">\u043c\u043e\u0449\u043d\u044b\u043c<\/a> \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u043c. \u041d\u043e\u00a0\u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0441\u0442\u0430\u0442\u044c\u0438 \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u00ab\u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u0430\u043a\u0440\u043e\u0441\u043e\u0432 Rust\u00bb, \u0442\u0430\u043a \u0447\u0442\u043e\u00a0\u0438\u0445 \u043c\u044b \u0438 \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c.<\/p>\n<h3>\u0420\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0441\u043f\u0438\u0441\u043a\u0430<\/h3>\n<p>\u041f\u0435\u0440\u0432\u044b\u0439 \u0448\u0430\u0433\u00a0\u2014 \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c \u0438\u043c\u0435\u044e\u0449\u0438\u0435\u0441\u044f \u043a\u043e\u043b\u043e\u043d\u043a\u0438 \u043d\u0430 2\u00a0\u0441\u043f\u0438\u0441\u043a\u0430. <\/p>\n<pre><code class=\"rust\">let answer = day1! {   3   4   4   3   2   5   1   3   3   9   3   3 };<\/code><\/pre>\n<p>\u0412\u043e\u0442 \u0442\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 <a href=\"https:\/\/play.rust-lang.org\/?version=stable&amp;mode=debug&amp;edition=2021&amp;gist=f6dc966e4d2ca824eb5cc3b43abffd32\">\u043c\u0430\u043a\u0440\u043e\u0441<\/a>: <\/p>\n<pre><code class=\"rust\">macro_rules! day1 {     \/\/ match two numbers at a time, storing them in left and right lists     (@split [$($lcol:tt)*] [$($rcol:tt)*] $l:tt $r:tt $($tail:tt)*) =&gt; {         day1!(@split [$($lcol)* $l] [$($rcol)* $r] $($tail)*)     };     \/\/ base case when no numbers remain     (@split [$($lcol:tt)*] [$($rcol:tt)*]) =&gt; {         todo!()     };     \/\/ entry     ($($tail:tt)*) =&gt; { day1!(@split [] [] $($tail)*) }; }<\/code><\/pre>\n<p>\u041d\u0435\u00a0\u0437\u0430\u043b\u0435\u0437\u0430\u044f \u0432\u00a0\u0434\u0435\u0431\u0440\u0438 \u0438\u0445 \u0440\u0430\u0431\u043e\u0442\u044b, \u043c\u0430\u043a\u0440\u043e\u0441\u044b, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c\u044b\u0435 \u0441\u00a0\u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>macro_rules!<\/code> \u044d\u0442\u043e \u043d\u0430\u0431\u043e\u0440 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432 \u0438 \u0440\u0430\u0441\u043a\u0440\u044b\u0442\u0438\u0439. \u041e\u00a0\u043d\u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u0434\u0443\u043c\u0430\u0442\u044c \u043a\u0430\u043a\u00a0\u043e\u00a0\u043d\u0430\u0431\u043e\u0440\u0435 \u043f\u0440\u0430\u0432\u0438\u043b \u0438\u0437\u00a0\u0434\u0432\u0443\u0445 \u0447\u0430\u0441\u0442\u0435\u0439: <\/p>\n<pre><code class=\"rust\">macro_rules! some_macro {   (pattern1) =&gt; { expansion1 };   (pattern2) =&gt; { expansion2 };   \/* ... *\/ }<\/code><\/pre>\n<p>\u041a\u0430\u0436\u0434\u043e\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u0433\u043e\u0432\u043e\u0440\u0438\u0442: \u00ab\u0415\u0441\u043b\u0438 \u0432\u0438\u0434\u0438\u0448\u044c \u0442\u0430\u043a\u043e\u0439 \u0448\u0430\u0431\u043b\u043e\u043d, \u0437\u0430\u043c\u0435\u043d\u044f\u0439 \u0435\u0433\u043e \u044d\u0442\u0438\u043c \u0440\u0430\u0441\u043a\u0440\u044b\u0442\u0438\u0435\u043c\u00bb. \u041c\u0430\u043a\u0440\u043e\u0441 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0434\u043e\u00a0\u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 \u043d\u0435\u00a0\u043e\u0441\u0442\u0430\u043d\u0435\u0442\u0441\u044f \u0447\u0430\u0441\u0442\u0435\u0439 \u0434\u043b\u044f\u00a0\u0440\u0430\u0441\u043a\u0440\u044b\u0442\u0438\u044f. \u0421\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432 \u043c\u043e\u0436\u0435\u0442\u00a0\u0431\u044b\u0442\u044c \u0441\u043b\u043e\u0436\u043d\u044b\u043c, \u043d\u043e\u00a0\u043c\u044b \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c\u0441\u044f \u043d\u0430\u00a0\u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0448\u0430\u0431\u043b\u043e\u043d\u0430\u0445 \u0432\u00a0\u0440\u0430\u043c\u043a\u0430\u0445 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438.<\/p>\n<p>\u041d\u0430\u0447\u043d\u0435\u043c \u0441\u00a0\u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u0448\u0430\u0431\u043b\u043e\u043d\u0430 <code>($a:tt) =&gt; { $a $a };<\/code>. \u0414\u043b\u044f\u00a0Rust \u043e\u043d \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442:<\/p>\n<ul>\n<li>\n<p>\u041e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0439 \u043e\u0434\u0438\u043d \u0442\u043e\u043a\u0435\u043d <code>(tt)<\/code> \u0438 \u043d\u0430\u0437\u044b\u0432\u0430\u0439 \u0435\u0433\u043e <code>a<\/code>.<\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u043c\u0435\u043d\u0438 \u0435\u0433\u043e, \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u044f \u0442\u043e\u043a\u0435\u043d \u0434\u0432\u0430\u0436\u0434\u044b<\/p>\n<\/li>\n<\/ul>\n<p>\u0422\u0430\u043a <code>foo<\/code> \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f <code>foo foo<\/code>, \u0430 <code>1<\/code> \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f <code>1 1<\/code>.<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0442\u043e\u043a\u0435\u043d\u043e\u0432 \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u0435\u0442\u00a0\u0431\u044b\u0442\u044c \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0430 \u0441\u00a0\u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>($($tail:tt)*)<\/code>. \u0421\u0438\u043c\u0432\u043e\u043b <code>*<\/code>, \u043a\u0430\u043a\u00a0\u0438 \u0432\u00a0\u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u0445, \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u043d\u043e\u043b\u044c \u0438\u043b\u0438\u00a0\u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u0435\u043d\u0438\u0439. \u041a\u00a0\u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u0434\u043b\u044f\u00a0\u0432\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f <code>1 2 3<\/code>:<\/p>\n<ul>\n<li>\n<p>\u0420\u0430\u0441\u043a\u0440\u044b\u0442\u0438\u0435 <code>($($tail)*)<\/code> \u0440\u0430\u0441\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0432 <code>1 2 3<\/code><\/p>\n<\/li>\n<li>\n<p>\u0420\u0430\u0441\u043a\u0440\u044b\u0442\u0438\u0435 <code>($($tail:$tail)*)<\/code> \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432 <code>1:1 2:2 3:3<\/code><\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u043e\u00a0\u0441\u0443\u0442\u0438, \u0432\u0441\u0435 \u0432\u043e\u00a0\u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u0441\u043a\u043e\u0431\u043a\u0430\u0445 \u0434\u0443\u0431\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f\u00a0\u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0435\u0433\u043e \u0442\u043e\u043a\u0435\u043d\u0430.<\/p>\n<p>\u0418 \u043d\u0430\u043a\u043e\u043d\u0435\u0446, \u0448\u0430\u0431\u043b\u043e\u043d\u044b \u043c\u043e\u0433\u0443\u0442 \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0441\u00a0\u0442\u043e\u043a\u0435\u043d\u0430\u043c\u0438 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e. \u0428\u0430\u0431\u043b\u043e\u043d <code>(abc $($tail:tt)*)<\/code> \u0431\u0443\u0434\u0435\u0442 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0434\u043b\u044f\u00a0\u043b\u044e\u0431\u043e\u0433\u043e \u0432\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0435\u0433\u043e\u0441\u044f \u0441\u00a0\u0442\u043e\u043a\u0435\u043d\u0430 <code>abc<\/code>.<\/p>\n<p>\u042d\u0442\u043e\u0433\u043e \u0432\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0434\u043e\u043b\u0436\u043d\u043e\u00a0\u0431\u044b\u0442\u044c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c \u0432\u0445\u043e\u0434\u043d\u043e\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e<\/p>\n<pre><code class=\"rust\">    \/\/ entry     ($($tail:tt)*) =&gt; { day1!(@split [] [] $($tail)*) };<\/code><\/pre>\n<p>\u042d\u0442\u043e \u044d\u0442\u0430\u043f \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0438. \u0422\u0443\u0442 \u043c\u044b<\/p>\n<ul>\n<li>\n<p>\u0421\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c 0\u00a0\u0438\u043b\u0438\u00a0\u0431\u043e\u043b\u0435\u0435 \u0442\u043e\u043a\u0435\u043d\u043e\u0432 (\u0432\u0435\u0441\u044c\/\u043b\u044e\u0431\u043e\u0439 \u0432\u0432\u043e\u0434).<\/p>\n<\/li>\n<li>\n<p>\u041e\u0431\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u043c \u0432\u00a0\u043d\u043e\u0432\u044b\u0439 \u043c\u0430\u043a\u0440\u043e\u0441, \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u0439\u0441\u044f \u0441\u043e <code>@split<\/code>.<\/p>\n<\/li>\n<li>\n<p>\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0434\u0432\u0430 \u043f\u0443\u0441\u0442\u044b\u0445 \u0441\u043f\u0438\u0441\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u00a0\u0438\u0442\u043e\u0433\u0435 \u0431\u0443\u0434\u0443\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043f\u0440\u0430\u0432\u0443\u044e \u0438 \u043b\u0435\u0432\u0443\u044e \u043a\u043e\u043b\u043e\u043d\u043a\u0438 \u0447\u0438\u0441\u0435\u043b.<\/p>\n<\/li>\n<li>\n<p>\u0412\u00a0\u043a\u043e\u043d\u0446\u0435 \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u043d\u0430\u0448\u0438 \u0432\u0445\u043e\u0434\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043d\u0435\u0442\u0440\u043e\u043d\u0443\u0442\u044b\u043c\u0438.<\/p>\n<\/li>\n<\/ul>\n<p><code>@split<\/code> \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043d\u0430\u043c \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435\u043c, \u0437\u0430\u0434\u0430\u0432 \u043d\u043e\u0432\u043e\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u0434\u043b\u044f\u00a0\u0448\u0430\u0431\u043b\u043e\u043d\u0430, \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0435\u0433\u043e\u0441\u044f \u0441 <code>@split<\/code>. \u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 <code>@_name_<\/code> \u043e\u0431\u0443\u0441\u043b\u043e\u0432\u043b\u0435\u043d\u043e \u043a\u043e\u043d\u0432\u0435\u043d\u0446\u0438\u0435\u0439 \u044f\u0437\u044b\u043a\u0430. \u042d\u0442\u043e \u043c\u043e\u0436\u0435\u0442\u00a0\u0431\u044b\u0442\u044c \u043b\u044e\u0431\u0430\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0442\u043e\u043a\u0435\u043d\u043e\u0432, \u0434\u043b\u044f\u00a0\u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0437\u0430\u0434\u0430\u0442\u044c \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435.<\/p>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, <code>day1!( 1 2 3 4)<\/code> \u0440\u0430\u0441\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 <code>day1!(@split [] [] 1 2 3 4)<\/code>.<\/p>\n<p>\u041d\u0430\u0441\u0442\u043e\u044f\u0449\u0430\u044f \u043c\u0430\u0433\u0438\u044f \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0434\u0430\u043b\u044c\u0448\u0435.<\/p>\n<pre><code class=\"rust\">    \/\/ match two numbers at a time, storing them in left and right lists     (@split [$($lcol:tt)*] [$($rcol:tt)*] $l:tt $r:tt $($tail:tt)*) =&gt; {         day1!(@split [$($lcol)* $l] [$($rcol)* $r] $($tail)*)     };<\/code><\/pre>\n<p>\u042d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0441\u043b\u043e\u0436\u043d\u043e, \u043d\u043e\u00a0\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043b\u0435\u0433\u043a\u043e \u043f\u043e\u043d\u044f\u0442\u044c \u043d\u0430\u00a0\u043f\u0440\u0438\u043c\u0435\u0440\u0435.<\/p>\n<p>\u041d\u0430\u0447\u0438\u043d\u0430\u044f \u0441\u00a0\u0440\u0430\u0441\u043a\u0440\u044b\u0442\u0438\u044f \u0441\u00a0\u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u0448\u0430\u0433\u0430 <code>day1!(@split [] [] 1 2 3 4)<\/code>, \u043f\u043e\u0434\u00a0\u0448\u0430\u0431\u043b\u043e\u043d \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0442:<\/p>\n<ul>\n<li>\n<p>\u041b\u0438\u0442\u0435\u0440\u0430\u043b \u0442\u043e\u043a\u0435\u043d\u0430 <code>@split<\/code><\/p>\n<\/li>\n<li>\n<p>\u041f\u0443\u0441\u0442\u044b\u0435 \u0441\u043f\u0438\u0441\u043a\u0438 <code>[] []<\/code> (<code>[$($lcol:tt)*] [$($(rcol:tt)*]<\/code>)<\/p>\n<\/li>\n<li>\n<p>\u041f\u0435\u0440\u0432\u043e\u0435 \u0447\u0438\u0441\u043b\u043e <code>1<\/code> (<code>$l<\/code>)<\/p>\n<\/li>\n<li>\n<p>\u0412\u0442\u043e\u0440\u043e\u0435 \u0447\u0438\u0441\u043b\u043e <code>2<\/code> (<code>$r<\/code>)<\/p>\n<\/li>\n<li>\n<p>\u0418 \u0432\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0442\u043e\u043a\u0435\u043d\u044b <code>3 4<\/code> (<code>$($tail:tt)*<\/code>)<\/p>\n<\/li>\n<\/ul>\n<p>\u0417\u0430\u0442\u0435\u043c \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u0440\u0430\u0441\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 <code>day1!(@split [1] [2] 3 4)<\/code>. \u0420\u0430\u0441\u043a\u0440\u044b\u0442\u0438\u0435 \u0432\u00a0\u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u043d\u043e\u0432\u044b\u0439 \u043c\u0430\u043a\u0440\u043e\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439:<\/p>\n<ul>\n<li>\n<p>\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 <code>1<\/code> \u0432\u00a0\u043a\u043e\u043d\u0435\u0446 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430 (<code>[$($lcol)* $l]<\/code>)<\/p>\n<\/li>\n<li>\n<p>\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 <code>2<\/code> \u0432\u00a0\u043a\u043e\u043d\u0435\u0446 \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430 (<code>[$($(rcol)* $r]<\/code>)<\/p>\n<\/li>\n<li>\n<p>\u041e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0442\u043e\u043a\u0435\u043d\u044b \u043e\u0441\u0442\u0430\u044e\u0442\u0441\u044f \u0432\u00a0\u043a\u043e\u043d\u0446\u0435 <code>3 4<\/code> (<code>$($tail)*<\/code>)<\/p>\n<\/li>\n<\/ul>\n<p>\u0414\u0440\u0443\u0433\u0438\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438, \u043c\u044b \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0435\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043a\u043e\u043b\u043e\u043d\u043e\u043a \u0432\u00a0\u0434\u0432\u0443\u0445 \u0441\u043f\u0438\u0441\u043a\u0430\u0445 \u0438 \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u043d\u0435\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u0435 \u0442\u043e\u043a\u0435\u043d\u044b \u0432\u00a0\u043a\u043e\u043d\u0446\u0435. \u042d\u0442\u043e \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0434\u0432\u0430 \u0442\u043e\u043a\u0435\u043d\u0430 \u0438\u0437\u00a0\u0435\u0449\u0435 \u043d\u0435\u00a0\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u043e\u0433\u043e \u0432\u0432\u043e\u0434\u0430, \u0430\u00a0\u0440\u0430\u0441\u043a\u0440\u044b\u0442\u0438\u0435 \u043f\u043e\u043c\u0435\u0449\u0430\u0435\u0442 \u0438\u0445 \u0432\u00a0\u043d\u0443\u0436\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a.<\/p>\n<p>\u041f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e\u0435 \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0442\u043e\u043a\u0435\u043d\u043e\u0432 \u0438\u0437\u00a0\u0445\u0432\u043e\u0441\u0442\u0430 \u0438 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u0430\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445\u00a0\u2014 \u043f\u0430\u0442\u0442\u0435\u0440\u043d, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f<a href=\"https:\/\/veykril.github.io\/tlborm\/decl-macros\/patterns\/tt-muncher.html\"> <u>tt munching<\/u><\/a>. \u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u0434\u043b\u044f\u00a0\u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u0430\u043c\u0438 \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442<a href=\"https:\/\/veykril.github.io\/tlborm\/decl-macros\/patterns\/push-down-acc.html\"> <u>push down accumulation<\/u><\/a>.<\/p>\n<p>\u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442\u0441\u044f, \u043f\u043e\u043a\u0430 \u043d\u0435\u00a0\u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u043d\u0435\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u0445 \u0442\u043e\u043a\u0435\u043d\u043e\u0432 \u043d\u0430\u00a0\u0432\u0445\u043e\u0434\u0435.<\/p>\n<pre><code class=\"rust\">day1!(@split [] [] 1 2 3 4)      \/\/ Match and split first pair (1,2) -&gt; day1!(@split [1] [2] 3 4)     \/\/ Match and split second pair (3,4) -&gt; day1!(@split [1 3] [2 4])     \/\/ No more pairs to match. move to base case<\/code><\/pre>\n<p>\u041d\u0430\u00a0\u0434\u0430\u043d\u043d\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u0443\u00a0\u043d\u0430\u0441 \u043d\u0435\u00a0\u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0442\u043e\u043a\u0435\u043d\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432 <code>$l $r<\/code> \u0438 \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043d\u0435\u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u043e. \u042d\u0442\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043d\u0430\u0441 \u043a\u00a0\u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u043c\u0443 \u043f\u0440\u0430\u0432\u0438\u043b\u0443, \u043e\u0442\u043d\u043e\u0441\u044f\u0449\u0435\u043c\u0443\u0441\u044f \u043a\u00a0\u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u044e \u0441\u043f\u0438\u0441\u043a\u0430.<\/p>\n<pre><code class=\"rust\">    \/\/ base case when no numbers remain     (@split [$($lcol:tt)*] [$($rcol:tt)*]) =&gt; {         todo!()     };<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0443\u00a0\u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0434\u0432\u0430 \u0441\u043f\u0438\u0441\u043a\u0430 \u043d\u0435\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0442\u043e\u043a\u0435\u043d\u043e\u0432 \u0438 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u0442\u044c \u043a\u00a0\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0444\u0430\u0437\u0435 \u043d\u0430\u0448\u0435\u0439 \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b.<\/p>\n<h3>\u0421\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430 \u0441\u043f\u0438\u0441\u043a\u0430<\/h3>\n<p>\u041d\u0430\u0434\u0435\u044e\u0441\u044c, \u0447\u0442\u043e\u00a0\u043f\u0440\u043e\u0448\u043b\u0430\u044f \u0447\u0430\u0441\u0442\u044c\u00a0\u0431\u044b\u043b\u0430 \u043c\u044f\u0433\u043a\u0438\u043c \u0432\u0432\u0435\u0434\u0435\u043d\u0438\u0435\u043c \u0432\u00a0\u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0435 \u043c\u0430\u043a\u0440\u043e\u0441\u044b \u0432\u00a0rust, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e\u00a0\u044d\u0442\u0430 \u0447\u0430\u0441\u0442\u044c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u043a\u043b\u044f\u0442\u0430.<\/p>\n<p>\u0414\u0430\u043b\u044c\u0448\u0435 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c <code>2 1 4 3<\/code> \u0441\u00a0\u043f\u0440\u043e\u0448\u043b\u043e\u0433\u043e \u0448\u0430\u0433\u0430 \u0434\u043e <code>1 2 3 4<\/code> \u043d\u0430\u00a0\u044d\u0442\u0430\u043f\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438. \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0432\u00a0\u0442\u043e\u043c, \u0447\u0442\u043e\u00a0\u043c\u0430\u043a\u0440\u043e\u0441\u044b \u043d\u0435\u00a0\u0443\u043c\u0435\u044e\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441\u00a0\u0443\u0441\u043b\u043e\u0432\u0438\u044f\u043c\u0438, \u043e\u043d\u0438\u00a0\u043b\u0438\u0448\u044c \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0438 \u0440\u0430\u0441\u043a\u0440\u044b\u0432\u0430\u044e\u0442 \u0442\u043e\u043a\u0435\u043d\u044b. \u041d\u0435\u0442 \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u0441\u043a\u0430\u0437\u0430\u0442\u044c \u00ab\u0435\u0441\u043b\u0438 <code>a &gt; b<\/code>, \u0440\u0430\u0441\u043a\u0440\u043e\u0439 \u0432 <code>b a<\/code>, \u0432\u00a0\u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435\u00a0\u2014 \u0432 <code>a b<\/code>\u00bb. \u041f\u043e\u00a0\u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435 \u043d\u0435\u00a0\u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e.<\/p>\n<p>\u041a\u043e\u043d\u0435\u0447\u043d\u043e \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0431\u0440\u0443\u0442\u0444\u043e\u0440\u0441\u0438\u0442\u044c \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435, \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u0432 \u0448\u0430\u0431\u043b\u043e\u043d\u044b \u0434\u043b\u044f\u00a0\u043a\u0430\u0436\u0434\u043e\u0439 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0439 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u0438.<\/p>\n<pre><code class=\"rust\">  (@sort 1 1) =&gt; { 1 1 };   (@sort 1 2) =&gt; { 1 2 };   (@sort 2 1) =&gt; { 1 2 };   (@sort 1 3) =&gt; { 1 3 };   (@sort 3 1) =&gt; { 1 3 };   \/* ... *\/<\/code><\/pre>\n<p>\u041d\u043e \u044d\u0442\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u043e\u0447\u0435\u043d\u044c \u043a\u043e\u0441\u0442\u044b\u043b\u044c\u043d\u043e\u2026<\/p>\n<p>\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u044f \u044d\u0442\u0443 \u0438\u0434\u0435\u044e, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0443 \u043f\u0443\u0437\u044b\u0440\u044c\u043a\u043e\u043c \u0432 \u0432\u0438\u0434\u0435 \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u043c\u0430\u043a\u0440\u043e\u0441\u0430.<\/p>\n<details class=\"spoiler\">\n<summary>\u041f\u043e\u043b\u043d\u044b\u0439 \u043c\u0430\u043a\u0440\u043e\u0441 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u043f\u0443\u0437\u044b\u0440\u044c\u043a\u043e\u043c<\/summary>\n<div class=\"spoiler__content\">\n<p><a href=\"https:\/\/play.rust-lang.org\/?version=stable&amp;mode=debug&amp;edition=2021&amp;gist=146d65cb34a1bb6a955f0055dfbd74f3\">playground<\/a><\/p>\n<pre><code class=\"rust\">macro_rules! bubble_sort {     (@bubble [$($work:tt)*] [$($final:tt)*] 1 1 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 1] [$($final)*] 1 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 1 2 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 1] [$($final)*] 2 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 1 3 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 1] [$($final)*] 3 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 1 4 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 1] [$($final)*] 4 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 1 5 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 1] [$($final)*] 5 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 1 6 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 1] [$($final)*] 6 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 1 7 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 1] [$($final)*] 7 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 1 8 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 1] [$($final)*] 8 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 1 9 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 1] [$($final)*] 9 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 2 1 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 1] [$($final)*] 2 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 2 2 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 2] [$($final)*] 2 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 2 3 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 2] [$($final)*] 3 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 2 4 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 2] [$($final)*] 4 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 2 5 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 2] [$($final)*] 5 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 2 6 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 2] [$($final)*] 6 $($tail)*) };     (@bubble [$($work:tt)*] [$($final:tt)*] 2 7 $($tail:tt)*) =&gt; { bubble_sort!(@bubble [$($work)* 2]<\/code><\/pre>\n<\/div>\n<\/details>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-442888","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/442888","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=442888"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/442888\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=442888"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=442888"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=442888"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}