{"id":453844,"date":"2025-03-31T09:00:13","date_gmt":"2025-03-31T09:00:13","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=453844"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=453844","title":{"rendered":"<span>SQL HowTo: \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u0441 \u043c\u0430\u0441\u0441\u0438\u0432\u0430\u043c\u0438 (Advent of Code 2024, Day 23: LAN Party)<\/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>\u0412 \u044d\u0442\u043e\u0439\u00a0<a href=\"\/ru\/post\/868964\/\">\u0447\u0435\u043b\u043b\u0435\u043d\u0434\u0436-\u0441\u0435\u0440\u0438\u0438 \u0441\u0442\u0430\u0442\u0435\u0439<\/a>\u00a0\u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c PostgreSQL \u043a\u0430\u043a \u0441\u0440\u0435\u0434\u0443 \u0434\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0437\u0430\u0434\u0430\u0447\u00a0<a href=\"https:\/\/adventofcode.com\/2024\">Advent of Code 2024<\/a>.<\/p>\n<p>\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, SQL \u043d\u0435 \u0441\u0430\u043c\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u044f\u0437\u044b\u043a, \u0437\u0430\u0442\u043e \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0435\u0433\u043e \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438, \u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0432\u044b \u043c\u043e\u0433\u043b\u0438 \u0438 \u043d\u0435 \u043f\u043e\u0434\u043e\u0437\u0440\u0435\u0432\u0430\u0442\u044c.<\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043d\u0430\u0434 \u043c\u0430\u0441\u0441\u0438\u0432\u0430\u043c\u0438, \u0447\u0442\u043e\u0431\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0441\u0432\u044f\u0437\u043d\u043e\u0441\u0442\u044c \u0433\u0440\u0430\u0444\u043e\u0432.<\/p>\n<ul>\n<li>\n<p><a href=\"\/ru\/post\/868964\/\">\u0420\u0435\u0448\u0435\u043d\u0438\u0435 Day 1: Historian Hysteria (\u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0438 \u0443\u0441\u043b\u043e\u0432\u043d\u0430\u044f \u0430\u0433\u0440\u0435\u0433\u0430\u0446\u0438\u044f)<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"\/ru\/post\/868982\/\">\u0420\u0435\u0448\u0435\u043d\u0438\u0435 Day 2: Red-Nosed Reports (\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0430\u0433\u0440\u0435\u0433\u0430\u0442\u044b)<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"\/ru\/post\/869004\/\">\u0420\u0435\u0448\u0435\u043d\u0438\u0435 Day 3: Mull It Over (&#171;\u0447\u0438\u0441\u0442\u044b\u0435&#187; \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043a\u0438)<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"\/ru\/post\/869026\/\">\u0420\u0435\u0448\u0435\u043d\u0438\u0435 Day 4: Ceres Search (\u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u043c\u0430\u0441\u0441\u0438\u0432\u0430\u043c\u0438)<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"\/ru\/post\/869654\/\">\u0420\u0435\u0448\u0435\u043d\u0438\u0435 Day 5: Print Queue (\u043f\u043e\u0438\u0441\u043a \u0432 \u0441\u043b\u043e\u0432\u0430\u0440\u0435 \u0438 \u043c\u0430\u0441\u0441\u0438\u0432\u0430\u0445, \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430 &#171;\u043f\u0443\u0437\u044b\u0440\u044c\u043a\u043e\u043c&#187;)<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"\/ru\/post\/869982\/\">\u0420\u0435\u0448\u0435\u043d\u0438\u0435 Day 6: Guard Gallivant (\u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u0435 \u0446\u0438\u043a\u043b\u044b \u0438 \u0438\u0445 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c)<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"\/ru\/post\/872368\/\">\u0420\u0435\u0448\u0435\u043d\u0438\u0435 Day 7: Bridge Repair (&#171;\u044d\u043a\u0441\u043f\u043e\u043d\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u0430\u044f&#187; \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u044f)<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"\/ru\/post\/873170\/\">\u0420\u0435\u0448\u0435\u043d\u0438\u0435 Day 8: Resonant Collinearity (\u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u0438 \u043f\u043e\u0434\u0441\u0447\u0435\u0442 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u0439)<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"\/ru\/post\/873702\/\">\u0420\u0435\u0448\u0435\u043d\u0438\u0435 Day 9: Disk Fragmenter (\u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u044e)<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"\/ru\/post\/874290\/\">\u0420\u0435\u0448\u0435\u043d\u0438\u0435 Day 10: Hoof It (\u043f\u043e\u0438\u0441\u043a &#171;\u0432 \u0448\u0438\u0440\u0438\u043d\u0443&#187; \u0432\u043d\u0443\u0442\u0440\u0438 \u0446\u0438\u043a\u043b\u0430)<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"\/ru\/post\/865894\/\">\u0420\u0435\u0448\u0435\u043d\u0438\u0435 Day 11: Plutonian Pebbles (\u0430\u0433\u0440\u0435\u0433\u0430\u0446\u0438\u044f \u0432\u043d\u0443\u0442\u0440\u0438 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0438)<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"\/ru\/post\/875512\/\">\u0420\u0435\u0448\u0435\u043d\u0438\u0435 Day 12: Garden Groups (\u0432\u043e\u043b\u043d\u043e\u0432\u043e\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0438 \u043f\u043e\u0434\u0441\u0447\u0435\u0442 \u0433\u0440\u0430\u043d\u0438\u0446)<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"\/ru\/post\/876852\/\">\u0420\u0435\u0448\u0435\u043d\u0438\u0435 Day 13: Claw Contraption (\u043f\u043e\u0448\u0430\u0433\u043e\u0432\u043e \u0440\u0435\u0448\u0430\u0435\u043c \u0421\u041b\u0423)<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"\/ru\/post\/878210\/\">\u0420\u0435\u0448\u0435\u043d\u0438\u0435 Day 14: Restroom Redoubt (\u043d\u0430\u0445\u043e\u0434\u0438\u043c &#171;\u0435\u043b\u043e\u0447\u043a\u0443&#187; \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0446\u0435\u043d\u0442\u0440\u0430 \u043c\u0430\u0441\u0441)<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"\/ru\/post\/879548\/\">\u0420\u0435\u0448\u0435\u043d\u0438\u0435 Day 15: Warehouse Woes (\u0438\u0433\u0440\u0430\u0435\u043c \u0432 \u0441\u043e\u043a\u043e\u0431\u0430\u043d \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e json-\u043a\u0430\u0440\u0442\u044b \u0438 \u0442\u0438\u043f\u0430 point)<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"\/ru\/post\/882034\/\">\u0420\u0435\u0448\u0435\u043d\u0438\u0435 Day 16: Reindeer Maze (\u0443\u043a\u0440\u043e\u0449\u0430\u0435\u043c \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u044e \u0432 \u043b\u0430\u0431\u0438\u0440\u0438\u043d\u0442\u0435)<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"\/ru\/post\/884522\/\">\u0420\u0435\u0448\u0435\u043d\u0438\u0435 Day 17: Chronospatial Computer (\u043f\u043e\u0434\u0431\u0438\u0440\u0430\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u0435\u043c)<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"\/ru\/post\/885882\/\">\u0420\u0435\u0448\u0435\u043d\u0438\u0435 Day 18: RAM Run (\u043f\u043e\u0438\u0441\u043a \u043f\u0443\u0442\u0438 \u0438 \u0434\u0438\u0445\u043e\u0442\u043e\u043c\u0438\u044f)<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"\/ru\/post\/887300\/\">\u0420\u0435\u0448\u0435\u043d\u0438\u0435 Day 19: Linen Layout (\u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435)<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"\/ru\/post\/889526\/\">\u0420\u0435\u0448\u0435\u043d\u0438\u0435 Day 20: Race Condition (\u043a\u0440\u0430\u0442\u0447\u0430\u0439\u0448\u0438\u0439 \u043f\u0443\u0442\u044c &#171;\u0442\u0443\u0434\u0430 \u0438 \u043e\u0431\u0440\u0430\u0442\u043d\u043e&#187; \u0438 \u0435\u0433\u043e \u0441\u0430\u043c\u043e\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435)<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"\/ru\/post\/891522\/\">\u0420\u0435\u0448\u0435\u043d\u0438\u0435 Day 21: Keypad Conundrum (\u043c\u043e\u0434\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0442\u0438\u0432 \u043f\u043e\u0434\u0441\u0447\u0435\u0442\u0430)<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"\/ru\/post\/893672\/\">\u0420\u0435\u0448\u0435\u043d\u0438\u0435 Day 22: Monkey Market (\u043e\u043a\u043e\u043d\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438)<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"\/ru\/post\/895928\/\">\u0420\u0435\u0448\u0435\u043d\u0438\u0435 Day 23: LAN Party (\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u0441 \u043c\u0430\u0441\u0441\u0438\u0432\u0430\u043c\u0438)<\/a><\/p>\n<\/li>\n<\/ul>\n<hr\/>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/166\/4b7\/93b\/1664b793b98f35e98496ce87300ab9eb.jpg\" width=\"1216\" height=\"832\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/166\/4b7\/93b\/1664b793b98f35e98496ce87300ab9eb.jpg\" data-blurred=\"true\"\/><\/figure>\n<p><a href=\"https:\/\/adventofcode.com\/2024\/day\/23\">\u041e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0437\u0430\u0434\u0430\u0447\u0438<\/a>\u00a0\u0438 \u0435\u0435 \u043f\u0435\u0440\u0435\u0432\u043e\u0434:<\/p>\n<details class=\"spoiler\">\n<summary>Advent of Code 2024, Day 23: LAN Party<\/summary>\n<div class=\"spoiler__content\">\n<h3>&#8212; \u0414\u0435\u043d\u044c 23: LAN-\u0432\u0435\u0447\u0435\u0440\u0438\u043d\u043a\u0430 &#8212;<\/h3>\n<p>\u041f\u043e\u043a\u0430 \u0418\u0441\u0442\u043e\u0440\u0438\u043a\u0438 \u0431\u0440\u043e\u0434\u044f\u0442 \u043f\u043e \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0439 \u0437\u043e\u043d\u0435 \u0432 \u0448\u0442\u0430\u0431-\u043a\u0432\u0430\u0440\u0442\u0438\u0440\u0435 Easter Bunny, \u0432\u044b \u043d\u0430\u0442\u044b\u043a\u0430\u0435\u0442\u0435\u0441\u044c \u043d\u0430 \u043f\u043b\u0430\u043a\u0430\u0442\u044b \u043e \u0437\u0430\u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u043d\u0430 \u0441\u0435\u0433\u043e\u0434\u043d\u044f\u00a0<a href=\"https:\/\/en.wikipedia.org\/wiki\/LAN_party\">LAN-\u0432\u0435\u0447\u0435\u0440\u0438\u043d\u043a\u0435<\/a>! \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0432\u0430\u043c \u0443\u0434\u0430\u0441\u0442\u0441\u044f \u0435\u0435 \u043d\u0430\u0439\u0442\u0438; \u0432\u044b \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0435\u0441\u044c \u043a \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0435\u043c\u0443\u00a0<a href=\"https:\/\/adventofcode.com\/2016\/day\/9\">\u043f\u043e\u0440\u0442\u0443 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0434\u0430\u043d\u043d\u044b\u0445<\/a>\u00a0\u0438 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0435 \u043a\u0430\u0440\u0442\u0443 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u0438 (\u0432\u0430\u0448\u0438 \u0432\u0445\u043e\u0434\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u0433\u043e\u043b\u043e\u0432\u043e\u043b\u043e\u043c\u043a\u0438).<\/p>\n<p>\u041a\u0430\u0440\u0442\u0430 \u0441\u0435\u0442\u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u0441\u0435\u0445\u00a0<strong><em>\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439 \u043c\u0435\u0436\u0434\u0443 \u0434\u0432\u0443\u043c\u044f \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430\u043c\u0438<\/em><\/strong>. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<pre><code>kh-tc qp-kh de-cg ka-co yn-aq qp-ub cg-tb vc-aq tb-ka wh-tc yn-cg kh-ub ta-co de-co tc-td tb-wq wh-td ta-ka td-qp aq-cg wq-ub ub-vc de-ta wq-aq wq-vc wh-yn ka-de kh-ta co-tc wh-qp tb-vc td-yn<\/code><\/pre>\n<p>\u041a\u0430\u0436\u0434\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u0442\u0435\u043a\u0441\u0442\u0430 \u043d\u0430 \u043a\u0430\u0440\u0442\u0435 \u0441\u0435\u0442\u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u043e\u0434\u043d\u043e \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435; \u0441\u0442\u0440\u043e\u043a\u0430\u00a0<code>kh-tc<\/code> \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043e\u043c \u0441 \u0438\u043c\u0435\u043d\u0435\u043c\u00a0<code>kh<\/code> \u0438 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043e\u043c \u0441 \u0438\u043c\u0435\u043d\u0435\u043c\u00a0<code>tc<\/code>. \u0421\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u043d\u0435 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u043c\u0438;\u00a0<code>tc-kh<\/code> \u043e\u0437\u043d\u0430\u0447\u0430\u043b\u043e \u0431\u044b \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435.<\/p>\n<p>LAN-\u0432\u0435\u0447\u0435\u0440\u0438\u043d\u043a\u0438 \u043e\u0431\u044b\u0447\u043d\u043e \u0432\u043a\u043b\u044e\u0447\u0430\u044e\u0442 \u043c\u043d\u043e\u0433\u043e\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0435 \u0438\u0433\u0440\u044b, \u0442\u0430\u043a \u0447\u0442\u043e, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0432\u044b \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442\u044c \u0438\u0445, \u043d\u0430\u0439\u0434\u044f \u0433\u0440\u0443\u043f\u043f\u044b \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043e\u0432. \u041d\u0430\u0447\u043d\u0438\u0442\u0435 \u0441 \u043f\u043e\u0438\u0441\u043a\u0430\u00a0<strong><em>\u043d\u0430\u0431\u043e\u0440\u043e\u0432 \u0438\u0437 \u0442\u0440\u0435\u0445 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043e\u0432<\/em><\/strong>, \u0433\u0434\u0435 \u043a\u0430\u0436\u0434\u044b\u0439 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440 \u0432 \u043d\u0430\u0431\u043e\u0440\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d \u043a \u0434\u0432\u0443\u043c \u0434\u0440\u0443\u0433\u0438\u043c \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430\u043c.<\/p>\n<p>\u0412 \u044d\u0442\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0438\u043c\u0435\u044e\u0442\u0441\u044f\u00a0<code>12<\/code> \u0442\u0430\u043a\u0438\u0445 \u043d\u0430\u0431\u043e\u0440\u043e\u0432 \u0438\u0437 \u0442\u0440\u0435\u0445 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u043d\u044b\u0445 \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043e\u0432:<\/p>\n<pre><code>aq,cg,yn aq,vc,wq co,de,ka co,de,ta co,ka,ta de,ka,ta kh,qp,ub qp,td,wh tb,vc,wq tc,td,wh td,wh,yn ub,vc,wq<\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u0413\u043b\u0430\u0432\u043d\u044b\u0439 \u0418\u0441\u0442\u043e\u0440\u0438\u043a \u0437\u0434\u0435\u0441\u044c,\u00a0<strong><em>\u0438<\/em><\/strong>\u00a0\u043e\u043d \u043d\u0430 LAN-\u0432\u0435\u0447\u0435\u0440\u0438\u043d\u043a\u0435, \u043b\u0443\u0447\u0448\u0435 \u0432\u0441\u0435\u0433\u043e \u0443\u0437\u043d\u0430\u0442\u044c \u043e\u0431 \u044d\u0442\u043e\u043c \u0441\u0440\u0430\u0437\u0443. \u0412\u044b \u043f\u043e\u0447\u0442\u0438 \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0438\u043c\u044f \u0435\u0433\u043e \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441\u00a0<code>t<\/code>, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0439\u0442\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0431\u043e\u0440\u044b \u0438\u0437 \u0442\u0440\u0435\u0445 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043e\u0432, \u0433\u0434\u0435 \u0438\u043c\u044f \u0445\u043e\u0442\u044f \u0431\u044b \u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441\u00a0<code>t<\/code>. \u042d\u0442\u043e \u0441\u0443\u0436\u0430\u0435\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u0434\u043e\u00a0<code>7<\/code> \u043d\u0430\u0431\u043e\u0440\u043e\u0432 \u0438\u0437 \u0442\u0440\u0435\u0445 \u0432\u0437\u0430\u0438\u043c\u043e\u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043e\u0432:<\/p>\n<pre><code>co,de,ta co,ka,ta de,ka,ta qp,td,wh tb,vc,wq tc,td,wh td,wh,yn<\/code><\/pre>\n<p>\u041d\u0430\u0439\u0434\u0438\u0442\u0435 \u0432\u0441\u0435 \u043d\u0430\u0431\u043e\u0440\u044b \u0438\u0437 \u0442\u0440\u0435\u0445 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u043d\u044b\u0445 \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043e\u0432.\u00a0<strong><em>\u0421\u043a\u043e\u043b\u044c\u043a\u043e \u0438\u0437 \u043d\u0438\u0445 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u0445\u043e\u0442\u044f \u0431\u044b \u043e\u0434\u0438\u043d \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440 \u0441 \u0438\u043c\u0435\u043d\u0435\u043c, \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u043c\u0441\u044f \u0441<\/em><\/strong>\u00a0<code>t<\/code>?<\/p>\n<h3>&#8212; \u0427\u0430\u0441\u0442\u044c \u0432\u0442\u043e\u0440\u0430\u044f &#8212;<\/h3>\n<p>\u0412\u0441\u0435 \u0435\u0449\u0435 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u043d\u043e\u0433\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0438\u0445 \u0432\u0441\u0435. \u0412\u0430\u043c \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u043d\u0430\u0439\u0442\u0438 LAN-\u0432\u0435\u0447\u0435\u0440\u0438\u043d\u043a\u0443 \u0434\u0440\u0443\u0433\u0438\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \u0438 \u043f\u043e\u0439\u0442\u0438 \u0442\u0443\u0434\u0430 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e.<\/p>\n<p>\u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443, \u043f\u043e\u0445\u043e\u0436\u0435, \u0432\u043e\u043a\u0440\u0443\u0433 \u043d\u0435\u0442 \u043d\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0430, \u0432\u044b \u0440\u0435\u0448\u0430\u0435\u0442\u0435, \u0447\u0442\u043e \u0432\u0441\u0435 \u043e\u043d\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u043d\u0430 LAN-\u0432\u0435\u0447\u0435\u0440\u0438\u043d\u043a\u0435. \u0415\u0441\u043b\u0438 \u044d\u0442\u043e \u043f\u0440\u0430\u0432\u0434\u0430, \u0442\u043e LAN-\u0432\u0435\u0447\u0435\u0440\u0438\u043d\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0441\u043e\u0431\u043e\u0439\u00a0<strong><em>\u0441\u0430\u043c\u044b\u0439 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043d\u0430\u0431\u043e\u0440 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0441\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u044b \u0434\u0440\u0443\u0433 \u043a \u0434\u0440\u0443\u0433\u0443<\/em><\/strong>. \u0422\u043e \u0435\u0441\u0442\u044c, \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430 \u043d\u0430 LAN-\u0432\u0435\u0447\u0435\u0440\u0438\u043d\u043a\u0435 \u044d\u0442\u043e\u0442 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440 \u0431\u0443\u0434\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u0434\u0440\u0443\u0433\u043e\u043c\u0443 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0443 \u043d\u0430 LAN-\u0432\u0435\u0447\u0435\u0440\u0438\u043d\u043a\u0435.<\/p>\n<p>\u0412 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u043e\u043c \u0432\u044b\u0448\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0441\u0430\u043c\u044b\u0439 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043d\u0430\u0431\u043e\u0440 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0441\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u044b \u0434\u0440\u0443\u0433 \u043a \u0434\u0440\u0443\u0433\u0443, \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437\u00a0<code>co<\/code>,\u00a0<code>de<\/code>,\u00a0<code>ka<\/code>, \u0438\u00a0<code>ta<\/code>. \u041a\u0430\u0436\u0434\u044b\u0439 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440 \u0432 \u044d\u0442\u043e\u043c \u043d\u0430\u0431\u043e\u0440\u0435 \u0438\u043c\u0435\u0435\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u0434\u0440\u0443\u0433\u043e\u043c\u0443 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0443 \u0432 \u043d\u0430\u0431\u043e\u0440\u0435:<\/p>\n<pre><code>ka-co ta-co de-co ta-ka de-ta ka-de<\/code><\/pre>\n<p>\u041d\u0430 \u043f\u043b\u0430\u043a\u0430\u0442\u0430\u0445 LAN-\u0432\u0435\u0447\u0435\u0440\u0438\u043d\u043a\u0438 \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u0441\u044f, \u0447\u0442\u043e\u00a0<strong><em>\u043f\u0430\u0440\u043e\u043b\u044c<\/em><\/strong>\u00a0\u0434\u043b\u044f \u0432\u0445\u043e\u0434\u0430 \u043d\u0430 LAN-\u0432\u0435\u0447\u0435\u0440\u0438\u043d\u043a\u0443 &#8212; \u044d\u0442\u043e \u0438\u043c\u0435\u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430 \u043d\u0430 LAN-\u0432\u0435\u0447\u0435\u0440\u0438\u043d\u043a\u0435, \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0432 \u0430\u043b\u0444\u0430\u0432\u0438\u0442\u043d\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435, \u0430 \u0437\u0430\u0442\u0435\u043c \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u043d\u044b\u0435 \u0437\u0430\u043f\u044f\u0442\u044b\u043c\u0438. (\u041b\u044e\u0434\u0438, \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0443\u044e\u0449\u0438\u0435 LAN-\u0432\u0435\u0447\u0435\u0440\u0438\u043d\u043a\u0443, \u044f\u0432\u043d\u043e \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043a\u0443\u0447\u043a\u043e\u0439\u00a0<strong><em>\u0437\u0430\u043d\u0443\u0434<\/em><\/strong>.) \u0412 \u044d\u0442\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043f\u0430\u0440\u043e\u043b\u044c \u0431\u0443\u0434\u0435\u0442\u00a0<code>co,de,ka,ta<\/code>.<\/p>\n<p>\u041a\u0430\u043a\u043e\u0439 \u043f\u0430\u0440\u043e\u043b\u044c \u0434\u043b\u044f \u0432\u0445\u043e\u0434\u0430 \u043d\u0430 LAN-\u0432\u0435\u0447\u0435\u0440\u0438\u043d\u043a\u0443?<\/p>\n<\/div>\n<\/details>\n<h2>\u0427\u0430\u0441\u0442\u044c 1<\/h2>\n<p>\u041a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u043e, \u043d\u0430\u0447\u043d\u0435\u043c \u0441 \u0440\u0430\u0437\u0431\u043e\u0440\u0430 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u043d\u0430\u0431\u043e\u0440 \u043f\u0430\u0440 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043e\u0432:<\/p>\n<pre><code class=\"sql\">WITH src AS (   SELECT     regexp_matches(       $$ kh-tc qp-kh de-cg ka-co yn-aq qp-ub cg-tb vc-aq tb-ka wh-tc yn-cg kh-ub ta-co de-co tc-td tb-wq wh-td ta-ka td-qp aq-cg wq-ub ub-vc de-ta wq-aq wq-vc wh-yn ka-de kh-ta co-tc wh-qp tb-vc td-yn $$     , '([a-z]{2})-([a-z]{2})'     , 'g'     ) pair )<\/code><\/pre>\n<pre><code>  pair  text[] {kh,tc} {qp,kh} {de,cg} {ka,co} {yn,aq} {qp,ub} ...<\/code><\/pre>\n<p>\u0427\u0442\u043e\u0431\u044b \u043d\u0430\u0439\u0442\u0438 3 \u0432\u0437\u0430\u0438\u043c\u043d\u043e \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u0434\u0432\u0443\u043c\u044f \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f\u043c\u0438, \u0437\u0430\u043f\u0440\u0435\u0442\u0438\u0432 \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0441 &#171;\u043c\u0435\u043d\u044c\u0448\u0435\u0439&#187; \u043f\u0430\u0440\u043e\u0439:<\/p>\n<pre><code class=\"sql\">SELECT   * FROM   src p1 JOIN   src p2     ON p2.pair &gt; p1.pair AND     p2.pair &amp;&amp; p1.pair              -- \u043f\u0430\u0440\u044b \u0438\u043c\u0435\u044e\u0442 \u043e\u0431\u0449\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b JOIN   src p3     ON p3.pair &gt; p2.pair AND     p3.pair &lt;@ (p1.pair || p2.pair) -- \u043e\u0431\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0442\u0440\u0435\u0442\u044c\u0435\u0439 \u043f\u0430\u0440\u044b \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0432 \u043f\u0435\u0440\u0432\u044b\u0445 \u0434\u0432\u0443\u0445<\/code><\/pre>\n<pre><code>{ka,co} | {ta,co} | {ta,ka} {vc,aq} | {wq,aq} | {wq,vc} {kh,ub} | {qp,kh} | {qp,ub} {de,co} | {ka,co} | {ka,de} {de,co} | {de,ta} | {ta,co} {tc,td} | {wh,tc} | {wh,td} {td,qp} | {wh,qp} | {wh,td} {aq,cg} | {yn,aq} | {yn,cg} {ub,vc} | {wq,ub} | {wq,vc} {de,ta} | {ka,de} | {ta,ka} {tb,vc} | {tb,wq} | {wq,vc} {td,yn} | {wh,td} | {wh,yn}<\/code><\/pre>\n<p>\u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u044f &#171;\u043a\u0430\u043a\u043e\u0435-\u0442\u043e \u0438\u0437 \u0438\u043c\u0435\u043d \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u043d\u0430 <code>t<\/code>&#187; \u0438 \u043f\u0440\u043e\u0441\u0443\u043c\u043c\u0438\u0440\u0443\u0435\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0437\u0430\u043f\u0438\u0441\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0435\u043c\u0443 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c:<\/p>\n<pre><code class=\"sql\">SELECT   sum(cond::integer)                -- \u043f\u043e\u0434\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u044e\u0449\u0438\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u044e FROM   src p1 JOIN   src p2     ON p2.pair &gt; p1.pair AND     p2.pair &amp;&amp; p1.pair              -- \u043f\u0430\u0440\u044b \u0438\u043c\u0435\u044e\u0442 \u043e\u0431\u0449\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b JOIN   src p3     ON p3.pair &gt; p2.pair AND     p3.pair &lt;@ (p1.pair || p2.pair) -- \u043e\u0431\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0442\u0440\u0435\u0442\u044c\u0435\u0439 \u043f\u0430\u0440\u044b \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0432 \u043f\u0435\u0440\u0432\u044b\u0445 \u0434\u0432\u0443\u0445 , LATERAL (     SELECT       bool_or(name ^@ 't') cond     -- \u043a\u0430\u043a\u043e\u0435-\u0442\u043e \u0438\u0437 \u0438\u043c\u0435\u043d \u0441\u0440\u0435\u0434\u0438 \u0432\u0441\u0435\u0445 \u043f\u0430\u0440 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u043d\u0430 t     FROM       unnest(p1.pair || p2.pair || p3.pair) name   ) T;<\/code><\/pre>\n<p>\u0421\u043e\u0435\u0434\u0438\u043d\u0438\u043c \u0432 \u0438\u0442\u043e\u0433\u043e\u0432\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441:<\/p>\n<pre><code class=\"sql\">WITH src AS (   SELECT     regexp_matches(       $$ kh-tc qp-kh de-cg ka-co yn-aq qp-ub cg-tb vc-aq tb-ka wh-tc yn-cg kh-ub ta-co de-co tc-td tb-wq wh-td ta-ka td-qp aq-cg wq-ub ub-vc de-ta wq-aq wq-vc wh-yn ka-de kh-ta co-tc wh-qp tb-vc td-yn $$     , '([a-z]{2})-([a-z]{2})'     , 'g'     ) pair ) SELECT   sum(cond::integer)                -- \u043f\u043e\u0434\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u044e\u0449\u0438\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u044e FROM   src p1 JOIN   src p2     ON p2.pair &gt; p1.pair AND     p2.pair &amp;&amp; p1.pair              -- \u043f\u0430\u0440\u044b \u0438\u043c\u0435\u044e\u0442 \u043e\u0431\u0449\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b JOIN   src p3     ON p3.pair &gt; p2.pair AND     p3.pair &lt;@ (p1.pair || p2.pair) -- \u043e\u0431\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0442\u0440\u0435\u0442\u044c\u0435\u0439 \u043f\u0430\u0440\u044b \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0432 \u043f\u0435\u0440\u0432\u044b\u0445 \u0434\u0432\u0443\u0445 , LATERAL (     SELECT       bool_or(name ^@ 't') cond     -- \u043a\u0430\u043a\u043e\u0435-\u0442\u043e \u0438\u0437 \u0438\u043c\u0435\u043d \u0441\u0440\u0435\u0434\u0438 \u0432\u0441\u0435\u0445 \u043f\u0430\u0440 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u043d\u0430 t     FROM       unnest(p1.pair || p2.pair || p3.pair) name   ) T;<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043c\u044b \u043d\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u043b\u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u0439 \u0438 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0439 (\u0442\u0438\u043f\u0430 \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0430\u0440 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0445 \u0438\u043c\u0435\u043d\u0430 &#171;\u043d\u0430 <code>t<\/code>&#171;), \u0440\u0435\u0448\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0443 &#171;\u0432 \u043b\u043e\u0431&#187; \u0441\u0430\u043c\u044b\u043c \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u0438 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c, \u0442\u043e \u043f\u043e\u043b\u043d\u044b\u0439 &#171;\u043a\u0443\u0431\u0438\u0447\u0435\u0441\u043a\u0438\u0439&#187; \u043f\u0435\u0440\u0435\u0431\u043e\u0440 (\u0434\u0432\u0430 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f) <code>3080<\/code> \u043f\u0430\u0440 \u0438 \u043e\u0442\u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u043a\u043e\u0439 \u043f\u043e\u0447\u0442\u0438 <code>150M<\/code> \u043d\u0435\u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u043f\u043e\u0434 \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u0435\u0439 <a href=\"https:\/\/explain.tensor.ru\/archive\/explain\/d5e1c56c2705448112001302ca54ea9f:0:2025-03-31\">\u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 72 \u0441\u0435\u043a\u0443\u043d\u0434\u044b<\/a>:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/a89\/ae6\/4a9\/a89ae64a9de7670a36f1c0b36e79d5d5.png\" width=\"1888\" height=\"817\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a89\/ae6\/4a9\/a89ae64a9de7670a36f1c0b36e79d5d5.png\"\/><\/figure>\n<h2>\u0427\u0430\u0441\u0442\u044c 2<\/h2>\n<p>\u0412\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043d\u0430\u0441 \u043f\u0440\u043e\u0441\u044f\u0442 \u043d\u0430\u0439\u0442\u0438 \u0441\u0430\u043c\u044b\u0439 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0441\u0435\u0433\u043c\u0435\u043d\u0442, \u0433\u0434\u0435 \u043a\u0430\u0436\u0434\u044b\u0439 \u0441\u0432\u044f\u0437\u0430\u043d \u0441 \u043a\u0430\u0436\u0434\u044b\u043c.<\/p>\n<p>\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043e\u0431\u0435\u0440\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435, \u0441 \u043a\u0435\u043c \u0432\u043e\u043e\u0431\u0449\u0435 \u0441\u0432\u044f\u0437\u0430\u043d \u043a\u0430\u0436\u0434\u044b\u0439 &#171;\u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e&#187; (\u0442\u043e \u0435\u0441\u0442\u044c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0432\u044b\u043c \u0432 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0439 \u0438\u043b\u0438 &#171;\u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0439&#187; \u043f\u0430\u0440\u0435):<\/p>\n<pre><code class=\"sql\">, paired AS (   SELECT     pair[1] src                     -- \u043a\u0442\u043e \u0441\u0432\u044f\u0437\u0430\u043d   , array_agg(DISTINCT pair[2]) dst -- \u0441 \u043a\u0435\u043c \u0441\u0432\u044f\u0437\u0430\u043d (\u0443\u043d\u0438\u043a\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440)   FROM     (       TABLE src                 -- \u0432\u0441\u0435 \u043f\u0430\u0440\u044b \u0432 \u043f\u0440\u044f\u043c\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435     UNION ALL       SELECT         ARRAY[pair[2], pair[1]] -- \u0432\u0441\u0435 \u043f\u0430\u0440\u044b \u0432 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435       FROM         src     )   GROUP BY     1 )<\/code><\/pre>\n<pre><code>src  | dst text | text[] aq   | {cg,vc,wq,yn} cg   | {aq,de,tb,yn} co   | {de,ka,ta,tc} de   | {cg,co,ka,ta} ka   | {co,de,ta,tb} kh   | {qp,ta,tc,ub} qp   | {kh,td,ub,wh} ta   | {co,de,ka,kh} tb   | {cg,ka,vc,wq} tc   | {co,kh,td,wh} td   | {qp,tc,wh,yn} ub   | {kh,qp,vc,wq} vc   | {aq,tb,ub,wq} wh   | {qp,tc,td,yn} wq   | {aq,tb,ub,vc} yn   | {aq,cg,td,wh}<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e \u043d\u0430\u0447\u043d\u0435\u043c \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u043a\u0430\u0436\u0434\u044b\u0439 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 <code>party<\/code>-\u0433\u0440\u0443\u043f\u043f\u044b \u043f\u043e\u043b\u044c\u0437\u0443\u044f\u0441\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043b\u043e\u0433\u0438\u043a\u043e\u0439:<\/p>\n<ul>\n<li>\n<p>\u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0439 \u043a \u0433\u0440\u0443\u043f\u043f\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437 \u0443\u0436\u0435 \u0438\u043c\u0435\u044e\u0449\u0438\u0445\u0441\u044f (\u043d\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e, \u0440\u0430\u0437 \u043e\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u044b), \u0447\u0442\u043e\u0431\u044b \u043c\u044b \u043d\u0435 \u043f\u0435\u0440\u0435\u0431\u0438\u0440\u0430\u043b\u0438 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0435 \u043f\u043e \u0441\u043e\u0441\u0442\u0430\u0432\u0443 \u0433\u0440\u0443\u043f\u043f\u044b \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e<\/p>\n<\/li>\n<li>\n<p>\u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0441\u0432\u044f\u0437\u0430\u043d \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u0438\u043c\u0435\u044e\u0449\u0438\u043c\u0438\u0441\u044f<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"sql\">, r AS (   SELECT     ARRAY[src] party -- \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u0441\u043e \u0432\u0441\u0435\u0445 \u043e\u0434\u0438\u043d\u0430\u0440\u043d\u044b\u0445 \u0433\u0440\u0443\u043f\u043f   FROM     paired UNION ALL   SELECT     party || src   FROM     r   JOIN     paired       ON src &gt; party[array_length(party, 1)] AND -- \u043d\u043e\u0432\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e       party &lt;@ dst                               -- \u0432\u0441\u0435 \u0443\u0436\u0435 \u0441\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0441\u0440\u0435\u0434\u0438 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u043d\u044b\u0445 \u0441 \u043d\u043e\u0432\u044b\u043c )<\/code><\/pre>\n<pre><code>party {aq} {cg} {co} {de} {ka} {kh} {qp} {ta} {tb} {tc} {td} {ub} {vc} {wh} {wq} {yn} {aq,cg} {cg,de} {co,de} {co,ka} {de,ka} {kh,qp} {co,ta} {de,ta} {ka,ta} {kh,ta} {cg,tb} {ka,tb} {co,tc} {kh,tc} {qp,td} {tc,td} {kh,ub} {qp,ub} {aq,vc} {tb,vc} {ub,vc} {qp,wh} {tc,wh} {td,wh} {aq,wq} {tb,wq} {ub,wq} {vc,wq} {aq,yn} {cg,yn} {td,yn} {wh,yn} {co,de,ka} {co,de,ta} {co,ka,ta} {de,ka,ta} {kh,qp,ub} {qp,td,wh} {tc,td,wh} {aq,vc,wq} {tb,vc,wq} {ub,vc,wq} {aq,cg,yn} {td,wh,yn} {co,de,ka,ta}<\/code><\/pre>\n<p>\u041e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u043b\u0438\u0448\u044c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0430\u043c\u0443\u044e \u043f\u0435\u0440\u0432\u0443\u044e \u0438\u0437 \u0441\u0430\u043c\u044b\u0445 \u0434\u043b\u0438\u043d\u043d\u044b\u0445 \u0433\u0440\u0443\u043f\u043f \u0432 \u0441\u0442\u0440\u043e\u043a\u0443:<\/p>\n<pre><code class=\"sql\">SELECT   array_to_string(party, ',') FROM   r ORDER BY   array_length(party, 1) DESC -- \u0431\u0435\u0440\u0435\u043c \u0441\u0430\u043c\u0443\u044e \u0434\u043b\u0438\u043d\u043d\u0443\u044e \u0433\u0440\u0443\u043f\u043f\u0443 , party                       -- \u0441\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c \u043f\u043e \u0430\u043b\u0444\u0430\u0432\u0438\u0442\u0443, \u0435\u0441\u043b\u0438 \u0438\u0445 \u0432\u0434\u0440\u0443\u0433 \u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e LIMIT 1;<\/code><\/pre>\n<p>\u0421\u043e\u0431\u0435\u0440\u0435\u043c \u0432\u0441\u0435 \u0432\u043c\u0435\u0441\u0442\u0435:<\/p>\n<pre><code class=\"sql\">WITH RECURSIVE src AS (   SELECT     regexp_matches(       $$ kh-tc qp-kh de-cg ka-co yn-aq qp-ub cg-tb vc-aq tb-ka wh-tc yn-cg kh-ub ta-co de-co tc-td tb-wq wh-td ta-ka td-qp aq-cg wq-ub ub-vc de-ta wq-aq wq-vc wh-yn ka-de kh-ta co-tc wh-qp tb-vc td-yn $$     , '([a-z]{2})-([a-z]{2})'     , 'g'     ) pair ) , paired AS (   SELECT     pair[1] src                     -- \u043a\u0442\u043e \u0441\u0432\u044f\u0437\u0430\u043d   , array_agg(DISTINCT pair[2]) dst -- \u0441 \u043a\u0435\u043c \u0441\u0432\u044f\u0437\u0430\u043d (\u0443\u043d\u0438\u043a\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440)   FROM     (       TABLE src                 -- \u0432\u0441\u0435 \u043f\u0430\u0440\u044b \u0432 \u043f\u0440\u044f\u043c\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435     UNION ALL       SELECT         ARRAY[pair[2], pair[1]] -- \u0432\u0441\u0435 \u043f\u0430\u0440\u044b \u0432 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435       FROM         src     )   GROUP BY     1 ) , r AS (   SELECT     ARRAY[src] party -- \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u0441\u043e \u0432\u0441\u0435\u0445 \u043e\u0434\u0438\u043d\u0430\u0440\u043d\u044b\u0445 \u0433\u0440\u0443\u043f\u043f   FROM     paired UNION ALL   SELECT     party || src   FROM     r   JOIN     paired       ON src &gt; party[array_length(party, 1)] AND -- \u043d\u043e\u0432\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e       party &lt;@ dst                               -- \u0432\u0441\u0435 \u0443\u0436\u0435 \u0441\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0441\u0440\u0435\u0434\u0438 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u043d\u044b\u0445 \u0441 \u043d\u043e\u0432\u044b\u043c ) SELECT   array_to_string(party, ',') -- \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043f\u043e \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044e \u043c\u0430\u0441\u0441\u0438\u0432 \u0432 \u0441\u0442\u0440\u043e\u043a\u0443 FROM   r ORDER BY   array_length(party, 1) DESC -- \u0431\u0435\u0440\u0435\u043c \u0441\u0430\u043c\u0443\u044e \u0434\u043b\u0438\u043d\u043d\u0443\u044e \u0433\u0440\u0443\u043f\u043f\u0443 , party                       -- \u0441\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c \u043f\u043e \u0430\u043b\u0444\u0430\u0432\u0438\u0442\u0443, \u0435\u0441\u043b\u0438 \u0438\u0445 \u0432\u0434\u0440\u0443\u0433 \u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e LIMIT 1;<\/code><\/pre>\n<p>\u0420\u0435\u0448\u0430\u044f \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u0443\u044e \u0437\u0430\u0434\u0430\u0447\u0443 (\u0438\u0449\u0430 \u0433\u0440\u0443\u043f\u043f\u044b \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0437 3, \u043d\u043e \u0438\u0437 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043e\u0432), \u043c\u044b \u0432\u044b\u0448\u043b\u0438 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0430 \u0442\u043e \u0436\u0435 \u0432\u0440\u0435\u043c\u044f &#8212; <a href=\"https:\/\/explain.tensor.ru\/archive\/explain\/f32187f7e2539d4eab79080d0eaeb006:0:2025-03-31\">76 \u0441\u0435\u043a\u0443\u043d\u0434<\/a>:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/13a\/3ee\/0f1\/13a3ee0f16a6abb2c76ead9e5ca65e53.png\" width=\"1858\" height=\"1207\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/13a\/3ee\/0f1\/13a3ee0f16a6abb2c76ead9e5ca65e53.png\"\/><\/figure>\n<h2>\u0427\u0430\u0441\u0442\u044c 1 (\u0441\u043d\u043e\u0432\u0430)<\/h2>\n<p>\u0420\u0430\u0437 \u0441\u043b\u043e\u0436\u043d\u0443\u044e \u0437\u0430\u0434\u0430\u0447\u0443 \u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0448\u0438\u0442\u044c \u0437\u0430 \u0442\u043e \u0436\u0435 \u0432\u0440\u0435\u043c\u044f, \u0442\u043e \u043f\u0440\u043e\u0441\u0442\u0443\u044e \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043c\u043e\u0436\u043d\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u0435\u0435!<\/p>\n<p>\u0414\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c\u044b\u0445 \u043d\u0430\u0431\u043e\u0440\u043e\u0432 &#171;\u043a\u0430\u0436\u0434\u044b\u0439 \u0441 \u043a\u0430\u0436\u0434\u044b\u043c&#187; 3 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c\u0438 &#8212; \u044d\u0442\u043e \u0438 \u0431\u0443\u0434\u0443\u0442 \u043d\u0430\u0448\u0438 \u0438\u0441\u043a\u043e\u043c\u044b\u0435 &#171;\u0442\u0440\u0438\u043f\u043b\u0435\u0442\u044b&#187;:<\/p>\n<pre><code class=\"sql\">-- ... , r AS (   -- ...   WHERE     array_length(party, 1) &lt; 3 -- \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u0435\u043c \u0434\u043b\u0438\u043d\u0443 \u043d\u0430\u0431\u043e\u0440\u0430 3 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c\u0438 ) SELECT   sum(cond::integer) FROM   r , LATERAL (     SELECT       bool_or(unnest ^@ 't') cond     FROM       unnest(party)   ) T WHERE   array_length(party, 1) = 3; -- \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0431\u043e\u0440\u044b \u0434\u043b\u0438\u043d\u044b 3<\/code><\/pre>\n<p>\u0412 \u0442\u0430\u043a\u043e\u043c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f <strong>\u0432 50 \u0440\u0430\u0437 \u0431\u044b\u0441\u0442\u0440\u0435\u0435<\/strong> \u0438 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u044c <a href=\"https:\/\/explain.tensor.ru\/archive\/explain\/e9b90e91302cdb1fa4800b0fe4ea1a4e:0:2025-03-31\">\u0447\u0443\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 1.5 \u0441\u0435\u043a\u0443\u043d\u0434<\/a>:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/a93\/d1d\/21f\/a93d1d21f8c878b0fd7d7649842044c2.png\" width=\"1858\" height=\"1353\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a93\/d1d\/21f\/a93d1d21f8c878b0fd7d7649842044c2.png\"\/><\/figure>\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\/895928\/\"> https:\/\/habr.com\/ru\/articles\/895928\/<\/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>\u0412 \u044d\u0442\u043e\u0439\u00a0<a href=\"\/ru\/post\/868964\/\">\u0447\u0435\u043b\u043b\u0435\u043d\u0434\u0436-\u0441\u0435\u0440\u0438\u0438 \u0441\u0442\u0430\u0442\u0435\u0439<\/a>\u00a0\u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c PostgreSQL \u043a\u0430\u043a \u0441\u0440\u0435\u0434\u0443 \u0434\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0437\u0430\u0434\u0430\u0447\u00a0<a href=\"https:\/\/adventofcode.com\/2024\">Advent of Code 2024<\/a>.<\/p>\n<p>\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, SQL \u043d\u0435 \u0441\u0430\u043c\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u044f\u0437\u044b\u043a, \u0437\u0430\u0442\u043e \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0435\u0433\u043e \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438, \u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0432\u044b \u043c\u043e\u0433\u043b\u0438 \u0438 \u043d\u0435 \u043f\u043e\u0434\u043e\u0437\u0440\u0435\u0432\u0430\u0442\u044c.<\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043d\u0430\u0434 \u043c\u0430\u0441\u0441\u0438\u0432\u0430\u043c\u0438, \u0447\u0442\u043e\u0431\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0441\u0432\u044f\u0437\u043d\u043e\u0441\u0442\u044c \u0433\u0440\u0430\u0444\u043e\u0432.<\/p>\n<ul>\n<li>\n<p><a href=\"\/ru\/post\/868964\/\">\u0420\u0435\u0448\u0435\u043d\u0438\u0435 Day 1: Historian Hysteria (\u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0438 \u0443\u0441\u043b\u043e\u0432\u043d\u0430\u044f \u0430\u0433\u0440\u0435\u0433\u0430\u0446\u0438\u044f)<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"\/ru\/post\/868982\/\">\u0420\u0435\u0448\u0435\u043d\u0438\u0435 Day 2: Red-Nosed Reports (\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0430\u0433\u0440\u0435\u0433\u0430\u0442\u044b)<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"\/ru\/post\/869004\/\">\u0420\u0435\u0448\u0435\u043d\u0438\u0435 Day 3: Mull It Over (&#171;\u0447\u0438\u0441\u0442\u044b\u0435&#187; \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043a\u0438)<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"\/ru\/post\/869026\/\">\u0420\u0435\u0448\u0435\u043d\u0438\u0435 Day 4: Ceres Search (\u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u043c\u0430\u0441\u0441\u0438\u0432\u0430\u043c\u0438)<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"\/ru\/post\/869654\/\">\u0420\u0435\u0448\u0435\u043d\u0438\u0435 Day 5: Print Queue (\u043f\u043e\u0438\u0441\u043a \u0432 \u0441\u043b\u043e\u0432\u0430\u0440\u0435 \u0438 \u043c\u0430\u0441\u0441\u0438\u0432\u0430\u0445, \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430 &#171;\u043f\u0443\u0437\u044b\u0440\u044c\u043a\u043e\u043c&#187;)<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"\/ru\/post\/869982\/\">\u0420\u0435\u0448\u0435\u043d\u0438\u0435 Day 6: Guard Gallivant (\u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u0435 \u0446\u0438\u043a\u043b\u044b \u0438 \u0438\u0445 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c)<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"\/ru\/post\/872368\/\">\u0420\u0435\u0448\u0435\u043d\u0438\u0435 Day 7: Bridge Repair (&#171;\u044d\u043a\u0441\u043f\u043e\u043d\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u0430\u044f&#187; \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u044f)<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"\/ru\/post\/873170\/\">\u0420\u0435\u0448\u0435\u043d\u0438\u0435 Day 8: Resonant Collinearity (\u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u0438 \u043f\u043e\u0434\u0441\u0447\u0435\u0442 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u0439)<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"\/ru\/post\/873702\/\">\u0420\u0435\u0448\u0435\u043d\u0438\u0435 Day 9: Disk Fragmenter (\u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u044e)<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"\/ru\/post\/874290\/\">\u0420\u0435\u0448\u0435\u043d\u0438\u0435 Day 10: Hoof It (\u043f\u043e\u0438\u0441\u043a &#171;\u0432 \u0448\u0438\u0440\u0438\u043d\u0443&#187; \u0432\u043d\u0443\u0442\u0440\u0438 \u0446\u0438\u043a\u043b\u0430)<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"\/ru\/post\/865894\/\">\u0420\u0435\u0448\u0435\u043d\u0438\u0435 Day 11: Plutonian Pebbles (\u0430\u0433\u0440\u0435\u0433\u0430\u0446\u0438\u044f \u0432\u043d\u0443\u0442\u0440\u0438 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0438)<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"\/ru\/post\/875512\/\">\u0420\u0435\u0448\u0435\u043d\u0438\u0435 Day 12: Garden Groups (\u0432\u043e\u043b\u043d\u043e\u0432\u043e\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0438 \u043f\u043e\u0434\u0441\u0447\u0435\u0442 \u0433\u0440\u0430\u043d\u0438\u0446)<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"\/ru\/post\/876852\/\">\u0420\u0435\u0448\u0435\u043d\u0438\u0435 Day 13: Claw Contraption (\u043f\u043e\u0448\u0430\u0433\u043e\u0432\u043e \u0440\u0435\u0448\u0430\u0435\u043c \u0421\u041b\u0423)<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"\/ru\/post\/878210\/\">\u0420\u0435\u0448\u0435\u043d\u0438\u0435 Day 14: Restroom Redoubt (\u043d\u0430\u0445\u043e\u0434\u0438\u043c &#171;\u0435\u043b\u043e\u0447\u043a\u0443&#187; \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0446\u0435\u043d\u0442\u0440\u0430 \u043c\u0430\u0441\u0441)<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"\/ru\/post\/879548\/\">\u0420\u0435\u0448\u0435\u043d\u0438\u0435 Day 15: Warehouse Woes (\u0438\u0433\u0440\u0430\u0435\u043c \u0432 \u0441\u043e\u043a\u043e\u0431\u0430\u043d \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e json-\u043a\u0430\u0440\u0442\u044b \u0438 \u0442\u0438\u043f\u0430 point)<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"\/ru\/post\/882034\/\">\u0420\u0435\u0448\u0435\u043d\u0438\u0435 Day 16: Reindeer Maze (\u0443\u043a\u0440\u043e\u0449\u0430\u0435\u043c \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u044e \u0432 \u043b\u0430\u0431\u0438\u0440\u0438\u043d\u0442\u0435)<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"\/ru\/post\/884522\/\">\u0420\u0435\u0448\u0435\u043d\u0438\u0435 Day 17: Chronospatial Computer (\u043f\u043e\u0434\u0431\u0438\u0440\u0430\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u0435\u043c)<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"\/ru\/post\/885882\/\">\u0420\u0435\u0448\u0435\u043d\u0438\u0435 Day 18: RAM Run (\u043f\u043e\u0438\u0441\u043a \u043f\u0443\u0442\u0438 \u0438 \u0434\u0438\u0445\u043e\u0442\u043e\u043c\u0438\u044f)<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"\/ru\/post\/887300\/\">\u0420\u0435\u0448\u0435\u043d\u0438\u0435 Day 19: Linen Layout (\u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435)<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"\/ru\/post\/889526\/\">\u0420\u0435\u0448\u0435\u043d\u0438\u0435 Day 20: Race Condition (\u043a\u0440\u0430\u0442\u0447\u0430\u0439\u0448\u0438\u0439 \u043f\u0443\u0442\u044c &#171;\u0442\u0443\u0434\u0430 \u0438 \u043e\u0431\u0440\u0430\u0442\u043d\u043e&#187; \u0438 \u0435\u0433\u043e \u0441\u0430\u043c\u043e\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435)<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"\/ru\/post\/891522\/\">\u0420\u0435\u0448\u0435\u043d\u0438\u0435 Day 21: Keypad Conundrum (\u043c\u043e\u0434\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0442\u0438\u0432 \u043f\u043e\u0434\u0441\u0447\u0435\u0442\u0430)<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"\/ru\/post\/893672\/\">\u0420\u0435\u0448\u0435\u043d\u0438\u0435 Day 22: Monkey Market (\u043e\u043a\u043e\u043d\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438)<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"\/ru\/post\/895928\/\">\u0420\u0435\u0448\u0435\u043d\u0438\u0435 Day 23: LAN Party (\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u0441 \u043c\u0430\u0441\u0441\u0438\u0432\u0430\u043c\u0438)<\/a><\/p>\n<\/li>\n<\/ul>\n<hr\/>\n<figure class=\"full-width\"><\/figure>\n<p><a href=\"https:\/\/adventofcode.com\/2024\/day\/23\">\u041e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0437\u0430\u0434\u0430\u0447\u0438<\/a>\u00a0\u0438 \u0435\u0435 \u043f\u0435\u0440\u0435\u0432\u043e\u0434:<\/p>\n<details class=\"spoiler\">\n<summary>Advent of Code 2024, Day 23: LAN Party<\/summary>\n<div class=\"spoiler__content\">\n<h3>&#8212; \u0414\u0435\u043d\u044c 23: LAN-\u0432\u0435\u0447\u0435\u0440\u0438\u043d\u043a\u0430 &#8212;<\/h3>\n<p>\u041f\u043e\u043a\u0430 \u0418\u0441\u0442\u043e\u0440\u0438\u043a\u0438 \u0431\u0440\u043e\u0434\u044f\u0442 \u043f\u043e \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0439 \u0437\u043e\u043d\u0435 \u0432 \u0448\u0442\u0430\u0431-\u043a\u0432\u0430\u0440\u0442\u0438\u0440\u0435 Easter Bunny, \u0432\u044b \u043d\u0430\u0442\u044b\u043a\u0430\u0435\u0442\u0435\u0441\u044c \u043d\u0430 \u043f\u043b\u0430\u043a\u0430\u0442\u044b \u043e \u0437\u0430\u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u043d\u0430 \u0441\u0435\u0433\u043e\u0434\u043d\u044f\u00a0<a href=\"https:\/\/en.wikipedia.org\/wiki\/LAN_party\">LAN-\u0432\u0435\u0447\u0435\u0440\u0438\u043d\u043a\u0435<\/a>! \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0432\u0430\u043c \u0443\u0434\u0430\u0441\u0442\u0441\u044f \u0435\u0435 \u043d\u0430\u0439\u0442\u0438; \u0432\u044b \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0435\u0441\u044c \u043a \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0435\u043c\u0443\u00a0<a href=\"https:\/\/adventofcode.com\/2016\/day\/9\">\u043f\u043e\u0440\u0442\u0443 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0434\u0430\u043d\u043d\u044b\u0445<\/a>\u00a0\u0438 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0435 \u043a\u0430\u0440\u0442\u0443 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u0438 (\u0432\u0430\u0448\u0438 \u0432\u0445\u043e\u0434\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u0433\u043e\u043b\u043e\u0432\u043e\u043b\u043e\u043c\u043a\u0438).<\/p>\n<p>\u041a\u0430\u0440\u0442\u0430 \u0441\u0435\u0442\u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u0441\u0435\u0445\u00a0<strong><em>\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439 \u043c\u0435\u0436\u0434\u0443 \u0434\u0432\u0443\u043c\u044f \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430\u043c\u0438<\/em><\/strong>. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<pre><code>kh-tc qp-kh de-cg ka-co yn-aq qp-ub cg-tb vc-aq tb-ka wh-tc yn-cg kh-ub ta-co de-co tc-td tb-wq wh-td ta-ka td-qp aq-cg wq-ub ub-vc de-ta wq-aq wq-vc wh-yn ka-de kh-ta co-tc wh-qp tb-vc td-yn<\/code><\/pre>\n<p>\u041a\u0430\u0436\u0434\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u0442\u0435\u043a\u0441\u0442\u0430 \u043d\u0430 \u043a\u0430\u0440\u0442\u0435 \u0441\u0435\u0442\u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u043e\u0434\u043d\u043e \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435; \u0441\u0442\u0440\u043e\u043a\u0430\u00a0<code>kh-tc<\/code> \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043e\u043c \u0441 \u0438\u043c\u0435\u043d\u0435\u043c\u00a0<code>kh<\/code> \u0438 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043e\u043c \u0441 \u0438\u043c\u0435\u043d\u0435\u043c\u00a0<code>tc<\/code>. \u0421\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u043d\u0435 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u043c\u0438;\u00a0<code>tc-kh<\/code> \u043e\u0437\u043d\u0430\u0447\u0430\u043b\u043e \u0431\u044b \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435.<\/p>\n<p>LAN-\u0432\u0435\u0447\u0435\u0440\u0438\u043d\u043a\u0438 \u043e\u0431\u044b\u0447\u043d\u043e \u0432\u043a\u043b\u044e\u0447\u0430\u044e\u0442 \u043c\u043d\u043e\u0433\u043e\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0435 \u0438\u0433\u0440\u044b, \u0442\u0430\u043a \u0447\u0442\u043e, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0432\u044b \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442\u044c \u0438\u0445, \u043d\u0430\u0439\u0434\u044f \u0433\u0440\u0443\u043f\u043f\u044b \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043e\u0432. \u041d\u0430\u0447\u043d\u0438\u0442\u0435 \u0441 \u043f\u043e\u0438\u0441\u043a\u0430\u00a0<strong><em>\u043d\u0430\u0431\u043e\u0440\u043e\u0432 \u0438\u0437 \u0442\u0440\u0435\u0445 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043e\u0432<\/em><\/strong>, \u0433\u0434\u0435 \u043a\u0430\u0436\u0434\u044b\u0439 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440 \u0432 \u043d\u0430\u0431\u043e\u0440\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d \u043a \u0434\u0432\u0443\u043c \u0434\u0440\u0443\u0433\u0438\u043c \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430\u043c.<\/p>\n<p>\u0412 \u044d\u0442\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0438\u043c\u0435\u044e\u0442\u0441\u044f\u00a0<code>12<\/code> \u0442\u0430\u043a\u0438\u0445 \u043d\u0430\u0431\u043e\u0440\u043e\u0432 \u0438\u0437 \u0442\u0440\u0435\u0445 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u043d\u044b\u0445 \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043e\u0432:<\/p>\n<pre><code>aq,cg,yn aq,vc,wq co,de,ka co,de,ta co,ka,ta de,ka,ta kh,qp,ub qp,td,wh tb,vc,wq tc,td,wh td,wh,yn ub,vc,wq<\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u0413\u043b\u0430\u0432\u043d\u044b\u0439 \u0418\u0441\u0442\u043e\u0440\u0438\u043a \u0437\u0434\u0435\u0441\u044c,\u00a0<strong><em>\u0438<\/em><\/strong>\u00a0\u043e\u043d \u043d\u0430 LAN-\u0432\u0435\u0447\u0435\u0440\u0438\u043d\u043a\u0435, \u043b\u0443\u0447\u0448\u0435 \u0432\u0441\u0435\u0433\u043e \u0443\u0437\u043d\u0430\u0442\u044c \u043e\u0431 \u044d\u0442\u043e\u043c \u0441\u0440\u0430\u0437\u0443. \u0412\u044b \u043f\u043e\u0447\u0442\u0438 \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0438\u043c\u044f \u0435\u0433\u043e \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441\u00a0<code>t<\/code>, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0439\u0442\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0431\u043e\u0440\u044b \u0438\u0437 \u0442\u0440\u0435\u0445 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043e\u0432, \u0433\u0434\u0435 \u0438\u043c\u044f \u0445\u043e\u0442\u044f \u0431\u044b \u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441\u00a0<code>t<\/code>. \u042d\u0442\u043e \u0441\u0443\u0436\u0430\u0435\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u0434\u043e\u00a0<code>7<\/code> \u043d\u0430\u0431\u043e\u0440\u043e\u0432 \u0438\u0437 \u0442\u0440\u0435\u0445 \u0432\u0437\u0430\u0438\u043c\u043e\u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043e\u0432:<\/p>\n<pre><code>co,de,ta co,ka,ta de,ka,ta qp,td,wh tb,vc,wq tc,td,wh td,wh,yn<\/code><\/pre>\n<p>\u041d\u0430\u0439\u0434\u0438\u0442\u0435 \u0432\u0441\u0435 \u043d\u0430\u0431\u043e\u0440\u044b \u0438\u0437 \u0442\u0440\u0435\u0445 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u043d\u044b\u0445 \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043e\u0432.\u00a0<strong><em>\u0421\u043a\u043e\u043b\u044c\u043a\u043e \u0438\u0437 \u043d\u0438\u0445 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u0445\u043e\u0442\u044f \u0431\u044b \u043e\u0434\u0438\u043d \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440 \u0441 \u0438\u043c\u0435\u043d\u0435\u043c, \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u043c\u0441\u044f \u0441<\/em><\/strong>\u00a0<code>t<\/code>?<\/p>\n<h3>&#8212; \u0427\u0430\u0441\u0442\u044c \u0432\u0442\u043e\u0440\u0430\u044f &#8212;<\/h3>\n<p>\u0412\u0441\u0435 \u0435\u0449\u0435 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u043d\u043e\u0433\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0438\u0445 \u0432\u0441\u0435. \u0412\u0430\u043c \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u043d\u0430\u0439\u0442\u0438 LAN-\u0432\u0435\u0447\u0435\u0440\u0438\u043d\u043a\u0443 \u0434\u0440\u0443\u0433\u0438\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \u0438 \u043f\u043e\u0439\u0442\u0438 \u0442\u0443\u0434\u0430 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e.<\/p>\n<p>\u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443, \u043f\u043e\u0445\u043e\u0436\u0435, \u0432\u043e\u043a\u0440\u0443\u0433 \u043d\u0435\u0442 \u043d\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0430, \u0432\u044b \u0440\u0435\u0448\u0430\u0435\u0442\u0435, \u0447\u0442\u043e \u0432\u0441\u0435 \u043e\u043d\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u043d\u0430 LAN-\u0432\u0435\u0447\u0435\u0440\u0438\u043d\u043a\u0435. \u0415\u0441\u043b\u0438 \u044d\u0442\u043e \u043f\u0440\u0430\u0432\u0434\u0430, \u0442\u043e LAN-\u0432\u0435\u0447\u0435\u0440\u0438\u043d\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0441\u043e\u0431\u043e\u0439\u00a0<strong><em>\u0441\u0430\u043c\u044b\u0439 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043d\u0430\u0431\u043e\u0440 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0441\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u044b \u0434\u0440\u0443\u0433 \u043a \u0434\u0440\u0443\u0433\u0443<\/em><\/strong>. \u0422\u043e \u0435\u0441\u0442\u044c, \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430 \u043d\u0430 LAN-\u0432\u0435\u0447\u0435\u0440\u0438\u043d\u043a\u0435 \u044d\u0442\u043e\u0442 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440 \u0431\u0443\u0434\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u0434\u0440\u0443\u0433\u043e\u043c\u0443 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0443 \u043d\u0430 LAN-\u0432\u0435\u0447\u0435\u0440\u0438\u043d\u043a\u0435.<\/p>\n<p>\u0412 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u043e\u043c \u0432\u044b\u0448\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0441\u0430\u043c\u044b\u0439 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043d\u0430\u0431\u043e\u0440 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0441\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u044b \u0434\u0440\u0443\u0433 \u043a \u0434\u0440\u0443\u0433\u0443, \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437\u00a0<code>co<\/code>,\u00a0<code>de<\/code>,\u00a0<code>ka<\/code>, \u0438\u00a0<code>ta<\/code>. \u041a\u0430\u0436\u0434\u044b\u0439 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440 \u0432 \u044d\u0442\u043e\u043c \u043d\u0430\u0431\u043e\u0440\u0435 \u0438\u043c\u0435\u0435\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u0434\u0440\u0443\u0433\u043e\u043c\u0443 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0443 \u0432 \u043d\u0430\u0431\u043e\u0440\u0435:<\/p>\n<pre><code>ka-co ta-co de-co ta-ka de-ta ka-de<\/code><\/pre>\n<p>\u041d\u0430 \u043f\u043b\u0430\u043a\u0430\u0442\u0430\u0445 LAN-\u0432\u0435\u0447\u0435\u0440\u0438\u043d\u043a\u0438 \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u0441\u044f, \u0447\u0442\u043e\u00a0<strong><em>\u043f\u0430\u0440\u043e\u043b\u044c<\/em><\/strong>\u00a0\u0434\u043b\u044f \u0432\u0445\u043e\u0434\u0430 \u043d\u0430 LAN-\u0432\u0435\u0447\u0435\u0440\u0438\u043d\u043a\u0443 &#8212; \u044d\u0442\u043e \u0438\u043c\u0435\u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430 \u043d\u0430 LAN-\u0432\u0435\u0447\u0435\u0440\u0438\u043d\u043a\u0435, \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0432 \u0430\u043b\u0444\u0430\u0432\u0438\u0442\u043d\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435, \u0430 \u0437\u0430\u0442\u0435\u043c \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u043d\u044b\u0435 \u0437\u0430\u043f\u044f\u0442\u044b\u043c\u0438. (\u041b\u044e\u0434\u0438, \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0443\u044e\u0449\u0438\u0435 LAN-\u0432\u0435\u0447\u0435\u0440\u0438\u043d\u043a\u0443, \u044f\u0432\u043d\u043e \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043a\u0443\u0447\u043a\u043e\u0439\u00a0<strong><em>\u0437\u0430\u043d\u0443\u0434<\/em><\/strong>.) \u0412 \u044d\u0442\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043f\u0430\u0440\u043e\u043b\u044c \u0431\u0443\u0434\u0435\u0442\u00a0<code>co,de,ka,ta<\/code>.<\/p>\n<p>\u041a\u0430\u043a\u043e\u0439 \u043f\u0430\u0440\u043e\u043b\u044c \u0434\u043b\u044f \u0432\u0445\u043e\u0434\u0430 \u043d\u0430 LAN-\u0432\u0435\u0447\u0435\u0440\u0438\u043d\u043a\u0443?<\/p>\n<\/div>\n<\/details>\n<h2>\u0427\u0430\u0441\u0442\u044c 1<\/h2>\n<p>\u041a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u043e, \u043d\u0430\u0447\u043d\u0435\u043c \u0441 \u0440\u0430\u0437\u0431\u043e\u0440\u0430 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u043d\u0430\u0431\u043e\u0440 \u043f\u0430\u0440 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043e\u0432:<\/p>\n<pre><code class=\"sql\">WITH src AS (   SELECT     regexp_matches(       $$ kh-tc qp-kh de-cg ka-co yn-aq qp-ub cg-tb vc-aq tb-ka wh-tc yn-cg kh-ub ta-co de-co tc-td tb-wq wh-td ta-ka td-qp aq-cg wq-ub ub-vc de-ta wq-aq wq-vc wh-yn ka-de kh-ta co-tc wh-qp tb-vc td-yn $$     , '([a-z]{2})-([a-z]{2})'     , 'g'     ) pair )<\/code><\/pre>\n<pre><code>  pair  text[] {kh,tc} {qp,kh} {de,cg} {ka,co} {yn,aq} {qp,ub} ...<\/code><\/pre>\n<p>\u0427\u0442\u043e\u0431\u044b \u043d\u0430\u0439\u0442\u0438 3 \u0432\u0437\u0430\u0438\u043c\u043d\u043e \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u0434\u0432\u0443\u043c\u044f \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f\u043c\u0438, \u0437\u0430\u043f\u0440\u0435\u0442\u0438\u0432 \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0441 &#171;\u043c\u0435\u043d\u044c\u0448\u0435\u0439&#187; \u043f\u0430\u0440\u043e\u0439:<\/p>\n<pre><code class=\"sql\">SELECT   * FROM   src p1 JOIN   src p2     ON p2.pair &gt; p1.pair AND     p2.pair &amp;&amp; p1.pair              -- \u043f\u0430\u0440\u044b \u0438\u043c\u0435\u044e\u0442 \u043e\u0431\u0449\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b JOIN   src p3     ON p3.pair &gt; p2.pair AND     p3.pair &lt;@ (p1.pair || p2.pair) -- \u043e\u0431\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0442\u0440\u0435\u0442\u044c\u0435\u0439 \u043f\u0430\u0440\u044b \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0432 \u043f\u0435\u0440\u0432\u044b\u0445 \u0434\u0432\u0443\u0445<\/code><\/pre>\n<pre><code>{ka,co} | {ta,co} | {ta,ka} {vc,aq} | {wq,aq} | {wq,vc} {kh,ub} | {qp,kh} | {qp,ub} {de,co} | {ka,co} | {ka,de} {de,co} | {de,ta} | {ta,co} {tc,td} | {wh,tc} | {wh,td} {td,qp} | {wh,qp} | {wh,td} {aq,cg} | {yn,aq} | {yn,cg} {ub,vc} | {wq,ub} | {wq,vc} {de,ta} | {ka,de} | {ta,ka} {tb,vc} | {tb,wq} | {wq,vc} {td,yn} | {wh,td} | {wh,yn}<\/code><\/pre>\n<p>\u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u044f &#171;\u043a\u0430\u043a\u043e\u0435-\u0442\u043e \u0438\u0437 \u0438\u043c\u0435\u043d \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u043d\u0430 <code>t<\/code>&#187; \u0438 \u043f\u0440\u043e\u0441\u0443\u043c\u043c\u0438\u0440\u0443\u0435\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0437\u0430\u043f\u0438\u0441\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0435\u043c\u0443 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c:<\/p>\n<pre><code class=\"sql\">SELECT   sum(cond::integer)                -- \u043f\u043e\u0434\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u044e\u0449\u0438\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u044e FROM   src p1 JOIN   src p2     ON p2.pair &gt; p1.pair AND     p2.pair &amp;&amp; p1.pair              -- \u043f\u0430\u0440\u044b \u0438\u043c\u0435\u044e\u0442 \u043e\u0431\u0449\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b JOIN   src p3     ON p3.pair &gt; p2.pair AND     p3.pair &lt;@ (p1.pair || p2.pair) -- \u043e\u0431\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0442\u0440\u0435\u0442\u044c\u0435\u0439 \u043f\u0430\u0440\u044b \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0432 \u043f\u0435\u0440\u0432\u044b\u0445 \u0434\u0432\u0443\u0445 , LATERAL (     SELECT       bool_or(name ^@ 't') cond     -- \u043a\u0430\u043a\u043e\u0435-\u0442\u043e \u0438\u0437 \u0438\u043c\u0435\u043d \u0441\u0440\u0435\u0434\u0438 \u0432\u0441\u0435\u0445 \u043f\u0430\u0440 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u043d\u0430 t     FROM       unnest(p1.pair || p2.pair || p3.pair) name   ) T;<\/code><\/pre>\n<p>\u0421\u043e\u0435\u0434\u0438\u043d\u0438\u043c \u0432 \u0438\u0442\u043e\u0433\u043e\u0432\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441:<\/p>\n<pre><code class=\"sql\">WITH src AS (   SELECT     regexp_matches(       $$ kh-tc qp-kh de-cg ka-co yn-aq qp-ub cg-tb vc-aq tb-ka wh-tc yn-cg kh-ub ta-co de-co tc-td tb-wq wh-td ta-ka td-qp aq-cg wq-ub ub-vc de-ta wq-aq wq-vc wh-yn ka-de kh-ta co-tc wh-qp tb-vc td-yn $$     , '([a-z]{2})-([a-z]{2})'     , 'g'     ) pair ) SELECT   sum(cond::integer)                -- \u043f\u043e\u0434\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u044e\u0449\u0438\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u044e FROM   src p1 JOIN   src p2     ON p2.pair &gt; p1.pair AND     p2.pair &amp;&amp; p1.pair              -- \u043f\u0430\u0440\u044b \u0438\u043c\u0435\u044e\u0442 \u043e\u0431\u0449\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b JOIN   src p3     ON p3.pair &gt; p2.pair AND     p3.pair &lt;@ (p1.pair || p2.pair) -- \u043e\u0431\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0442\u0440\u0435\u0442\u044c\u0435\u0439 \u043f\u0430\u0440\u044b \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0432 \u043f\u0435\u0440\u0432\u044b\u0445 \u0434\u0432\u0443\u0445 , LATERAL (     SELECT       bool_or(name ^@ 't') cond     -- \u043a\u0430\u043a\u043e\u0435-\u0442\u043e \u0438\u0437 \u0438\u043c\u0435\u043d \u0441\u0440\u0435\u0434\u0438 \u0432\u0441\u0435\u0445 \u043f\u0430\u0440 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u043d\u0430 t     FROM       unnest(p1.pair || p2.pair || p3.pair) name   ) T;<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043c\u044b \u043d\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u043b\u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u0439 \u0438 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0439 (\u0442\u0438\u043f\u0430 \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0430\u0440 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0445 \u0438\u043c\u0435\u043d\u0430 &#171;\u043d\u0430 <code>t<\/code>&#171;), \u0440\u0435\u0448\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0443 &#171;\u0432 \u043b\u043e\u0431&#187; \u0441\u0430\u043c\u044b\u043c \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u0438 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c, \u0442\u043e \u043f\u043e\u043b\u043d\u044b\u0439 &#171;\u043a\u0443\u0431\u0438\u0447\u0435\u0441\u043a\u0438\u0439&#187; \u043f\u0435\u0440\u0435\u0431\u043e\u0440 (\u0434\u0432\u0430 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f) <code>3080<\/code> \u043f\u0430\u0440 \u0438 \u043e\u0442\u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u043a\u043e\u0439 \u043f\u043e\u0447\u0442\u0438 <code>150M<\/code> \u043d\u0435\u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u043f\u043e\u0434 \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u0435\u0439 <a href=\"https:\/\/explain.tensor.ru\/archive\/explain\/d5e1c56c2705448112001302ca54ea9f:0:2025-03-31\">\u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 72 \u0441\u0435\u043a\u0443\u043d\u0434\u044b<\/a>:<\/p>\n<figure class=\"full-width\"><\/figure>\n<h2>\u0427\u0430\u0441\u0442\u044c 2<\/h2>\n<p>\u0412\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043d\u0430\u0441 \u043f\u0440\u043e\u0441\u044f\u0442 \u043d\u0430\u0439\u0442\u0438 \u0441\u0430\u043c\u044b\u0439 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0441\u0435\u0433\u043c\u0435\u043d\u0442, \u0433\u0434\u0435 \u043a\u0430\u0436\u0434\u044b\u0439 \u0441\u0432\u044f\u0437\u0430\u043d \u0441 \u043a\u0430\u0436\u0434\u044b\u043c.<\/p>\n<p>\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043e\u0431\u0435\u0440\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435, \u0441 \u043a\u0435\u043c \u0432\u043e\u043e\u0431\u0449\u0435 \u0441\u0432\u044f\u0437\u0430\u043d \u043a\u0430\u0436\u0434\u044b\u0439 &#171;\u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e&#187; (\u0442\u043e \u0435\u0441\u0442\u044c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0432\u044b\u043c \u0432 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0439 \u0438\u043b\u0438 &#171;\u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0439&#187; \u043f\u0430\u0440\u0435):<\/p>\n<pre><code class=\"sql\">, paired AS (   SELECT     pair[1] src                     -- \u043a\u0442\u043e \u0441\u0432\u044f\u0437\u0430\u043d   , array_agg(DISTINCT pair[2]) dst -- \u0441 \u043a\u0435\u043c \u0441\u0432\u044f\u0437\u0430\u043d (\u0443\u043d\u0438\u043a\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440)   FROM     (       TABLE src                 -- \u0432\u0441\u0435 \u043f\u0430\u0440\u044b \u0432 \u043f\u0440\u044f\u043c\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435     UNION ALL       SELECT         ARRAY[pair[2], pair[1]] -- \u0432\u0441\u0435 \u043f\u0430\u0440\u044b \u0432 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435       FROM         src     )   GROUP BY     1 )<\/code><\/pre>\n<pre><code>src  | dst text | text[] aq   | {cg,vc,wq,yn} cg   | {aq,de,tb,yn} co   | {de,ka,ta,tc} de   | {cg,co,ka,ta} ka   | {co,de,ta,tb} kh   | {qp,ta,tc,ub} qp   | {kh,td,ub,wh} ta   | {co,de,ka,kh} tb   | {cg,ka,vc,wq} tc   | {co,kh,td,wh} td   | {qp,tc,wh,yn} ub   | {kh,qp,vc,wq} vc   | {aq,tb,ub,wq} wh   | {qp,tc,td,yn} wq   | {aq,tb,ub,vc} yn   | {aq,cg,td,wh}<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e \u043d\u0430\u0447\u043d\u0435\u043c \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u043a\u0430\u0436\u0434\u044b\u0439 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 <code>party<\/code>-\u0433\u0440\u0443\u043f\u043f\u044b \u043f\u043e\u043b\u044c\u0437\u0443\u044f\u0441\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043b\u043e\u0433\u0438\u043a\u043e\u0439:<\/p>\n<ul>\n<li>\n<p>\u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0439 \u043a \u0433\u0440\u0443\u043f\u043f\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437 \u0443\u0436\u0435 \u0438\u043c\u0435\u044e\u0449\u0438\u0445\u0441\u044f (\u043d\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e, \u0440\u0430\u0437 \u043e\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u044b), \u0447\u0442\u043e\u0431\u044b \u043c\u044b \u043d\u0435 \u043f\u0435\u0440\u0435\u0431\u0438\u0440\u0430\u043b\u0438 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0435 \u043f\u043e \u0441\u043e\u0441\u0442\u0430\u0432\u0443 \u0433\u0440\u0443\u043f\u043f\u044b \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e<\/p>\n<\/li>\n<li>\n<p>\u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0441\u0432\u044f\u0437\u0430\u043d \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u0438\u043c\u0435\u044e\u0449\u0438\u043c\u0438\u0441\u044f<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"sql\">, r AS (   SELECT     ARRAY[src] party -- \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u0441\u043e \u0432\u0441\u0435\u0445 \u043e\u0434\u0438\u043d\u0430\u0440\u043d\u044b\u0445 \u0433\u0440\u0443\u043f\u043f   FROM     paired UNION ALL   SELECT     party || src   FROM     r   JOIN     paired       ON src &gt; party[array_length(party, 1)] AND -- \u043d\u043e\u0432\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e       party &lt;@ dst                               -- \u0432\u0441\u0435 \u0443\u0436\u0435 \u0441\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0441\u0440\u0435\u0434\u0438 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u043d\u044b\u0445 \u0441 \u043d\u043e\u0432\u044b\u043c )<\/code><\/pre>\n<pre><code>party {aq} {cg} {co} {de} {ka} {kh} {qp} {ta} {tb} {tc} {td} {ub} {vc} {wh} {wq} {yn} {aq,cg} {cg,de} {co,de} {co,ka} {de,ka} {kh,qp} {co,ta} {de,ta} {ka,ta} {kh,ta} {cg,tb} {ka,tb} {co,tc} {kh,tc} {qp,td} {tc,td} {kh,ub} {qp,ub} {aq,vc} {tb,vc} {ub,vc} {qp,wh} {tc,wh} {td,wh} {aq,wq} {tb,wq} {ub,wq} {vc,wq} {aq,yn} {cg,yn} {td,yn} {wh,yn} {co,de,ka} {co,de,ta} {co,ka,ta} {de,ka,ta} {kh,qp,ub} {qp,td,wh} {tc,td,wh} {aq,vc,wq} {tb,vc,wq} {ub,vc,wq} {aq,cg,yn} {td,wh,yn} {co,de,ka,ta}<\/code><\/pre>\n<p>\u041e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u043b\u0438\u0448\u044c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0430\u043c\u0443\u044e \u043f\u0435\u0440\u0432\u0443\u044e \u0438\u0437 \u0441\u0430\u043c\u044b\u0445 \u0434\u043b\u0438\u043d\u043d\u044b\u0445 \u0433\u0440\u0443\u043f\u043f \u0432 \u0441\u0442\u0440\u043e\u043a\u0443:<\/p>\n<pre><code class=\"sql\">SELECT<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-453844","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/453844","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=453844"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/453844\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=453844"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=453844"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=453844"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}