{"id":499364,"date":"2026-10-20T10:52:50","date_gmt":"2026-10-20T07:52:50","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=499364"},"modified":"2026-10-20T10:52:50","modified_gmt":"2026-10-20T07:52:50","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=499364","title":{"rendered":"\u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u043e\u0442\u043f\u0443\u0441\u043a \u043a\u0430\u043a \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u044b: \u0438\u0441\u043a\u0443\u0441\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0434\u0430\u0432\u0430\u0442\u044c \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0435"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/46\/ad\/e8\/46ade8a294c145f5725e952569be8115.jpg\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/46\/ad\/e8\/46ade8a294c145f5725e952569be8115.jpg 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/46\/ad\/e8\/46ade8a294c145f5725e952569be8115.jpg 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p> \u041a\u0430\u0436\u0434\u0443\u044e \u043e\u0441\u0435\u043d\u044c HR \u043f\u0440\u043e\u0441\u0438\u0442 \u0437\u0430\u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0442\u043f\u0443\u0441\u043a\u0430 \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0433\u043e\u0434. \u041e\u0431\u044b\u0447\u043d\u043e \u043b\u044e\u0434\u0438 \u0441\u0440\u0430\u0437\u0443 \u0431\u0435\u0440\u0443\u0442 \u043c\u0435\u0436\u0434\u0443 \u043c\u0430\u0439\u0441\u043a\u0438\u043c\u0438, \u043a\u0442\u043e-\u0442\u043e \u043f\u043e\u0434\u0431\u0438\u0440\u0430\u0435\u0442 \u0434\u0430\u043d\u044b \u043f\u043e\u0434 \u0434\u0435\u043d\u044c \u043d\u0430\u0440\u043e\u0434\u043d\u043e\u0433\u043e \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0430, \u0430 \u043c\u043d\u043e\u0433\u0438\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u0442\u0430\u0432\u044f\u0442 \u043d\u0430 \u0434\u0435\u043a\u0430\u0431\u0440\u044c, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0442\u043e\u043c \u0434\u0432\u0438\u0433\u0430\u0442\u044c \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e. <\/p>\n<p>\u0410 \u044f \u0437\u0430\u0434\u0430\u043b\u0441\u044f \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u043c &#8212; \u043c\u043e\u0436\u043d\u043e \u043b\u0438 \u043d\u0430\u0439\u0442\u0438 \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u043e\u0442\u043f\u0443\u0441\u043a \u043f\u043e\u0434 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0438 \u043e\u0442\u043a\u0440\u044b\u043b VS Code\\Jupiter \u0441 F# (\u043f\u043e\u043a\u0430 \u043e\u043d\u043e \u0435\u0449\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442). \u0412\u0441\u0451 \u0436\u0438\u0432\u0451\u0442 \u0432 Jupyter-\u043d\u043e\u0443\u0442\u0431\u0443\u043a\u0435 \u0441 \u044f\u0434\u0440\u043e\u043c .NET Interactive \u2014 \u0434\u0430, F# \u0443\u043c\u0435\u0435\u0442 \u0432 \u043d\u043e\u0443\u0442\u0431\u0443\u043a\u0438, \u043f\u0438\u0442\u043e\u043d\u0438\u0441\u0442\u044b, \u043d\u0435 \u0440\u0435\u0432\u043d\u0443\u0439\u0442\u0435.<\/p>\n<h2>\u041f\u0440\u0430\u0432\u0438\u043b\u0430 \u0438\u0433\u0440\u044b \u043d\u0430 2027<\/h2>\n<p>\u041a\u043e\u0440\u043e\u0442\u043a\u043e \u0438 \u0431\u0435\u0437 \u043f\u0440\u0435\u0442\u0435\u043d\u0437\u0438\u0438 \u043d\u0430 \u044e\u0440\u0438\u0434\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u043a\u043e\u043d\u0441\u0443\u043b\u044c\u0442\u0430\u0446\u0438\u044e:<\/p>\n<ul>\n<li>\n<p><strong>28 \u043a\u0430\u043b\u0435\u043d\u0434\u0430\u0440\u043d\u044b\u0445 \u0434\u043d\u0435\u0439<\/strong>, \u043e\u0434\u0438\u043d \u043a\u0443\u0441\u043e\u043a \u2014 \u043d\u0435 \u043a\u043e\u0440\u043e\u0447\u0435 14 \u0434\u043d\u0435\u0439 \u043f\u043e\u0434\u0440\u044f\u0434 (<a href=\"https:\/\/www.consultant.ru\/document\/cons_doc_LAW_34683\/befc35b415ff7b334824418693252b451205ffc0\/\" rel=\"noopener nofollow\">\u0441\u0442. 125 \u0422\u041a<\/a>). \u041e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 14 \u0431\u0435\u0440\u0443 \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443.<\/p>\n<\/li>\n<li>\n<p><strong>\u041f\u0440\u0430\u0437\u0434\u043d\u0438\u043a\u0438<\/strong> \u0432 \u043e\u0442\u043f\u0443\u0441\u043a \u043d\u0435 \u0432\u0445\u043e\u0434\u044f\u0442 \u0438 \u043f\u0440\u043e\u0434\u043b\u0435\u0432\u0430\u044e\u0442 \u0435\u0433\u043e (<a href=\"https:\/\/www.consultant.ru\/document\/cons_doc_LAW_34683\/1ea2cd88521106bc484f44be9e24fa81034d13e5\/\" rel=\"noopener nofollow\">\u0441\u0442. 120<\/a>). <strong>\u0412\u044b\u0445\u043e\u0434\u043d\u044b\u0435<\/strong> \u2014 \u0432\u0445\u043e\u0434\u044f\u0442.<\/p>\n<\/li>\n<li>\n<p><strong>\u041a\u0430\u043b\u0435\u043d\u0434\u0430\u0440\u044c 2027<\/strong>: \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a\u0438 1\u20138 \u044f\u043d\u0432\u0430\u0440\u044f, 23 \u0444\u0435\u0432\u0440\u0430\u043b\u044f, 8 \u043c\u0430\u0440\u0442\u0430, 1 \u0438 9 \u043c\u0430\u044f, 12 \u0438\u044e\u043d\u044f, 4 \u043d\u043e\u044f\u0431\u0440\u044f; \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u044b \u043d\u0430 22 \u0444\u0435\u0432\u0440\u0430\u043b\u044f, 3 \u0438 10 \u043c\u0430\u044f, 14 \u0438\u044e\u043d\u044f, 5 \u043d\u043e\u044f\u0431\u0440\u044f \u0438 31 \u0434\u0435\u043a\u0430\u0431\u0440\u044f; \u0440\u0430\u0431\u043e\u0447\u0430\u044f \u0441\u0443\u0431\u0431\u043e\u0442\u0430 20 \u0444\u0435\u0432\u0440\u0430\u043b\u044f. \u041d\u043e\u0432\u043e\u0433\u043e\u0434\u043d\u0438\u0435 \u043a\u0430\u043d\u0438\u043a\u0443\u043b\u044b \u0435\u0441\u0442\u044c \u0443 \u0432\u0441\u0435\u0445 \u2014 \u0441\u0447\u0438\u0442\u0430\u0435\u043c \u0441 11 \u044f\u043d\u0432\u0430\u0440\u044f.<\/p>\n<\/li>\n<li>\n<p><strong>\u0414\u0435\u043d\u044c\u0433\u0438<\/strong>: \u0437\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u043a\u0430\u043b\u0435\u043d\u0434\u0430\u0440\u043d\u044b\u0439 \u0434\u0435\u043d\u044c \u043e\u0442\u043f\u0443\u0441\u043a\u0430 \u043f\u043b\u0430\u0442\u044f\u0442 \u0433\u043e\u0434\u043e\u0432\u043e\u0439 \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u043e\u043a \u00f7 12 \u00f7 29,3 (<a href=\"https:\/\/www.consultant.ru\/document\/cons_doc_LAW_34683\/48242e0d7e3c73ff276bc1dea5aaf33de03ff34a\/\" rel=\"noopener nofollow\">\u0441\u0442. 139<\/a>), \u0437\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u043d\u0435\u043e\u0442\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u0439 \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u0434\u0435\u043d\u044c \u0442\u0435\u0440\u044f\u0435\u0448\u044c \u043e\u043a\u043b\u0430\u0434 \u00f7 \u0440\u0430\u0431\u043e\u0447\u0438\u0435 \u0434\u043d\u0438 \u043c\u0435\u0441\u044f\u0446\u0430.<\/p>\n<\/li>\n<\/ul>\n<p>\u0414\u043b\u044f \u043e\u043a\u043b\u0430\u0434\u0430 150 000 \u20bd:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0414\u0435\u043d\u044c \u043e\u0442\u043f\u0443\u0441\u043a\u0430<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0420\u0430\u0431\u043e\u0447\u0438\u0445 \u0434\u043d\u0435\u0439 \u0432 \u043c\u0435\u0441\u044f\u0446\u0435<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0414\u0435\u043d\u044c\u0433\u0438<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0431\u0443\u0434\u043d\u0438\u0439 \u0434\u0435\u043d\u044c \u0432 \u044f\u043d\u0432\u0430\u0440\u0435<\/p>\n<\/td>\n<td>\n<p align=\"left\">15<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u22124 881 \u20bd<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0431\u0443\u0434\u043d\u0438\u0439 \u0434\u0435\u043d\u044c \u0432 \u0444\u0435\u0432\u0440\u0430\u043b\u0435 \u0438\u043b\u0438 \u043c\u0430\u0435<\/p>\n<\/td>\n<td>\n<p align=\"left\">19<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u22122 775 \u20bd<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0431\u0443\u0434\u043d\u0438\u0439 \u0434\u0435\u043d\u044c \u0432 \u043d\u043e\u044f\u0431\u0440\u0435<\/p>\n<\/td>\n<td>\n<p align=\"left\">20<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u22122 381 \u20bd<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0431\u0443\u0434\u043d\u0438\u0439 \u0434\u0435\u043d\u044c \u0432 \u0438\u044e\u043d\u0435 \u0438\u043b\u0438 \u043e\u043a\u0442\u044f\u0431\u0440\u0435<\/p>\n<\/td>\n<td>\n<p align=\"left\">21<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u22122 023 \u20bd<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0431\u0443\u0434\u043d\u0438\u0439 \u0434\u0435\u043d\u044c \u0432 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043c\u0435\u0441\u044f\u0446\u044b<\/p>\n<\/td>\n<td>\n<p align=\"left\">22<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u22121 699 \u20bd<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0441\u0443\u0431\u0431\u043e\u0442\u0430 \u0438\u043b\u0438 \u0432\u043e\u0441\u043a\u0440\u0435\u0441\u0435\u043d\u044c\u0435<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u2014<\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>+5 119 \u20bd<\/strong><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u043d\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044e\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u0435\u0449\u0451 \u0440\u0430\u0437. <strong>\u0421\u0443\u0431\u0431\u043e\u0442\u0430 \u0432 \u043e\u0442\u043f\u0443\u0441\u043a\u0435 \u043f\u0440\u0438\u043d\u043e\u0441\u0438\u0442 \u0434\u0435\u043d\u044c\u0433\u0438.<\/strong> \u0412\u044b \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0442\u0435\u0440\u044f\u0435\u0442\u0435, \u0430 \u043e\u0442\u043f\u0443\u0441\u043a\u043d\u044b\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0435.<\/p>\n<h2>\u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043a\u0430\u043b\u0435\u043d\u0434\u0430\u0440\u044c \u0432 \u043a\u043e\u0434\u0435<\/h2>\n<p>\u0414\u0435\u043d\u044c \u2014 \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u043e\u043c\u0435\u0440 <code>d<\/code>, \u0441\u0447\u0438\u0442\u0430\u044f \u0441 11 \u044f\u043d\u0432\u0430\u0440\u044f: 0, 1, 2, \u2026 354. \u0412\u0441\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0434\u043d\u044f \u0441\u0447\u0438\u0442\u0430\u044e\u0442\u0441\u044f \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u0438 \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u044b, \u0434\u0430\u043b\u044c\u0448\u0435 \u043c\u043e\u0434\u0435\u043b\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043c\u043e\u0442\u0440\u0438\u0442 \u0432 \u043d\u0438\u0445 \u043f\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0443.<\/p>\n<pre><code class=\"fsharp\">module Cal =    let first, last = DateOnly(2027, 1, 11), DateOnly(2027, 12, 31)    let days = last.DayNumber - first.DayNumber + 1    let date (d: int) = first.AddDays d    let day (ddMM: string) = DateOnly.ParseExact(ddMM + \".2027\", \"dd.MM.yyyy\").DayNumber - first.DayNumber    let show d = (date d).ToString \"dd.MM\"     let private key (x: DateOnly) = x.ToString \"dd.MM\"    let private holidays = set [ \"23.02\"; \"08.03\"; \"01.05\"; \"09.05\"; \"12.06\"; \"04.11\" ]    let private movedDaysOff = set [ \"22.02\"; \"03.05\"; \"10.05\"; \"14.06\"; \"05.11\"; \"31.12\" ]    let private workingSaturday = \"20.02\"     let private isHoliday (x: DateOnly) = holidays.Contains(key x) || x.Month = 1 &amp;&amp; x.Day &lt;= 8    \/\/\/ \u043d\u0435\u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u043b\u0438 \u0434\u0435\u043d\u044c: \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439, \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0451\u043d\u043d\u044b\u0439 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439 (\u043a\u0440\u043e\u043c\u0435 \u0440\u0430\u0431\u043e\u0447\u0435\u0439 \u0441\u0443\u0431\u0431\u043e\u0442\u044b)    let isOff (x: DateOnly) =        key x &lt;&gt; workingSaturday        &amp;&amp; (x.DayOfWeek = DayOfWeek.Saturday || x.DayOfWeek = DayOfWeek.Sunday || isHoliday x || movedDaysOff.Contains(key x))     let holiday = Array.init days (date &gt;&gt; isHoliday)    let off = Array.init days (date &gt;&gt; isOff)    let workdays = [| for d in 0 .. days - 1 do if not off[d] then d |]     \/\/\/ 14 \u0434\u043d\u0435\u0439 \u043e\u0442\u043f\u0443\u0441\u043a\u0430 \u0441 \u0434\u043d\u044f start: \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a\u0438 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u043c, \u043e\u043d\u0438 \u043f\u0440\u043e\u0434\u043b\u0435\u0432\u0430\u044e\u0442 \u043e\u0442\u043f\u0443\u0441\u043a    let chunk start =        if holiday[start] then None        else            let ds = seq { start .. days - 1 } |&gt; Seq.filter (fun d -&gt; not holiday[d]) |&gt; Seq.truncate 14 |&gt; Seq.toArray            if ds.Length = 14 then Some ds else None printfn $\"\u0414\u043d\u0435\u0439: {Cal.days}, \u0440\u0430\u0431\u043e\u0447\u0438\u0445: {Cal.workdays.Length}\"\/\/ \u0414\u043d\u0435\u0439: 355, \u0440\u0430\u0431\u043e\u0447\u0438\u0445: 247<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper\"><\/span><\/a><\/div><\/pre>\n<p>\u0427\u0442\u043e \u0437\u0434\u0435\u0441\u044c \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442:<\/p>\n<ul>\n<li>\n<p><strong>\u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043a\u0430\u043b\u0435\u043d\u0434\u0430\u0440\u044c \u2014 \u0442\u0440\u0438 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 (<\/strong><code><strong>set<\/strong><\/code><strong>) \u0441\u0442\u0440\u043e\u043a.<\/strong> \u041f\u0440\u0430\u0437\u0434\u043d\u0438\u043a\u0438, \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u044b \u0438 \u043e\u0434\u043d\u0430 \u0440\u0430\u0431\u043e\u0447\u0430\u044f \u0441\u0443\u0431\u0431\u043e\u0442\u0430. \u041a\u043b\u044e\u0447 \u2014 \u0441\u0442\u0440\u043e\u043a\u0430 <code>\"dd.MM\"<\/code>. \u041d\u0435 \u043e\u0447\u0435\u043d\u044c \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e, \u0437\u0430\u0442\u043e \u0441\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u043f\u0440\u0430\u0432\u0438\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0430 \u0433\u043b\u0430\u0437\u0430\u043c\u0438 \u0437\u0430 \u0434\u0435\u0441\u044f\u0442\u044c \u0441\u0435\u043a\u0443\u043d\u0434.<\/p>\n<\/li>\n<li>\n<p><strong>\u0412\u044b\u0445\u043e\u0434\u043d\u044b\u0435 \u0438 \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a\u0438 &#8212; \u043d\u0435 \u043e\u0434\u043d\u043e \u0438 \u0442\u043e \u0436\u0435.<\/strong> <code>holiday<\/code> \u2014 \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a: \u0432 \u043e\u0442\u043f\u0443\u0441\u043a \u043d\u0435 \u0432\u0445\u043e\u0434\u0438\u0442 \u0438 \u043f\u0440\u043e\u0434\u043b\u0435\u0432\u0430\u0435\u0442 \u0435\u0433\u043e. <code>off<\/code> \u2014 \u043b\u044e\u0431\u043e\u0439 \u043d\u0435\u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u0434\u0435\u043d\u044c: \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439, \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u043d\u043e\u0441. \u041f\u0443\u0442\u0430\u0442\u044c \u0438\u0445 \u043d\u0435\u043b\u044c\u0437\u044f: \u0441\u0443\u0431\u0431\u043e\u0442\u0430 \u0432 \u043e\u0442\u043f\u0443\u0441\u043a <strong>\u0432\u0445\u043e\u0434\u0438\u0442<\/strong> \u0438 \u043f\u0440\u0438\u043d\u043e\u0441\u0438\u0442 \u0434\u0435\u043d\u044c\u0433\u0438, \u0430 23 \u0444\u0435\u0432\u0440\u0430\u043b\u044f \u2014 \u043d\u0435 \u0432\u0445\u043e\u0434\u0438\u0442 \u0438 \u043d\u0435 \u043f\u0440\u0438\u043d\u043e\u0441\u0438\u0442 \u043d\u0438\u0447\u0435\u0433\u043e.<\/p>\n<\/li>\n<li>\n<p><strong>\u0420\u0430\u0431\u043e\u0447\u0430\u044f \u0441\u0443\u0431\u0431\u043e\u0442\u0430 20 \u0444\u0435\u0432\u0440\u0430\u043b\u044f<\/strong> \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0432\u043e\u0439 \u0438 \u043f\u043e\u0431\u0435\u0436\u0434\u0430\u0435\u0442 \u0432\u0441\u0451 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435. \u0413\u043e\u0441\u0443\u0434\u0430\u0440\u0441\u0442\u0432\u043e \u0434\u0430\u043b\u043e, \u0433\u043e\u0441\u0443\u0434\u0430\u0440\u0441\u0442\u0432\u043e \u0432\u0437\u044f\u043b\u043e.<\/p>\n<\/li>\n<li>\n<p><code><strong>workdays<\/strong><\/code> \u2014 \u043d\u043e\u043c\u0435\u0440\u0430 \u0440\u0430\u0431\u043e\u0447\u0438\u0445 \u0434\u043d\u0435\u0439 \u043f\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0443.<\/p>\n<\/li>\n<li>\n<p><code><strong>chunk start<\/strong><\/code> \u2014 \u0434\u043d\u0438 14-\u0434\u043d\u0435\u0432\u043d\u043e\u0433\u043e \u043a\u0443\u0441\u043a\u0430 \u0441 \u043d\u0430\u0447\u0430\u043b\u043e\u043c <code>start<\/code>. \u041f\u0440\u0430\u0437\u0434\u043d\u0438\u043a\u0438 \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u044e\u0442\u0441\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043a\u0443\u0441\u043e\u043a \u0447\u0435\u0440\u0435\u0437 8 \u043c\u0430\u0440\u0442\u0430 \u0434\u043b\u0438\u0442\u0441\u044f 15 \u043a\u0430\u043b\u0435\u043d\u0434\u0430\u0440\u043d\u044b\u0445 \u0434\u043d\u0435\u0439. \u041d\u0430\u0447\u0438\u043d\u0430\u0442\u044c \u043e\u0442\u043f\u0443\u0441\u043a \u0441 \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a\u0430 \u043d\u0435\u043b\u044c\u0437\u044f \u2014 <code>None<\/code>. \u0421\u0432\u0435\u0440\u043a\u0430 \u0441 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e: 247 \u0440\u0430\u0431\u043e\u0447\u0438\u0445 \u0434\u043d\u0435\u0439 \u0432 2027-\u043c, \u043a\u0430\u043a \u0432 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u043c \u043a\u0430\u043b\u0435\u043d\u0434\u0430\u0440\u0435. \u0417\u043d\u0430\u0447\u0438\u0442, \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043f\u043e\u0442\u0435\u0440\u044f\u043b\u0438.<\/p>\n<\/li>\n<\/ul>\n<p>\u0414\u0435\u043d\u044c\u0433\u0438 \u0437\u0430 \u0434\u0435\u043d\u044c \u0441\u0447\u0438\u0442\u0430\u044e\u0442\u0441\u044f \u0442\u0443\u0442 \u0436\u0435, \u043f\u043e \u0444\u043e\u0440\u043c\u0443\u043b\u0430\u043c \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u2014 \u0438 \u0441\u0440\u0430\u0437\u0443 \u0432 \u043a\u043e\u043f\u0435\u0439\u043a\u0430\u0445. \u042d\u0442\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u0435\u0435 \u0438 \u0434\u0430\u043b\u044c\u0448\u0435 \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u0441\u044f:<\/p>\n<details class=\"spoiler\">\n<summary>\u041a\u043e\u043f\u0435\u0439\u043a\u0438 \u0437\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u0434\u0435\u043d\u044c \u0433\u043e\u0434\u0430<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"fsharp\">\/\/\/ \u043a\u043e\u043f\u0435\u0439\u043a\u0438 \u0437\u0430 \u0434\u0435\u043d\u044c \u043e\u0442\u043f\u0443\u0441\u043a\u0430: \u043e\u0442\u043f\u0443\u0441\u043a\u043d\u044b\u0435 \u043c\u0438\u043d\u0443\u0441 \u043f\u043e\u0442\u0435\u0440\u044f\u043d\u043d\u0430\u044f \u0437\u0430\u0440\u043f\u043b\u0430\u0442\u0430 (\u0441\u0442. 139: \u0433\u043e\u0434\u043e\u0432\u043e\u0439 \u00f7 12 \u00f7 29,3)static member val MoneyPerDay : int64[] =    let salary = 150_000m    let workdaysInMonth =        Array.init 12 (fun i -&gt;            let m = i + 1            Seq.init (DateTime.DaysInMonth(2027, m)) (fun j -&gt; DateOnly(2027, m, j + 1))            |&gt; Seq.filter (Cal.isOff &gt;&gt; not) |&gt; Seq.length)    Array.init Cal.days (fun d -&gt;        if Cal.holiday[d] then 0L        else            let lost = if Cal.off[d] then 0m else salary \/ decimal workdaysInMonth[(Cal.date d).Month - 1]            int64 (Math.Round((salary \/ 29.3m - lost) * 100m)))<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<p> \u041f\u0440\u0430\u0437\u0434\u043d\u0438\u043a \u2014 \u043d\u043e\u043b\u044c: \u0437\u0430 \u043d\u0435\u0433\u043e \u043d\u0435 \u043f\u043b\u0430\u0442\u044f\u0442 \u0438 \u043d\u0435 \u0432\u044b\u0447\u0438\u0442\u0430\u044e\u0442. \u0412\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u2014 \u0447\u0438\u0441\u0442\u044b\u0435 \u043e\u0442\u043f\u0443\u0441\u043a\u043d\u044b\u0435. \u0411\u0443\u0434\u043d\u0438\u0439 \u0434\u0435\u043d\u044c \u2014 \u043e\u0442\u043f\u0443\u0441\u043a\u043d\u044b\u0435 \u043c\u0438\u043d\u0443\u0441 \u0434\u043d\u0435\u0432\u043d\u0430\u044f \u0437\u0430\u0440\u043f\u043b\u0430\u0442\u0430 \u044d\u0442\u043e\u0433\u043e \u043c\u0435\u0441\u044f\u0446\u0430. \u0412\u0441\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0432\u044b\u0448\u0435 \u2014 \u044d\u0442\u043e \u0432\u043e\u0442 \u044d\u0442\u0438 \u0434\u0435\u0441\u044f\u0442\u044c \u0441\u0442\u0440\u043e\u043a. <\/p>\n<h2>\u041f\u0435\u0440\u0435\u0431\u043e\u0440 \u0443\u043c\u0438\u0440\u0430\u0435\u0442 \u043d\u0430 \u043f\u044f\u0442\u043e\u043c \u0434\u043d\u0435<\/h2>\n<p>14-\u0434\u043d\u0435\u0432\u043d\u044b\u0439 \u043a\u0443\u0441\u043e\u043a \u2014 \u044d\u0442\u043e \u043e\u0434\u043d\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f: \u0434\u0435\u043d\u044c \u043d\u0430\u0447\u0430\u043b\u0430. \u041f\u0440\u043e\u0433\u043e\u043d\u044f\u0435\u043c <code>Cal.chunk<\/code> \u043f\u043e \u0432\u0441\u0435\u043c \u0434\u043d\u044f\u043c \u0433\u043e\u0434\u0430 \u2014 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 336, \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043c\u0433\u043d\u043e\u0432\u0435\u043d\u043d\u043e.<\/p>\n<p>\u041c\u0430\u043a\u0441\u0438\u043c\u0443\u043c \u0434\u0435\u043d\u0435\u0433 \u2014 <strong>+13 897 \u20bd<\/strong> \u0437\u0430 \u043a\u0443\u0441\u043e\u043a 21 \u0444\u0435\u0432\u0440\u0430\u043b\u044f \u2014 7 \u043c\u0430\u0440\u0442\u0430. \u041c\u0430\u043a\u0441\u0438\u043c\u0443\u043c \u043e\u0442\u0434\u044b\u0445\u0430 \u2014 <strong>18 \u0434\u043d\u0435\u0439<\/strong> \u0441 7 \u0444\u0435\u0432\u0440\u0430\u043b\u044f: \u0442\u0443\u0434\u0430 \u0432\u043b\u0435\u0437\u0430\u044e\u0442 \u0438 22-\u0435, \u0438 23-\u0435, \u0438 \u0440\u0430\u0431\u043e\u0447\u0430\u044f \u0441\u0443\u0431\u0431\u043e\u0442\u0430.<\/p>\n<p>\u0410 \u0434\u0430\u043b\u044c\u0448\u0435 14 \u043e\u0434\u0438\u043d\u043e\u0447\u043d\u044b\u0445 \u0434\u043d\u0435\u0439. \u041d\u0435\u043f\u0440\u0430\u0437\u0434\u043d\u0438\u0447\u043d\u044b\u0445 \u0434\u043d\u0435\u0439 \u0432 \u0433\u043e\u0434\u0443 349. \u0412\u044b\u0431\u0440\u0430\u0442\u044c \u0438\u0437 \u043d\u0438\u0445 \u043f\u044f\u0442\u044c \u2014 <strong>41 922 588 819<\/strong> \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432. \u0412\u044b\u0431\u0440\u0430\u0442\u044c \u0447\u0435\u0442\u044b\u0440\u043d\u0430\u0434\u0446\u0430\u0442\u044c \u2014 <strong>3,5 \u00b7 10\u00b2\u2074<\/strong>. \u0414\u043e \u0432\u044b\u0445\u043e\u0434\u0430 \u0432 \u043e\u0442\u043f\u0443\u0441\u043a \u043d\u0435 \u0434\u043e\u0441\u0447\u0438\u0442\u0430\u0435\u043c. \u0414\u0430\u0436\u0435 \u0434\u043e \u043f\u0435\u043d\u0441\u0438\u0438.<\/p>\n<p>\u041f\u0435\u0440\u0435\u0431\u043e\u0440 \u043c\u043e\u0436\u043d\u043e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u2014 \u043d\u0430\u0447\u0438\u043d\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u0431\u043e\u0440 \u0441 \u0434\u043d\u0435\u0439, \u043f\u0440\u0438\u043c\u044b\u043a\u0430\u044e\u0449\u0438\u0445 \u043a \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u043c, \u043e\u0442\u0441\u0435\u043a\u0430\u0442\u044c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u043f\u043e \u043c\u0435\u0442\u043e\u0434\u0443 \u0432\u0435\u0442\u0432\u0435\u0439 \u0438 \u0433\u0440\u0430\u043d\u0438\u0446, \u0438 \u0435\u0449\u0435 \u043c\u043d\u043e\u0433\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432. \u041d\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u044d\u0442\u043e \u0432\u0441\u0435 \u0441\u043b\u043e\u0436\u043d\u043e, \u0434\u0430\u0436\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0418\u0418.<\/p>\n<h2>\u041d\u0430 \u043f\u043e\u043c\u043e\u0449\u044c \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u0441\u043e\u043b\u0432\u0435\u0440<\/h2>\n<p>CP-SAT \u2014 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0439 \u0441\u043e\u043b\u0432\u0435\u0440 \u0438\u0437 <a href=\"https:\/\/developers.google.com\/optimization\" rel=\"noopener nofollow\">Google OR-Tools<\/a>. \u0414\u043b\u044f .NET \u044d\u0442\u043e \u043e\u0431\u044b\u0447\u043d\u044b\u0439 NuGet-\u043f\u0430\u043a\u0435\u0442. \u041c\u043d\u043e\u0433\u043e \u043b\u0435\u0442 \u043f\u043e\u0434\u0440\u044f\u0434 \u043e\u043d \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442 \u043c\u0435\u0434\u0430\u043b\u0438 \u043d\u0430 MiniZinc Challenge \u2014 \u0447\u0435\u043c\u043f\u0438\u043e\u043d\u0430\u0442\u0435 \u0441\u043e\u043b\u0432\u0435\u0440\u043e\u0432, \u0435\u0441\u0442\u044c \u0438 \u0442\u0430\u043a\u043e\u0439.<\/p>\n<p>\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 \u043d\u0438\u043c \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a: \u0432\u044b <strong>\u043d\u0435 \u043f\u0438\u0448\u0435\u0442\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c<\/strong>. \u0412\u044b \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0435 \u0437\u0430\u0434\u0430\u0447\u0443 \u2014 \u043a\u0430\u043a\u0438\u0435 \u0435\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435, \u0447\u0442\u043e \u0438\u043c \u043d\u0435\u043b\u044c\u0437\u044f, \u0447\u0442\u043e \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043c\u0430\u043a\u0441\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u2014 \u0430 \u0441\u043e\u043b\u0432\u0435\u0440 \u0441\u0430\u043c \u0438\u0449\u0435\u0442 \u043e\u0442\u0432\u0435\u0442. \u041a\u0430\u043a SQL: \u043f\u0438\u0448\u0435\u0448\u044c \u00ab\u0447\u0442\u043e\u00bb, \u0430 \u043d\u0435 \u00ab\u043a\u0430\u043a\u00bb.<\/p>\n<p>\u041e\u0442\u0432\u0435\u0442 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u0441 \u043e\u0434\u043d\u0438\u043c \u0438\u0437 \u0441\u0442\u0430\u0442\u0443\u0441\u043e\u0432:<\/p>\n<ul>\n<li>\n<p><strong>Optimal<\/strong> \u2014 \u043f\u043b\u0430\u043d \u043d\u0430\u0439\u0434\u0435\u043d, \u0438 <strong>\u0434\u043e\u043a\u0430\u0437\u0430\u043d\u043e<\/strong>, \u0447\u0442\u043e \u043b\u0443\u0447\u0448\u0435 \u043d\u0435 \u0431\u044b\u0432\u0430\u0435\u0442;<\/p>\n<\/li>\n<li>\n<p><strong>Feasible<\/strong> \u2014 \u043f\u043b\u0430\u043d \u043d\u0430\u0439\u0434\u0435\u043d, \u043d\u043e \u0434\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043d\u0435 \u0443\u0441\u043f\u0435\u043b (\u043a\u043e\u043d\u0447\u0438\u043b\u0441\u044f \u043b\u0438\u043c\u0438\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438);<\/p>\n<\/li>\n<li>\n<p><strong>Infeasible<\/strong> \u2014 \u0434\u043e\u043a\u0430\u0437\u0430\u043d\u043e, \u0447\u0442\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u0440\u0435\u0447\u0430\u0442 \u0434\u0440\u0443\u0433 \u0434\u0440\u0443\u0433\u0443. \u041e\u0442\u043f\u0443\u0441\u043a\u0430 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442. \u0414\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u043e \u2014 \u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u044d\u0432\u0440\u0438\u0441\u0442\u0438\u043a \u0438 \u0433\u0435\u043d\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432. \u0422\u0435 \u0433\u043e\u0432\u043e\u0440\u044f\u0442 \u00ab\u0432\u0440\u043e\u0434\u0435 \u043d\u0435\u043f\u043b\u043e\u0445\u043e\u00bb. CP-SAT \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u00ab\u043b\u0443\u0447\u0448\u0435 \u043d\u0435\u043b\u044c\u0437\u044f, \u0432\u043e\u0442 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u044f\u00bb.<\/p>\n<\/li>\n<\/ul>\n<p><strong>\u041a\u0430\u043a \u043e\u043d \u043e\u0431\u0445\u043e\u0434\u0438\u0442 10\u00b2\u2074 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432, \u043d\u0435 \u043f\u0435\u0440\u0435\u0431\u0438\u0440\u0430\u044f \u0438\u0445?<\/strong> \u0422\u0440\u0438 \u043f\u0440\u0438\u0451\u043c\u0430, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0445 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e:<\/p>\n<ul>\n<li>\n<p><strong>\u0420\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439.<\/strong> \u0412\u044b\u0431\u0440\u0430\u043b \u043a\u0443\u0441\u043e\u043a 21 \u0444\u0435\u0432\u0440\u0430\u043b\u044f \u2014 7 \u043c\u0430\u0440\u0442\u0430? \u0412\u0441\u0435 14 \u0434\u043d\u0435\u0439 \u0432\u043d\u0443\u0442\u0440\u0438 \u043c\u0433\u043d\u043e\u0432\u0435\u043d\u043d\u043e \u0432\u044b\u0447\u0451\u0440\u043a\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0438\u0437 \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442\u043e\u0432 \u0432 \u043e\u0434\u0438\u043d\u043e\u0447\u043d\u044b\u0435 \u0434\u043d\u0438. \u041e\u0434\u043d\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0442\u044f\u043d\u0435\u0442 \u0437\u0430 \u0441\u043e\u0431\u043e\u0439 \u0441\u043e\u0442\u043d\u0438 \u0432\u044b\u0432\u043e\u0434\u043e\u0432.<\/p>\n<\/li>\n<li>\n<p><strong>\u041e\u0431\u0443\u0447\u0435\u043d\u0438\u0435 \u043d\u0430 \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u0430\u0445<\/strong> \u2014 \u043e\u0442 SAT \u0432 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0438. \u0417\u0430\u0448\u0451\u043b \u0432 \u0442\u0443\u043f\u0438\u043a \u2014 \u0441\u043e\u043b\u0432\u0435\u0440 \u0432\u044b\u044f\u0441\u043d\u044f\u0435\u0442 <em>\u043f\u043e\u0447\u0435\u043c\u0443<\/em> \u0438 \u0437\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u0442 \u043f\u0440\u0438\u0447\u0438\u043d\u0443 \u043a\u0430\u043a \u043d\u043e\u0432\u043e\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e. \u0412 \u044d\u0442\u043e\u0442 \u0442\u0443\u043f\u0438\u043a \u043e\u043d \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u0437\u0430\u0439\u0434\u0451\u0442 \u043d\u0438 \u0441 \u043a\u0430\u043a\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b.<\/p>\n<\/li>\n<li>\n<p><strong>\u041e\u0446\u0435\u043d\u043a\u0438 \u0441\u0432\u0435\u0440\u0445\u0443.<\/strong> \u0421\u043e\u043b\u0432\u0435\u0440 \u0443\u043c\u0435\u0435\u0442 \u0431\u044b\u0441\u0442\u0440\u043e \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u00ab\u0431\u043e\u043b\u044c\u0448\u0435 \u044d\u0442\u043e\u0433\u043e \u0442\u043e\u0447\u043d\u043e \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f\u00bb \u0438 \u043e\u0442\u0440\u0435\u0437\u0430\u0442\u044c \u0446\u0435\u043b\u044b\u0435 \u0432\u0435\u0442\u043a\u0438 \u043f\u043e\u0438\u0441\u043a\u0430, \u043d\u0435 \u0437\u0430\u0445\u043e\u0434\u044f \u0432 \u043d\u0438\u0445. \u041a\u0430\u043a \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u2014 \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043d\u0438\u0436\u0435.<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u043b\u044e\u0441 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u2014 \u0441\u043e\u043b\u0432\u0435\u0440 \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u044f\u0440\u0430\u0445. \u041d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u044f\u0434\u0440\u0435 \u0441\u0432\u043e\u0439 \u0432\u043e\u0440\u043a\u0435\u0440 \u0441\u043e \u0441\u0432\u043e\u0435\u0439 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0435\u0439, \u0438 \u043e\u043d\u0438 \u0434\u0435\u043b\u044f\u0442\u0441\u044f \u043d\u0430\u0445\u043e\u0434\u043a\u0430\u043c\u0438 \u0434\u0440\u0443\u0433 \u0441 \u0434\u0440\u0443\u0433\u043e\u043c.<\/p>\n<p><strong>\u0427\u0442\u043e CP-SAT \u043d\u0435 \u0443\u043c\u0435\u0435\u0442<\/strong> \u2014 \u0438 \u044d\u0442\u043e \u0432\u0430\u0436\u043d\u043e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0434\u0430\u043b\u044c\u0448\u0435 \u0432\u0441\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u2014 \u0431\u043e\u0440\u044c\u0431\u0430 \u0441 \u044d\u0442\u0438\u043c\u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f\u043c\u0438:<\/p>\n<ul>\n<li>\n<p><strong>\u0422\u043e\u043b\u044c\u043a\u043e \u0446\u0435\u043b\u044b\u0435 \u0447\u0438\u0441\u043b\u0430.<\/strong> \u041d\u0438\u043a\u0430\u043a\u0438\u0445 <code>float<\/code>. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u0441\u0435 \u0434\u0435\u043d\u044c\u0433\u0438 \u0432 \u043c\u043e\u0434\u0435\u043b\u0438 \u2014 \u0432 <strong>\u043a\u043e\u043f\u0435\u0439\u043a\u0430\u0445<\/strong>, <code>int64<\/code>.<\/p>\n<\/li>\n<li>\n<p><strong>\u0423 \u043a\u0430\u0436\u0434\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u2014 \u0433\u0440\u0430\u043d\u0438\u0446\u044b.<\/strong> \u00ab\u0426\u0435\u043b\u043e\u0435 \u043e\u0442 0 \u0434\u043e 136\u00bb \u2014 \u043c\u043e\u0436\u043d\u043e. \u00ab\u0426\u0435\u043b\u043e\u0435 \u043a\u0430\u043a\u043e\u0435-\u043d\u0438\u0431\u0443\u0434\u044c\u00bb \u2014 \u043d\u0435\u043b\u044c\u0437\u044f.<\/p>\n<\/li>\n<li>\n<p><strong>\u0422\u043e\u043b\u044c\u043a\u043e \u043b\u0438\u043d\u0435\u0439\u043d\u044b\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0438 \u043b\u0438\u043d\u0435\u0439\u043d\u0430\u044f \u0446\u0435\u043b\u044c<\/strong>: \u0441\u0443\u043c\u043c\u044b \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0441 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u044b\u043c\u0438 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u0430\u043c\u0438. <code>3\u00b7x + 5\u00b7y \u2264 10<\/code> \u2014 \u0434\u0430. <code>x\u00b2<\/code> \u0438\u043b\u0438 <code>x\u00b7y<\/code> \u2014 \u0444\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e \u0435\u0441\u0442\u044c <code>AddMultiplicationEquality<\/code>, \u043d\u043e \u0441\u043e\u043b\u0432\u0435\u0440 \u0435\u0433\u043e \u043d\u0435 \u043b\u044e\u0431\u0438\u0442 \u0438 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u043c \u0438 \u0433\u0440\u0443\u0441\u0442\u043d\u044b\u043c.<\/p>\n<\/li>\n<li>\n<p><strong>\u0426\u0435\u043b\u044c \u043e\u0434\u043d\u0430.<\/strong> \u00ab\u041f\u043e\u0431\u043e\u043b\u044c\u0448\u0435 \u043e\u0442\u0434\u043e\u0445\u043d\u0443\u0442\u044c \u0438 \u043d\u0435 \u043f\u043e\u0442\u0435\u0440\u044f\u0442\u044c \u0434\u0435\u043d\u0435\u0433\u00bb \u2014 \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0443\u043f\u0430\u043a\u043e\u0432\u0430\u0442\u044c \u0432 \u043e\u0434\u043d\u043e \u0447\u0438\u0441\u043b\u043e.<\/p>\n<\/li>\n<li>\n<p><strong>\u0425\u0443\u0434\u0448\u0438\u0439 \u0441\u043b\u0443\u0447\u0430\u0439 \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u044d\u043a\u0441\u043f\u043e\u043d\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439.<\/strong> \u0417\u0430\u0434\u0430\u0447\u0430 NP-\u0442\u0440\u0443\u0434\u043d\u0430\u044f, \u0447\u0443\u0434\u0435\u0441 \u043d\u0435 \u0431\u044b\u0432\u0430\u0435\u0442. \u041f\u043b\u043e\u0445\u0430\u044f \u0444\u043e\u0440\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u043a\u0430 \u043c\u043e\u0436\u0435\u0442 \u043d\u0435 \u0440\u0435\u0448\u0438\u0442\u044c\u0441\u044f \u0437\u0430 \u0440\u0430\u0437\u0443\u043c\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u2014 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u043d\u0430 \u0441\u0435\u0431\u0435. \u0417\u0430\u0442\u043e \u0435\u0441\u0442\u044c \u0443\u0434\u043e\u0431\u043d\u044b\u0435 \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f. \u041d\u0430\u043c \u0445\u0432\u0430\u0442\u0438\u0442 \u0441\u0430\u043c\u044b\u0445 \u043f\u0440\u043e\u0441\u0442\u044b\u0445:<\/p>\n<\/li>\n<li>\n<p><code>AddExactlyOne(xs)<\/code> \u2014 \u0440\u043e\u0432\u043d\u043e \u043e\u0434\u043d\u0430 \u0431\u0443\u043b\u0435\u0432\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u0430 \u0438\u0441\u0442\u0438\u043d\u043d\u0430;<\/p>\n<\/li>\n<li>\n<p><code>AddAtMostOne(xs)<\/code> \u2014 \u043d\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u043e\u0434\u043d\u043e\u0439;<\/p>\n<\/li>\n<li>\n<p><code>AddLinearConstraint(expr, lo, hi)<\/code> \u2014 \u043b\u0438\u043d\u0435\u0439\u043d\u043e\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0432 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435 <code>[lo, hi]<\/code>;<\/p>\n<\/li>\n<li>\n<p><code>OnlyEnforceIf(lit)<\/code> \u2014 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435, \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 <strong>\u043b\u0438\u0442\u0435\u0440\u0430\u043b<\/strong> \u0438\u0441\u0442\u0438\u043d\u0435\u043d. \u041b\u0438\u0442\u0435\u0440\u0430\u043b \u2014 \u044d\u0442\u043e \u0431\u0443\u043b\u0435\u0432\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u0438\u043b\u0438 \u0435\u0451 \u043e\u0442\u0440\u0438\u0446\u0430\u043d\u0438\u0435: <code>x<\/code> \u0438\u043b\u0438 <code>not x<\/code>. \u0415\u0441\u0442\u044c \u0438 \u0442\u044f\u0436\u0451\u043b\u0430\u044f \u0430\u0440\u0442\u0438\u043b\u043b\u0435\u0440\u0438\u044f \u2014 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u044b \u0431\u0435\u0437 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u0439 (<code>AddNoOverlap<\/code>, \u0434\u043b\u044f \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u0438\u0439), \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u044b (<code>AddCircuit<\/code>, \u0434\u043b\u044f \u043a\u043e\u043c\u043c\u0438\u0432\u043e\u044f\u0436\u0451\u0440\u0430), \u0440\u0435\u0441\u0443\u0440\u0441\u044b (<code>AddCumulative<\/code>). \u0414\u043b\u044f \u0440\u0430\u0441\u0447\u0451\u0442\u0430 \u043e\u0442\u043f\u0443\u0441\u043a\u0430 \u043e\u043d\u0438 \u043d\u0435 \u043d\u0443\u0436\u043d\u044b.<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c<\/p>\n<pre><code class=\"fsharp\">#r \"nuget: Google.OrTools, 9.15.6755\"<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<h2>\u041c\u043e\u0434\u0435\u043b\u044c \u0434\u043b\u044f \u0441\u043e\u043b\u0432\u0435\u0440\u0430: \u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435, \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f, \u0446\u0435\u043b\u044c.<\/h2>\n<p>\u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0431\u0443\u043b\u0435\u0432\u044b:<\/p>\n<ul>\n<li>\n<p><code>start[t]<\/code> \u2014 14-\u0434\u043d\u0435\u0432\u043d\u044b\u0439 \u043a\u0443\u0441\u043e\u043a \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0432 \u0434\u0435\u043d\u044c <code>t<\/code>;<\/p>\n<\/li>\n<li>\n<p><code>single[d]<\/code> \u2014 \u0434\u0435\u043d\u044c <code>d<\/code> \u0432\u0437\u044f\u0442 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e.<\/p>\n<\/li>\n<\/ul>\n<p>\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f:<\/p>\n<ul>\n<li>\n<p>\u043d\u0430\u0447\u0430\u043b\u043e \u0440\u043e\u0432\u043d\u043e \u043e\u0434\u043d\u043e (<code>AddExactlyOne<\/code>);<\/p>\n<\/li>\n<li>\n<p>\u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u0434\u043d\u0435\u0439 \u0440\u043e\u0432\u043d\u043e 14, \u0432 \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a\u0438 \u0438\u0445 \u0431\u0440\u0430\u0442\u044c \u043d\u0435\u043b\u044c\u0437\u044f, \u0438 \u0434\u0435\u043d\u044c \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0432 \u043a\u0443\u0441\u043a\u0435 \u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c (<code>AddAtMostOne<\/code>).<\/p>\n<\/li>\n<\/ul>\n<p>\u0414\u0435\u043d\u044c\u0433\u0438 \u2014 \u043b\u0438\u043d\u0435\u0439\u043d\u0430\u044f \u0441\u0443\u043c\u043c\u0430: \u043a\u0430\u0436\u0434\u0430\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u0443\u043c\u043d\u043e\u0436\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0435 \u043a\u043e\u043f\u0435\u0439\u043a\u0438. \u041a\u0430\u043b\u0435\u043d\u0434\u0430\u0440\u044c \u0446\u0435\u043b\u0438\u043a\u043e\u043c \u0443\u0445\u043e\u0434\u0438\u0442 \u0432 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u044b, \u043c\u043e\u0434\u0435\u043b\u044c \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u043b\u0438\u043d\u0435\u0439\u043d\u043e\u0439.<\/p>\n<p>\u0413\u043b\u0430\u0432\u043d\u0430\u044f \u0444\u0438\u0448\u043a\u0430: \u043c\u043e\u0434\u0435\u043b\u044c <strong>\u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0437\u043d\u0430\u0435\u0442<\/strong> \u043f\u0440\u043e \u043b\u0435\u0442\u043e, \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0435 \u0438 \u0432\u0430\u0448\u0438 \u0445\u043e\u0442\u0435\u043b\u043a\u0438. \u041e\u043d\u0430 \u0441\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442 \u0443 \u0434\u0432\u0443\u0445 \u043f\u0440\u0435\u0434\u0438\u043a\u0430\u0442\u043e\u0432 <code>DateOnly -&gt; bool<\/code>:<\/p>\n<pre><code class=\"fsharp\">type Rules =    { Chunk: DateOnly -&gt; bool    \/\/ \u043a\u0430\u043a\u0438\u043c \u0434\u043d\u044f\u043c \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u043e \u0431\u044b\u0442\u044c \u0432 14-\u0434\u043d\u0435\u0432\u043d\u043e\u043c \u043a\u0443\u0441\u043a\u0435      Single: DateOnly -&gt; bool   \/\/ \u043a\u0430\u043a\u0438\u0435 \u0434\u043d\u0438 \u043c\u043e\u0436\u043d\u043e \u0431\u0440\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c\u0438      Budget: decimal option }   \/\/ \u0434\u0435\u043d\u044c\u0433\u0438 \u0437\u0430 \u043e\u0442\u043f\u0443\u0441\u043a \u043d\u0435 \u043c\u0435\u043d\u044c\u0448\u0435 \u0441\u0442\u043e\u043b\u044c\u043a\u0438\u0445 \u0440\u0443\u0431\u043b\u0435\u0439<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<details class=\"spoiler\">\n<summary>\u0414\u0435\u043d\u0435\u0436\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u043c\u043e\u0434\u0435\u043b\u0438<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"fsharp\">type VacationModel(rules: Rules) =    let model = CpModel()    let start, single = Dictionary&lt;int, BoolVar&gt;(), Dictionary&lt;int, BoolVar&gt;()    let takes = Array.init Cal.days (fun _ -&gt; ResizeArray&lt;ILiteral&gt;())   \/\/ \u0434\u0435\u043d\u044c \u043a\u0430\u043b\u0435\u043d\u0434\u0430\u0440\u044f -&gt; \u043a\u0430\u043a\u0438\u043c\u0438 \u043a\u0443\u0441\u043a\u0430\u043c\u0438 \u043e\u0442\u043f\u0443\u0441\u043a\u0430 \u043e\u043d \u0437\u0430\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f    let terms = ResizeArray&lt;LinearExpr&gt;()    let mayChunk = Array.zeroCreate&lt;bool&gt; Cal.days     do        \/\/ 14 \u0434\u043d\u0435\u0439 \u043f\u043e\u0434\u0440\u044f\u0434: \u0440\u043e\u0432\u043d\u043e \u043e\u0434\u043d\u043e \u043d\u0430\u0447\u0430\u043b\u043e; \u043a\u0443\u0441\u043e\u043a \u0440\u0430\u0437\u0440\u0435\u0448\u0451\u043d, \u0435\u0441\u043b\u0438 \u0440\u0430\u0437\u0440\u0435\u0448\u0451\u043d \u043a\u0430\u0436\u0434\u044b\u0439 \u0435\u0433\u043e \u0434\u0435\u043d\u044c        for t in 0 .. Cal.days - 1 do            match Cal.chunk t with            | Some c when c |&gt; Array.forall (fun d -&gt; rules.Chunk (Cal.date d)) -&gt;                start[t] &lt;- model.NewBoolVar $\"start{t}\"                for d in c do                    takes[d].Add start[t] \/\/ \u0435\u0441\u043b\u0438 \u0434\u0435\u043d\u044c d \u0437\u0430\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f 14-\u0434\u043d\u0435\u0432\u043d\u044b\u043c \u043a\u0443\u0441\u043a\u043e\u043c \u043d\u0430\u0447\u0430\u0442\u044b\u043c \u0432 t, \u0442\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0432 \u0441\u043f\u0438\u0441\u043e\u043a                    mayChunk[d] &lt;- true                terms.Add(start[t] * Array.sumBy (fun d -&gt; Plan.MoneyPerDay[d]) c)            | _ -&gt; ()        model.AddExactlyOne(Seq.cast start.Values) |&gt; ignore         \/\/ 14 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u0434\u043d\u0435\u0439: \u0432 \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a\u0438 \u043d\u0435\u043b\u044c\u0437\u044f (\u0441\u0442. 120), \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u0440\u0435\u0448\u0430\u0435\u0442 \u043f\u0440\u0435\u0434\u0438\u043a\u0430\u0442        for d in 0 .. Cal.days - 1 do            if not Cal.holiday[d] &amp;&amp; rules.Single (Cal.date d) then                single[d] &lt;- model.NewBoolVar $\"single{d}\"                takes[d].Add single[d]                terms.Add(single[d] * Plan.MoneyPerDay[d])        model.AddLinearConstraint(LinearExpr.Sum single.Values, 14L, 14L) |&gt; ignore         \/\/ \u0434\u0435\u043d\u044c \u2014 \u043b\u0438\u0431\u043e \u0432 \u043a\u0443\u0441\u043a\u0435, \u043b\u0438\u0431\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439, \u043d\u0435 \u043e\u0431\u0430 \u0441\u0440\u0430\u0437\u0443        for t in takes do model.AddAtMostOne t |&gt; ignore     let money = LinearExpr.Sum terms    do rules.Budget |&gt; Option.iter (fun b -&gt; model.AddLinearConstraint(money, int64 (b * 100m), Int64.MaxValue) |&gt; ignore)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<p><strong>\u0414\u043e\u0432\u0435\u0440\u044f\u0439, \u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0439<\/strong>. \u041f\u043e\u0441\u043b\u0435 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043f\u043b\u0430\u043d \u043f\u0435\u0440\u0435\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u0431\u044b\u0447\u043d\u044b\u043c F#, \u0431\u0435\u0437 \u0441\u043e\u043b\u0432\u0435\u0440\u0430. \u041d\u0435 \u0441\u043e\u0448\u043b\u043e\u0441\u044c \u2014 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435.<\/p>\n<pre><code class=\"fsharp\">let plan = { m.Read solver with Optimal = (status = CpSolverStatus.Optimal); Seconds = sw.Elapsed.TotalSeconds }if solver.Value m.Money &lt;&gt; int64 (plan.Money * 100m) || solver.Value m.Joy &lt;&gt; int64 plan.Joy then    failwith \"\u0441\u043e\u043b\u0432\u0435\u0440 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0440\u0430\u0437\u043e\u0448\u043b\u0438\u0441\u044c\"<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u041d\u0438 \u0440\u0430\u0437\u0443 \u043d\u0435 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e, \u043d\u043e \u0441\u043f\u0430\u0442\u044c \u0441\u043f\u043e\u043a\u043e\u0439\u043d\u0435\u0435.<\/p>\n<h2>\u0425\u043e\u0447\u0443 \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c \u0434\u0435\u043d\u0435\u0433<\/h2>\n<pre><code class=\"fsharp\">let anyDays = { Chunk = (fun _ -&gt; true); Single = (fun _ -&gt; true); Budget = None }let moneyPlan = show \"\u0414\u0435\u043d\u044c\u0433\u0438\" (solve anyDays (fun m -&gt; m.Money))<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>11,3 \u0441\u0435\u043a\u0443\u043d\u0434\u044b, \u043e\u043f\u0442\u0438\u043c\u0443\u043c \u0434\u043e\u043a\u0430\u0437\u0430\u043d \u2014 \u0438 <strong>+85 570 \u20bd \u0437\u0430 \u0433\u043e\u0434.<\/strong><\/p>\n<p>\u041a\u0443\u0441\u043e\u043a 21 \u0444\u0435\u0432\u0440\u0430\u043b\u044f \u2014 7 \u043c\u0430\u0440\u0442\u0430, \u0432\u043d\u0443\u0442\u0440\u0438 \u0442\u0440\u0438 \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a\u0430. \u0410 \u043e\u0441\u0442\u0430\u0432\u0448\u0438\u0435\u0441\u044f 14 \u0434\u043d\u0435\u0439 \u0441\u043e\u043b\u0432\u0435\u0440 \u0440\u0430\u0437\u043b\u043e\u0436\u0438\u043b\u2026 \u043f\u043e \u0441\u0443\u0431\u0431\u043e\u0442\u0430\u043c \u0438 \u0432\u043e\u0441\u043a\u0440\u0435\u0441\u0435\u043d\u044c\u044f\u043c. \u041a\u0430\u0436\u0434\u0430\u044f \u043f\u043e +5 119 \u20bd.<\/p>\n<p>\u041f\u043e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u043c \u044f \u0432 \u043e\u0442\u043f\u0443\u0441\u043a\u0435 28 \u0434\u043d\u0435\u0439. \u041f\u043e \u0444\u0430\u043a\u0442\u0443 \u2014 16. \u0420\u0443\u043a\u043e\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c \u0432 \u0432\u043e\u0441\u0442\u043e\u0440\u0433\u0435, \u0431\u0443\u0445\u0433\u0430\u043b\u0442\u0435\u0440\u0438\u044f \u0432 \u0437\u0430\u043c\u0435\u0448\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0435, \u044f \u0432 \u0443\u043d\u044b\u043d\u0438\u0438.<\/p>\n<p><strong>\u0421\u043e\u043b\u0432\u0435\u0440 \u043f\u0440\u043e\u0434\u0430\u043b \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0435, \u0442\u0430\u043a \u0434\u043e\u0440\u043e\u0433\u043e, \u043a\u0430\u043a \u0441\u043c\u043e\u0433.<\/strong><\/p>\n<p>\u0418 \u043e\u043d \u043f\u0440\u0430\u0432: \u044f \u043f\u0440\u043e\u0441\u0438\u043b \u0434\u0435\u043d\u044c\u0433\u0438 \u2014 \u044f \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u0434\u0435\u043d\u044c\u0433\u0438. \u0421\u043e\u043b\u0432\u0435\u0440 \u043d\u0435 \u0436\u0443\u043b\u044c\u043d\u0438\u0447\u0430\u0435\u0442, \u043e\u043d \u043d\u0430\u0445\u043e\u0434\u0438\u0442 \u0434\u044b\u0440\u044b \u0432 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f\u0445. \u0417\u043d\u0430\u0447\u0438\u0442, \u043d\u0430\u0434\u043e \u043d\u0430\u0443\u0447\u0438\u0442\u044c \u0435\u0433\u043e, \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u043e\u0442\u0434\u044b\u0445.<\/p>\n<h2>\u041a\u0430\u0439\u0444 = \u03a3 len\u00b2<\/h2>\n<p>\u041f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0434\u043d\u0438 \u043e\u0442\u0434\u044b\u0445\u0430 \u043d\u0435\u043b\u044c\u0437\u044f: 14 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u044f\u0442\u043d\u0438\u0446 \u0441 \u043f\u0440\u0438\u043b\u0438\u043f\u0448\u0438\u043c\u0438 \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u043c\u0438 \u2014 \u044d\u0442\u043e 42 \u0434\u043d\u044f \u043e\u0442\u0434\u044b\u0445\u0430. \u0420\u043e\u0432\u043d\u043e \u043a\u0430\u043a \u0448\u0435\u0441\u0442\u044c \u043d\u0435\u0434\u0435\u043b\u044c \u043f\u043e\u0434\u0440\u044f\u0434. \u041d\u043e \u043b\u044e\u0431\u043e\u0439, \u043a\u0442\u043e \u0431\u044b\u043b \u0432 \u043e\u0442\u043f\u0443\u0441\u043a\u0435, \u0441\u043a\u0430\u0436\u0435\u0442: \u044d\u0442\u043e <strong>\u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u0440\u0430\u0437\u043d\u044b\u0435<\/strong> 42 \u0434\u043d\u044f.<\/p>\n<p>\u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0432\u0437\u044f\u043b \u0441\u0443\u043c\u043c\u0443 \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043e\u0432 \u0434\u043b\u0438\u043d \u043a\u0443\u0441\u043a\u043e\u0432 \u043e\u0442\u0434\u044b\u0445\u0430 \u0438 \u043d\u0430\u0437\u0432\u0430\u043b \u0435\u0451 <strong>\u043a\u0430\u0439\u0444\u043e\u043c<\/strong>.<\/p>\n<ul>\n<li>\n<p><strong>\u0421\u043a\u043b\u0435\u0439\u043a\u0430 \u0432\u0441\u0435\u0433\u0434\u0430 \u0432\u044b\u0433\u043e\u0434\u043d\u0430<\/strong>: (a + b)\u00b2 = a\u00b2 + b\u00b2 + 2ab. \u0414\u0432\u0435 \u043d\u0435\u0434\u0435\u043b\u0438 \u043f\u043e 10 \u0434\u043d\u0435\u0439 \u2014 \u043a\u0430\u0439\u0444 200, \u043e\u0434\u043d\u0430 \u043f\u043e 20 \u2014 400.<\/p>\n<\/li>\n<li>\n<p><strong>\u041a\u0430\u0436\u0434\u044b\u0439 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0434\u0435\u043d\u044c \u0434\u043e\u0440\u043e\u0436\u0435<\/strong>: \u0434\u0435\u0441\u044f\u0442\u044b\u0439 \u0434\u0435\u043d\u044c \u043f\u043e\u0434\u0440\u044f\u0434 \u043f\u0440\u0438\u043d\u043e\u0441\u0438\u0442 19 \u043a\u0430\u0439\u0444\u0430, \u0434\u0432\u0430\u0434\u0446\u0430\u0442\u044b\u0439 \u2014 39. 42 \u0434\u043d\u044f \u043e\u0434\u043d\u0438\u043c \u043a\u0443\u0441\u043a\u043e\u043c \u2014 1 764, 14 \u043a\u0443\u0441\u043a\u043e\u0432 \u043f\u043e \u0442\u0440\u0438 \u2014 126. \u0412 14 \u0440\u0430\u0437 \u043c\u0435\u043d\u044c\u0448\u0435.<\/p>\n<\/li>\n<\/ul>\n<p>\u0418 \u0432\u0430\u0436\u043d\u0430\u044f \u043e\u0433\u043e\u0432\u043e\u0440\u043a\u0430: \u043a\u0443\u0441\u043e\u043a \u0431\u0435\u0437 \u0435\u0434\u0438\u043d\u043e\u0433\u043e \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0434\u043d\u044f \u043e\u0442\u043f\u0443\u0441\u043a\u0430 \u043d\u0435 \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f. \u0412\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u0432 \u043e\u0442\u043f\u0443\u0441\u043a\u0435 \u2014 \u044d\u0442\u043e \u043d\u0435 \u043e\u0442\u0434\u044b\u0445, \u0430 \u0431\u0443\u0445\u0433\u0430\u043b\u0442\u0435\u0440\u0441\u043a\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c.<\/p>\n<pre><code class=\"fsharp\">member p.Joy = p.Runs |&gt; Seq.sumBy (fun (a, b) -&gt; (b - a + 1) * (b - a + 1))<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<h3>\u041a\u0430\u043a \u0437\u0430\u0441\u0443\u043d\u0443\u0442\u044c \u043a\u0432\u0430\u0434\u0440\u0430\u0442 \u0432 \u043b\u0438\u043d\u0435\u0439\u043d\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c<\/h3>\n<p>\u0423 CP-SAT \u0442\u043e\u043b\u044c\u043a\u043e \u043b\u0438\u043d\u0435\u0439\u043d\u044b\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f. \u0410 \u0443 \u043c\u0435\u043d\u044f \u043a\u0432\u0430\u0434\u0440\u0430\u0442.<\/p>\n<p><strong>\u041f\u0435\u0440\u0432\u0430\u044f \u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u2014 \u0447\u0435\u0441\u0442\u043d\u0430\u044f.<\/strong> \u0417\u0430\u0432\u043e\u0434\u0438\u043c \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u0434\u0435\u043d\u044c \u0446\u0435\u043b\u0443\u044e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e <code>len[d]<\/code> \u2014 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u043d\u0435\u0439 \u043f\u043e\u0434\u0440\u044f\u0434 \u044f \u043e\u0442\u0434\u044b\u0445\u0430\u044e \u043a \u043a\u043e\u043d\u0446\u0443 \u0434\u043d\u044f <code>d<\/code>. \u041f\u0440\u0430\u0432\u0438\u043b\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0435:<\/p>\n<ul>\n<li>\n<p>\u043e\u0442\u0434\u044b\u0445\u0430\u044e \u2014 <code>len[d] = len[d\u22121] + 1<\/code>;<\/p>\n<\/li>\n<li>\n<p>\u0440\u0430\u0431\u043e\u0442\u0430\u044e \u2014 <code>len[d] = 0<\/code>.<\/p>\n<\/li>\n<\/ul>\n<p>\u0410 \u0433\u0434\u0435 \u043a\u0432\u0430\u0434\u0440\u0430\u0442? \u0415\u0433\u043e \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0441\u0447\u0438\u0442\u0430\u0442\u044c. \u0421\u0443\u043c\u043c\u0430 \u043f\u0435\u0440\u0432\u044b\u0445 L \u043d\u0435\u0447\u0451\u0442\u043d\u044b\u0445 \u0447\u0438\u0441\u0435\u043b \u2014 \u044d\u0442\u043e L\u00b2: 1 + 3 + 5 + \u2026 + (2L \u2212 1) = L\u00b2. \u0417\u043d\u0430\u0447\u0438\u0442, \u0434\u0435\u043d\u044c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0442\u0434\u044b\u0445\u0430\u0435\u043c, \u043f\u0440\u0438\u043d\u043e\u0441\u0438\u0442 <code>2\u00b7len[d] \u2212 1<\/code> \u043a\u0430\u0439\u0444\u0430, \u0430 \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u2014 \u043d\u043e\u043b\u044c. \u0418 \u044d\u0442\u043e \u043e\u0434\u043d\u0430 \u043b\u0438\u043d\u0435\u0439\u043d\u0430\u044f \u0444\u043e\u0440\u043c\u0443\u043b\u0430 \u043d\u0430 \u0432\u0441\u0435 \u0434\u043d\u0438: <code>2\u00b7len[d] \u2212 rest[d]<\/code>. \u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0434\u043d\u044f \u0442\u0430\u043c 0 \u2212 0.<\/p>\n<p>\u0412 CP-SAT \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u00ab\u0435\u0441\u043b\u0438 \u2014 \u0442\u043e\u00bb \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 <code>OnlyEnforceIf<\/code>: \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f, \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u0433\u0434\u0430 \u043b\u0438\u0442\u0435\u0440\u0430\u043b \u0438\u0441\u0442\u0438\u043d\u0435\u043d. \u0423\u0441\u043b\u043e\u0432\u043d\u044b\u0439 \u043a\u043e\u0434 (\u0431\u0435\u0437 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u00ab\u043a\u0443\u0441\u043e\u043a \u0438\u0437 \u043e\u0434\u043d\u0438\u0445 \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0445 \u043d\u0435 \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f\u00bb, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0437\u0430\u0433\u0440\u043e\u043c\u043e\u0436\u0434\u0430\u0442\u044c):<\/p>\n<pre><code class=\"fsharp\">let maxLen = 28 + Cal.days - Cal.workdays.Length       \/\/ 136: \u0434\u043b\u0438\u043d\u043d\u0435\u0435 \u043e\u0442\u0434\u044b\u0445 \u043d\u0435 \u0431\u044b\u0432\u0430\u0435\u0442let len = Array.init Cal.days (fun d -&gt; model.NewIntVar(0L, int64 maxLen, $\"len{d}\"))\/\/ rest[d] \u2014 \u043e\u0442\u0434\u044b\u0445\u0430\u044e \u043b\u0438 \u0432 \u0434\u0435\u043d\u044c dlet rest = Array.init Cal.days (fun d -&gt;    let r = model.NewBoolVar $\"rest{d}\"    if Cal.off[d] then model.AddLinearConstraint(r, 1L, 1L) |&gt; ignore                 \/\/ \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u2014 \u0432\u0441\u0435\u0433\u0434\u0430    else model.AddLinearConstraint(r - LinearExpr.Sum takes[d], 0L, 0L) |&gt; ignore      \/\/ \u0431\u0443\u0434\u043d\u0438\u0439 \u2014 \u0435\u0441\u043b\u0438 \u0432 \u043e\u0442\u043f\u0443\u0441\u043a\u0435    r)for d in 0 .. Cal.days - 1 do    let prev = if d &gt; 0 then len[d - 1] :&gt; LinearExpr else LinearExpr.Constant 0L    model.AddLinearConstraint(len[d] - prev, 1L, 1L).OnlyEnforceIf(rest[d]) |&gt; ignore  \/\/ \u043e\u0442\u0434\u044b\u0445\u0430\u044e: len[d] = len[d\u22121] + 1    model.AddLinearConstraint(len[d], 0L, 0L).OnlyEnforceIf(rest[d].Not()) |&gt; ignore   \/\/ \u0440\u0430\u0431\u043e\u0442\u0430\u044e: len[d] = 0\/\/ 1 + 3 + 5 + \u2026 + (2L \u2212 1) = L\u00b2let joy = LinearExpr.Sum [ for d in 0 .. Cal.days - 1 -&gt; len[d] * 2L - rest[d] ]<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0414\u0432\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043d\u0430 \u0434\u0435\u043d\u044c, \u0432\u0441\u0451 \u043b\u0438\u043d\u0435\u0439\u043d\u043e. \u041a\u0440\u0430\u0441\u0438\u0432\u043e! \u0418 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442\u2026 \u0417\u0430 \u043c\u0438\u043d\u0443\u0442\u0443 \u0441\u043e\u043b\u0432\u0435\u0440 \u043d\u0430\u0448\u0451\u043b \u043a\u0430\u0439\u0444 1 296, \u0430 \u0432\u0435\u0440\u0445\u043d\u044f\u044f \u043e\u0446\u0435\u043d\u043a\u0430 \u0437\u0430\u0441\u0442\u0440\u044f\u043b\u0430 \u043d\u0430 6 288 \u2014 \u0432 \u043f\u044f\u0442\u044c \u0440\u0430\u0437 \u0432\u044b\u0448\u0435. \u041e\u043f\u0442\u0438\u043c\u0443\u043c \u043d\u0435 \u0434\u043e\u043a\u0430\u0437\u0430\u043d. \u041f\u043e\u0447\u0435\u043c\u0443 \u0442\u0430\u043a?<\/p>\n<h3>\u0412\u0435\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u043e\u0441\u043b\u0430\u0431\u043b\u0435\u043d\u0438\u0435, \u0438\u043b\u0438 \u043a\u0430\u043a \u0441\u043e\u043b\u0432\u0435\u0440 \u0432\u0440\u0451\u0442 \u0441\u0435\u0431\u0435 \u0432\u043e \u0431\u043b\u0430\u0433\u043e<\/h3>\n<p>\u041d\u0430\u0439\u0442\u0438 \u0445\u043e\u0440\u043e\u0448\u0438\u0439 \u043f\u043b\u0430\u043d \u2014 \u043f\u043e\u043b\u0434\u0435\u043b\u0430. \u0427\u0442\u043e\u0431\u044b \u0441\u043a\u0430\u0437\u0430\u0442\u044c \u00ab\u043b\u0443\u0447\u0448\u0435 \u043d\u0435\u043b\u044c\u0437\u044f\u00bb, \u0441\u043e\u043b\u0432\u0435\u0440 \u0434\u043e\u043b\u0436\u0435\u043d <strong>\u0434\u043e\u043a\u0430\u0437\u0430\u0442\u044c<\/strong>, \u0447\u0442\u043e \u043d\u0438 \u043e\u0434\u0438\u043d \u0438\u0437 10\u00b2\u2074 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u043d\u0435 \u0434\u0430\u0451\u0442 \u0431\u043e\u043b\u044c\u0448\u0435. \u041f\u0435\u0440\u0435\u0431\u0438\u0440\u0430\u0442\u044c \u0438\u0445 \u043e\u043d \u043d\u0435 \u0431\u0443\u0434\u0435\u0442. \u041e\u043d \u0441\u0445\u0438\u0442\u0440\u0438\u0442.<\/p>\n<p>\u0425\u0438\u0442\u0440\u043e\u0441\u0442\u044c \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f <strong>LP-\u043e\u0441\u043b\u0430\u0431\u043b\u0435\u043d\u0438\u0435<\/strong> (LP relaxation). \u0421\u043e\u043b\u0432\u0435\u0440 \u043d\u0430 \u0432\u0440\u0435\u043c\u044f \u0437\u0430\u0431\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0446\u0435\u043b\u044b\u0435: \u0431\u0443\u043b\u0435\u0432\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e 0 \u0438\u043b\u0438 1, \u0430, \u0441\u043a\u0430\u0436\u0435\u043c, 0,3. \u00ab\u0412\u0437\u044f\u0442\u044c \u0432 \u043e\u0442\u043f\u0443\u0441\u043a \u0442\u0440\u0435\u0442\u044c \u043f\u043e\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u0438\u043a\u0430\u00bb. \u0422\u0430\u043a\u0430\u044f \u0432\u0435\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u2014 \u043e\u0431\u044b\u0447\u043d\u043e\u0435 \u043b\u0438\u043d\u0435\u0439\u043d\u043e\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 (LP), \u0440\u0435\u0448\u0430\u0435\u0442\u0441\u044f \u0431\u044b\u0441\u0442\u0440\u043e. \u0410 \u0435\u0451 \u043e\u043f\u0442\u0438\u043c\u0443\u043c <strong>\u043d\u0435 \u043c\u0435\u043d\u044c\u0448\u0435<\/strong> \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0433\u043e: \u0432\u0435\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 \u043f\u043b\u0430\u043d\u043e\u0432 \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u0446\u0435\u043b\u044b\u0445, \u043d\u043e \u0432\u0441\u0435 \u0446\u0435\u043b\u044b\u0435 \u0441\u0440\u0435\u0434\u0438 \u043d\u0438\u0445. \u042d\u0442\u043e \u0438 \u0435\u0441\u0442\u044c \u0432\u0435\u0440\u0445\u043d\u044f\u044f \u043e\u0446\u0435\u043d\u043a\u0430 \u2014 \u0442\u0435 \u0441\u0430\u043c\u044b\u0435 6 288.<\/p>\n<p>\u0414\u0430\u043b\u044c\u0448\u0435 \u0441\u043e\u043b\u0432\u0435\u0440 \u0432\u0435\u0442\u0432\u0438\u0442\u0441\u044f: \u0431\u0435\u0440\u0435\u0442 \u043e\u0434\u043d\u0443 \u0437\u0430\u0434\u0430\u0447\u0443 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435\u043c \u00ab\u043f\u0443\u0441\u0442\u044c \u043f\u043e\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u0438\u043a 3 \u043c\u0430\u044f \u2014 1\u00bb, \u0432\u0442\u043e\u0440\u0443\u044e \u0442\u0430\u043a\u0443\u044e \u0436\u0435, \u043d\u043e  \u0441 \u043d\u0443\u043b\u0435\u043c. \u0420\u0435\u0448\u0430\u0435\u0442 \u043e\u0441\u043b\u0430\u0431\u043b\u0435\u043d\u0438\u0435 \u0432 \u043a\u0430\u0436\u0434\u043e\u0439 \u0432\u0435\u0442\u043a\u0435 \u0438 \u043e\u0442\u0440\u0435\u0437\u0430\u0435\u0442 \u0432\u0435\u0442\u043a\u0438, \u0433\u0434\u0435 \u043e\u0446\u0435\u043d\u043a\u0430 \u0443\u0436\u0435 \u0445\u0443\u0436\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u043b\u0430\u043d\u0430. \u041a\u043e\u0433\u0434\u0430 \u043e\u0446\u0435\u043d\u043a\u0430 \u043e\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0434\u043e \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u043b\u0430\u043d\u0430 \u2014 \u043e\u043f\u0442\u0438\u043c\u0443\u043c \u0434\u043e\u043a\u0430\u0437\u0430\u043d. \u0427\u0435\u043c \u0431\u043b\u0438\u0436\u0435 \u043e\u0441\u043b\u0430\u0431\u043b\u0435\u043d\u0438\u0435 \u043a \u043f\u0440\u0430\u0432\u0434\u0435, \u0442\u0435\u043c \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0441\u0445\u043e\u0434\u0438\u0442\u0441\u044f. \u0415\u0441\u043b\u0438 \u043e\u0441\u043b\u0430\u0431\u043b\u0435\u043d\u0438\u0435 \u0432\u0440\u0451\u0442 \u0432 \u043f\u044f\u0442\u044c \u0440\u0430\u0437 \u2014 \u0436\u0434\u0430\u0442\u044c \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0434\u043e\u043b\u0433\u043e.<\/p>\n<p>\u0410 \u0446\u0435\u043f\u043e\u0447\u043a\u0430 <code>len[d]<\/code> \u0432\u0440\u0451\u0442 \u0431\u0435\u0437\u0431\u043e\u0436\u043d\u043e. \u0412 LP \u043d\u0435\u0442 \u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e <code>OnlyEnforceIf<\/code>, \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u043d\u0435\u0440\u0430\u0432\u0435\u043d\u0441\u0442\u0432\u043e \u0441 \u0431\u043e\u043b\u044c\u0448\u0438\u043c \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u043e\u043c (big-M), \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a:<\/p>\n<pre><code>len[d] \u2264 136 \u00b7 rest[d]                          \/\/ \u0440\u0430\u0431\u043e\u0442\u0430\u044e \u2192 len = 0len[d] \u2264 len[d\u22121] + 1 + 136 \u00b7 (1 \u2212 rest[d])     \/\/ \u043e\u0442\u0434\u044b\u0445\u0430\u044e \u2192 \u043d\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0447\u0435\u0440\u0430 + 1<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u041f\u043e\u0434\u0441\u0442\u0430\u0432\u0438\u043c \u0432\u0435\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e. \u0411\u0435\u0440\u0443 \u0432 \u043e\u0442\u043f\u0443\u0441\u043a \u043f\u043e\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u0438\u043a \u043d\u0430 10%: <code>rest = 0,1<\/code>. \u041f\u0435\u0440\u0432\u043e\u0435 \u043d\u0435\u0440\u0430\u0432\u0435\u043d\u0441\u0442\u0432\u043e \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u0442 <code>len<\/code> \u0434\u043e 13,6. \u0412\u0442\u043e\u0440\u043e\u0435 \u043f\u0440\u0438 <code>1 \u2212 rest = 0,9<\/code> \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0437\u0430\u043f\u0440\u0435\u0449\u0430\u0435\u0442. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c: \u0434\u0435\u0441\u044f\u0442\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0434\u043d\u044f \u043e\u0442\u043f\u0443\u0441\u043a\u0430 \u0434\u0430\u0451\u0442 \u043a\u0443\u0441\u043e\u043a \u0434\u043b\u0438\u043d\u043e\u0439 13,6 \u0438 \u043f\u043e\u0447\u0442\u0438 27 \u043a\u0430\u0439\u0444\u0430. \u0412 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c (\u0446\u0435\u043b\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u043e\u043c \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435) \u043c\u0438\u0440\u0435 \u0437\u0430 \u0442\u0430\u043a\u043e\u0439 \u043a\u0443\u0441\u043e\u043a \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0431\u044b \u043e\u0442\u0434\u0430\u0442\u044c \u0434\u0435\u0441\u044f\u0442\u043e\u043a \u0434\u043d\u0435\u0439 \u043e\u0442\u043f\u0443\u0441\u043a\u0430. \u0412 \u0432\u0435\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c \u2014 \u0434\u0435\u0441\u044f\u0442\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u043f\u043e\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u0438\u043a\u0430. \u0420\u0430\u0437\u043c\u0430\u0436\u044c\u0442\u0435 14 \u0434\u043d\u0435\u0439 \u0442\u043e\u043d\u043a\u0438\u043c \u0441\u043b\u043e\u0435\u043c \u043f\u043e \u0432\u0441\u0435\u043c \u0431\u0443\u0434\u043d\u044f\u043c \u0433\u043e\u0434\u0430 \u2014 \u0438 \u043e\u0446\u0435\u043d\u043a\u0430 \u0443\u043b\u0435\u0442\u0430\u0435\u0442 \u0432 \u043a\u043e\u0441\u043c\u043e\u0441. \u041f\u043e \u0441\u0443\u0442\u0438 \u0441\u043e\u043b\u0432\u0435\u0440 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0442\u0443\u043f\u043e \u043f\u0435\u0440\u0435\u0431\u0438\u0440\u0430\u0442\u044c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b, \u043a\u0430\u043a \u043d\u0430\u0448 \u043a\u043e\u0434 \u0434\u043e \u043d\u0435\u0433\u043e.<\/p>\n<h3>\u041a\u0432\u0430\u0434\u0440\u0430\u0442\u0430 \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442<\/h3>\n<blockquote>\n<p><em>(\u0415\u0441\u0442\u044c \u043e\u0449\u0443\u0449\u0435\u043d\u0438\u0435, \u0447\u0442\u043e \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u043f\u043e\u043d\u044f\u043b \u043e\u0442\u0441\u044b\u043b\u043a\u0438 \u043a \u041c\u0430\u0442\u0440\u0438\u0446\u0435)<\/em><\/p>\n<\/blockquote>\n<p>\u041a\u0443\u0441\u043e\u043a \u043e\u0442\u0434\u044b\u0445\u0430 \u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u043e \u0437\u0430\u0434\u0430\u0451\u0442\u0441\u044f \u0441\u0432\u043e\u0438\u043c\u0438 <strong>\u0440\u0430\u0431\u043e\u0447\u0438\u043c\u0438<\/strong> \u0434\u043d\u044f\u043c\u0438: \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0435 \u0438 \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a\u0438 \u043f\u0440\u0438\u043b\u0438\u043f\u0430\u044e\u0442 \u0441\u0430\u043c\u0438. \u0417\u043d\u0430\u0447\u0438\u0442, \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u0432\u0441\u0435 \u043e\u0442\u0440\u0435\u0437\u043a\u0438 \u0440\u0430\u0431\u043e\u0447\u0438\u0445 \u0434\u043d\u0435\u0439 <code>W[k..m]<\/code> \u0434\u043b\u0438\u043d\u043e\u0439 \u0434\u043e 28, \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u0437\u043d\u0430\u0442\u044c \u0434\u043b\u0438\u043d\u0443 \u043a\u0443\u0441\u043a\u0430 \u2014 \u0430 \u0437\u043d\u0430\u0447\u0438\u0442, \u0438 \u043a\u0432\u0430\u0434\u0440\u0430\u0442. \u041a\u0432\u0430\u0434\u0440\u0430\u0442 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f <strong>\u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u043e\u0439<\/strong>.<\/p>\n<p>\u0422\u0440\u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0441\u0432\u044f\u0437\u044b\u0432\u0430\u044e\u0442 \u043a\u0443\u0441\u043a\u0438 \u0441 \u043e\u0442\u043f\u0443\u0441\u043a\u043e\u043c: \u0441\u043b\u0435\u0432\u0430 \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u0434\u0435\u043d\u044c \u043d\u0435 \u0432 \u043e\u0442\u043f\u0443\u0441\u043a\u0435, \u0441\u043f\u0440\u0430\u0432\u0430 \u0442\u043e\u0436\u0435, \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u0434\u0435\u043d\u044c \u043e\u0442\u043f\u0443\u0441\u043a\u0430 \u043d\u0430\u043a\u0440\u044b\u0442 \u0440\u043e\u0432\u043d\u043e \u043e\u0434\u043d\u0438\u043c \u043a\u0443\u0441\u043a\u043e\u043c. \u0412\u0441\u0451. \u0421\u043a\u043b\u0435\u0439\u043a\u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0442\u0441\u044f \u0441\u0430\u043c\u0438, \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u00ab\u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u2014 \u043d\u0435 \u043e\u0442\u0434\u044b\u0445\u00bb \u2014 \u0442\u043e\u0436\u0435 \u0441\u0430\u043c\u043e, \u0431\u0435\u0437 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439.<\/p>\n<pre><code class=\"fsharp\">let W = Cal.workdayslet possible (d: int) = rules.Single (Cal.date d) || mayChunk[d]let runs =    [| for k in 0 .. W.Length - 1 do         for m in k .. min (k + 27) (W.Length - 1) do             if W[k..m] |&gt; Array.forall possible then                 let from = if k &gt; 0 then W[k - 1] + 1 else 0                 let until = if m &lt; W.Length - 1 then W[m + 1] - 1 else Cal.days - 1                 k, m, until - from + 1, model.NewBoolVar $\"run{k}_{m}\" |]do    let covering = Array.init W.Length (fun _ -&gt; ResizeArray&lt;ILiteral&gt;())    for k, m, _, run in runs do        for i in k .. m do covering[i].Add run        if k &gt; 0 then model.AddAtMostOne(Seq.append takes[W[k - 1]] [ run ]) |&gt; ignore             \/\/ \u0441\u043b\u0435\u0432\u0430 \u043f\u0443\u0441\u0442\u043e        if m &lt; W.Length - 1 then model.AddAtMostOne(Seq.append takes[W[m + 1]] [ run ]) |&gt; ignore  \/\/ \u0441\u043f\u0440\u0430\u0432\u0430 \u043f\u0443\u0441\u0442\u043e    for i in 0 .. W.Length - 1 do                                    \/\/ \u0440\u043e\u0432\u043d\u043e \u043e\u0434\u0438\u043d \u043a\u0443\u0441\u043e\u043a \u043d\u0430 \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u0434\u0435\u043d\u044c        model.AddLinearConstraint(LinearExpr.Sum covering[i] - LinearExpr.Sum takes[W[i]], 0L, 0L) |&gt; ignorelet joy = LinearExpr.WeightedSum(seq { for _, _, _, run in runs -&gt; run }, seq { for _, _, len, _ in runs -&gt; int64 (len * len) })<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u041f\u043b\u044e\u0441 6 538 \u043d\u043e\u0432\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u2014 \u043f\u043e \u043e\u0434\u043d\u043e\u0439 \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0439 \u043a\u0443\u0441\u043e\u043a. \u0418 \u0442\u043e, \u0447\u0442\u043e \u043d\u0435 \u0434\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u043b\u043e\u0441\u044c \u0437\u0430 \u043c\u0438\u043d\u0443\u0442\u0443, \u0434\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0437\u0430 11\u201336 \u0441\u0435\u043a\u0443\u043d\u0434 \u2014 \u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u0442\u0430\u0439\u043c\u0438\u043d\u0433\u0438 \u043d\u0438\u0436\u0435.<\/p>\n<p>\u0423 \u0442\u0430\u043a\u043e\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0430 \u043d\u0435\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b, \u0447\u0442\u043e LP-\u043e\u0441\u043b\u0430\u0431\u043b\u0435\u043d\u0438\u0435 \u0432\u0440\u0435\u0442.  \u0415\u0441\u043b\u0438 <code>run[k, m] = 0,1<\/code>, \u0442\u043e \u0438 \u043a\u0430\u0439\u0444\u0430 \u043e\u043d \u0434\u0430\u0451\u0442 \u0440\u043e\u0432\u043d\u043e 0,1 \u00b7 len\u00b2, \u0438 \u0431\u0443\u0434\u043d\u0438 \u043f\u043e\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 0,1. \u0414\u0440\u043e\u0431\u043d\u044b\u0439 \u043f\u043b\u0430\u043d \u043d\u0435 \u0443\u043c\u0435\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u043f\u043b\u0430\u0442\u0438\u0442. \u041e\u0441\u043b\u0430\u0431\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u0447\u0442\u0438 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0441 \u043f\u0440\u0430\u0432\u0434\u043e\u0439 \u2014 \u0438 \u0434\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u043e \u0441\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0437\u0430 \u0441\u0435\u043a\u0443\u043d\u0434\u044b.<\/p>\n<p><strong>\u0411\u043e\u043b\u044c\u0448\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u2014 \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435.<\/strong> \u0414\u043b\u044f \u0441\u043e\u043b\u0432\u0435\u0440\u0430 \u0432\u0430\u0436\u043d\u043e \u043d\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445, \u0430 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439. \u041d\u0435 <em>\u0447\u0442\u043e<\/em> \u0432\u044b \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0435, \u0430 <em>\u043a\u0430\u043a<\/em>. \u042d\u0442\u043e \u0441\u0430\u043c\u044b\u0439 \u0446\u0435\u043d\u043d\u044b\u0439 \u0443\u0440\u043e\u043a \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438.<\/p>\n<h3>\u041d\u0435 \u0431\u0435\u0440\u0443 \u043e\u0442\u043f\u0443\u0441\u043a \u0432 \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0435<\/h3>\n<p>\u0417\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u043b\u0430\u0437\u0435\u0439\u043a\u0443. \u041c\u043e\u0434\u0435\u043b\u044c \u043d\u0435 \u0442\u0440\u043e\u0433\u0430\u0435\u043c \u2014 \u043c\u0435\u043d\u044f\u0435\u043c \u043f\u0440\u0435\u0434\u0438\u043a\u0430\u0442:<\/p>\n<pre><code class=\"fsharp\">let workday (x: DateOnly) = not (Cal.isOff x)let weekdays = show \"\u0414\u0435\u043d\u044c\u0433\u0438 \u0431\u0435\u0437 \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0445\" (solve { anyDays with Single = workday } (fun m -&gt; m.MoneyThenJoy))<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p><code>MoneyThenJoy<\/code> \u2014 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0434\u0435\u043d\u044c\u0433\u0438, \u043f\u0440\u0438 \u0440\u0430\u0432\u043d\u044b\u0445 \u0434\u0435\u043d\u044c\u0433\u0430\u0445 \u2014 \u043a\u0430\u0439\u0444. \u0417\u0430\u0447\u0435\u043c? \u0411\u0443\u0434\u043d\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u043c\u0435\u0441\u044f\u0446\u0430 \u0441\u0442\u043e\u044f\u0442 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e, \u043f\u043b\u0430\u043d\u043e\u0432 \u0441 \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c\u043e\u043c \u0434\u0435\u043d\u0435\u0433 \u043c\u043d\u043e\u0433\u043e, \u0438 \u0434\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u043b\u0435\u0447\u044c \u0432\u0440\u0430\u0437\u043d\u043e\u0431\u043e\u0439, \u0447\u0435\u0440\u0435\u0437 \u0434\u0435\u043d\u044c. \u0421\u043e\u043b\u0432\u0435\u0440\u0443 \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e, \u043c\u043d\u0435 \u2014 \u043d\u0435\u0442.<\/p>\n<p>\u041d\u043e \u0446\u0435\u043b\u044c \u0443 CP-SAT \u043e\u0434\u043d\u0430. \u0412\u044b\u0445\u043e\u0434 \u2014 \u0443\u043f\u0430\u043a\u043e\u0432\u0430\u0442\u044c \u0434\u0432\u0435 \u0446\u0435\u043b\u0438 \u0432 \u043e\u0434\u043d\u043e \u0447\u0438\u0441\u043b\u043e, \u043a\u0430\u043a \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u043d\u0430\u044f \u043a\u043d\u0438\u0433\u0430 \u0441\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u0442 \u043f\u043e \u0444\u0430\u043c\u0438\u043b\u0438\u0438, \u0430 \u043f\u0440\u0438 \u0440\u0430\u0432\u043d\u043e\u0439 \u0444\u0430\u043c\u0438\u043b\u0438\u0438 \u2014 \u043f\u043e \u0438\u043c\u0435\u043d\u0438: <code>\u0434\u0435\u043d\u044c\u0433\u0438 \u00d7 N + \u043a\u0430\u0439\u0444<\/code>. \u0415\u0441\u043b\u0438 N \u0431\u043e\u043b\u044c\u0448\u0435 \u043b\u044e\u0431\u043e\u0433\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0433\u043e \u043a\u0430\u0439\u0444\u0430, \u0442\u043e \u043a\u043e\u043f\u0435\u0439\u043a\u0430 \u0434\u0435\u043d\u0435\u0433 \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u0435\u0440\u0435\u0432\u0435\u0441\u0438\u0442 \u0432\u0435\u0441\u044c \u043a\u0430\u0439\u0444, \u0438 \u043a\u0430\u0439\u0444 \u0440\u0435\u0448\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u0440\u0430\u0432\u043d\u044b\u0445 \u0434\u0435\u043d\u044c\u0433\u0430\u0445.<\/p>\n<p>\u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u043d\u0430\u0439\u0442\u0438 N. \u041f\u043e\u0434\u0431\u0438\u0440\u0430\u0442\u044c \u043d\u0430 \u0433\u043b\u0430\u0437 \u043d\u0435 \u043d\u0430\u0434\u043e \u2014 \u0435\u0433\u043e \u0434\u0430\u0451\u0442 \u043a\u0430\u043b\u0435\u043d\u0434\u0430\u0440\u044c: \u043e\u0442\u0434\u044b\u0445\u0430\u044e\u0449\u0438\u0445 \u0434\u043d\u0435\u0439 \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c 136 (28 \u043e\u0442\u043f\u0443\u0441\u043a\u0430 + 108 \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0445 \u0438 \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a\u043e\u0432), \u0437\u043d\u0430\u0447\u0438\u0442, \u043a\u0430\u0439\u0444 \u043d\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 136\u00b2. \u0411\u0435\u0440\u0451\u043c N = 136\u00b2 + 1. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u044f \u0432\u0437\u044f\u043b \u0432\u0435\u0441 \u0441 \u0437\u0430\u043f\u0430\u0441\u043e\u043c \u2014 \u00ab\u0434\u043d\u0435\u0439 \u0432 \u0433\u043e\u0434\u0443\u00b2\u00bb. \u0418 \u0441\u043e\u043b\u0432\u0435\u0440 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043b \u0434\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043e\u043f\u0442\u0438\u043c\u0443\u043c \u0437\u0430 \u0434\u0432\u0435 \u043c\u0438\u043d\u0443\u0442\u044b: \u043b\u0438\u0448\u043d\u0438\u0435 \u043f\u043e\u0440\u044f\u0434\u043a\u0438 \u0432 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u0430\u0445 \u0435\u043c\u0443 \u0442\u043e\u043b\u044c\u043a\u043e \u043c\u0435\u0448\u0430\u044e\u0442. \u041c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u044b\u0439 \u0432\u0435\u0441 \u2014 \u043b\u0443\u0447\u0448\u0438\u0439.<\/p>\n<p>13,3 \u0441\u0435\u043a\u0443\u043d\u0434\u044b. \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442: <strong>\u22129 885 \u20bd \u0438 36 \u0434\u043d\u0435\u0439 \u043e\u0442\u0434\u044b\u0445\u0430 \u043f\u043e\u0434\u0440\u044f\u0434<\/strong>, \u0441 21 \u0444\u0435\u0432\u0440\u0430\u043b\u044f \u043f\u043e 28 \u043c\u0430\u0440\u0442\u0430.<\/p>\n<p>\u041f\u043e\u0447\u0435\u043c\u0443 \u043c\u0430\u0440\u0442? \u041f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0431\u0443\u0434\u043d\u0438\u0439 \u0434\u0435\u043d\u044c \u0432 \u043c\u0430\u0440\u0442\u0435 \u2014 \u0441\u0430\u043c\u044b\u0439 \u0434\u0435\u0448\u0451\u0432\u044b\u0439 \u0432 \u0433\u043e\u0434\u0443. \u0421\u043e\u043b\u0432\u0435\u0440 \u043d\u0435 \u043b\u044e\u0431\u0438\u0442 \u043c\u043e\u0440\u0435 \u0432 \u043c\u0430\u0440\u0442\u0435. \u0421\u043e\u043b\u0432\u0435\u0440 \u043b\u044e\u0431\u0438\u0442 \u0441\u043a\u0438\u0434\u043a\u0438. \u0410 \u043a\u0430\u0439\u0444 \u0441\u043a\u043b\u0435\u0438\u043b \u0434\u043d\u0438 \u0432 \u043e\u0434\u043d\u0443 \u043f\u043e\u043b\u043e\u0441\u0443.<\/p>\n<h2>\u0425\u043e\u0447\u0443 \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c \u043a\u0430\u0439\u0444\u0430<\/h2>\n<pre><code class=\"fsharp\">let joyPlan = show \"\u041a\u0430\u0439\u0444\" (solve anyDays (fun m -&gt; m.JoyThenMoney))<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>20,1 \u0441\u0435\u043a\u0443\u043d\u0434\u044b. <strong>39 \u0434\u043d\u0435\u0439 \u043f\u043e\u0434\u0440\u044f\u0434<\/strong>, \u0441 6 \u0444\u0435\u0432\u0440\u0430\u043b\u044f \u043f\u043e 16 \u043c\u0430\u0440\u0442\u0430. \u041a\u0430\u0439\u0444 1 521. \u0426\u0435\u043d\u0430 \u2014 <strong>\u221242 182 \u20bd.<\/strong><\/p>\n<p>\u041a\u0430\u0439\u0444 \u0434\u043e\u0440\u043e\u0433\u043e\u0432\u0430\u0442.<\/p>\n<h2>\u041a\u0430\u0439\u0444 \u0432 \u0431\u044e\u0434\u0436\u0435\u0442\u0435<\/h2>\n<p>\u0425\u043e\u0447\u0443 \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c \u043a\u0430\u0439\u0444\u0430, \u043d\u043e \u043f\u043e\u0442\u0435\u0440\u044f\u0442\u044c \u043d\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 9 885 \u20bd \u2014 \u043a\u0430\u043a \u0432 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0435 \u00ab\u0431\u0435\u0437 \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0445\u00bb. \u0412\u044b\u0445\u043e\u0434\u043d\u044b\u0435 \u0431\u0440\u0430\u0442\u044c \u043c\u043e\u0436\u043d\u043e.<\/p>\n<p>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442: \u0442\u0435 \u0436\u0435 36 \u0434\u043d\u0435\u0439, \u0442\u0435 \u0436\u0435 \u0434\u0435\u043d\u044c\u0433\u0438. \u0414\u043e\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u043e\u043f\u0442\u0438\u043c\u0443\u043c \u0437\u0430 31,7 \u0441\u0435\u043a\u0443\u043d\u0434\u044b. \u041f\u043e\u0447\u0435\u043c\u0443? \u0421\u0443\u0431\u0431\u043e\u0442\u0430 \u0440\u0430\u0434\u0438 \u0434\u0435\u043d\u0435\u0433 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u043c\u0435\u0441\u0442\u043e \u0431\u0443\u0434\u043d\u044f \u0432 \u0434\u043b\u0438\u043d\u043d\u043e\u043c \u043a\u0443\u0441\u043a\u0435: 35 \u0434\u043d\u0435\u0439 \u0432\u043c\u0435\u0441\u0442\u043e 36 \u2014 \u043c\u0438\u043d\u0443\u0441 71 \u043a\u0430\u0439\u0444. \u041d\u0435 \u043e\u043a\u0443\u043f\u0430\u0435\u0442\u0441\u044f.<\/p>\n<p>\u041b\u0430\u0434\u043d\u043e, \u0434\u043e \u221220 000 \u20bd. 32,5 \u0441\u0435\u043a\u0443\u043d\u0434\u044b \u2014 <strong>37 \u0434\u043d\u0435\u0439<\/strong>, \u221216 703 \u20bd. <strong>37-\u0439 \u0434\u0435\u043d\u044c \u0441\u0442\u043e\u0438\u0442 6 818 \u20bd.<\/strong> \u0417\u0430\u043f\u043e\u043c\u043d\u0438\u043c \u044d\u0442\u0443 \u0446\u0438\u0444\u0440\u0443.<\/p>\n<h2>\u0425\u043e\u0447\u0443 \u043a \u043c\u043e\u0440\u044e<\/h2>\n<p>\u041c\u0430\u0440\u0442 \u2014 \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043f\u043e \u0434\u0435\u043d\u044c\u0433\u0430\u043c, \u043d\u043e \u044f \u0445\u043e\u0447\u0443 \u043b\u0435\u0442\u043e\u043c. \u041e\u0434\u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0430:<\/p>\n<pre><code class=\"fsharp\">let isSummer (x: DateOnly) = x.Month &gt;= 5 &amp;&amp; x.Month &lt;= 9let summer = { anyDays with Chunk = isSummer }<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0426\u0435\u043b\u044c<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u041b\u044e\u0431\u044b\u0435 \u0434\u043d\u0438<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0421\u043e\u043b\u0432\u0435\u0440<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u041b\u0435\u0442\u043e<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0421\u043e\u043b\u0432\u0435\u0440<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0414\u0435\u043d\u044c\u0433\u0438<\/p>\n<\/td>\n<td>\n<p align=\"left\">+85 570 \u20bd, \u043e\u0442\u0434\u044b\u0445 16 \u0434\u043d\u0435\u0439<\/p>\n<\/td>\n<td>\n<p align=\"left\">11,3 \u0441<\/p>\n<\/td>\n<td>\n<p align=\"left\">+80 187 \u20bd, \u043e\u0442\u0434\u044b\u0445 16 \u0434\u043d\u0435\u0439<\/p>\n<\/td>\n<td>\n<p align=\"left\">4,4 \u0441<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0414\u0435\u043d\u044c\u0433\u0438 \u0431\u0435\u0437 \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0445<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u22129 885 \u20bd, 36 \u0434\u043d\u0435\u0439 \u043f\u043e\u0434\u0440\u044f\u0434<\/p>\n<\/td>\n<td>\n<p align=\"left\">13,3 \u0441<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u221215 268 \u20bd, 34 \u0434\u043d\u044f \u043f\u043e\u0434\u0440\u044f\u0434<\/p>\n<\/td>\n<td>\n<p align=\"left\">8,3 \u0441<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041a\u0430\u0439\u0444<\/p>\n<\/td>\n<td>\n<p align=\"left\">39 \u0434\u043d\u0435\u0439 \u043f\u043e\u0434\u0440\u044f\u0434, \u221242 182 \u20bd<\/p>\n<\/td>\n<td>\n<p align=\"left\">20,1 \u0441<\/p>\n<\/td>\n<td>\n<p align=\"left\">38 \u0434\u043d\u0435\u0439 \u043f\u043e\u0434\u0440\u044f\u0434, \u221234 287 \u20bd<\/p>\n<\/td>\n<td>\n<p align=\"left\">11,8 \u0441<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041a\u0430\u0439\u0444 \u0432 \u0431\u044e\u0434\u0436\u0435\u0442\u0435 \u00ab\u0431\u0435\u0437 \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0445\u00bb<\/p>\n<\/td>\n<td>\n<p align=\"left\">36 \u0434\u043d\u0435\u0439, \u22129 885 \u20bd<\/p>\n<\/td>\n<td>\n<p align=\"left\">31,7 \u0441<\/p>\n<\/td>\n<td>\n<p align=\"left\">34 \u0434\u043d\u044f, \u221215 268 \u20bd<\/p>\n<\/td>\n<td>\n<p align=\"left\">21,1 \u0441<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041a\u0430\u0439\u0444 \u043f\u0440\u0438 \u043f\u043e\u0442\u0435\u0440\u0435 \u0434\u043e 20 000 \u20bd<\/p>\n<\/td>\n<td>\n<p align=\"left\">37 \u0434\u043d\u0435\u0439, \u221216 703 \u20bd<\/p>\n<\/td>\n<td>\n<p align=\"left\">32,5 \u0441<\/p>\n<\/td>\n<td>\n<p align=\"left\">34 \u0434\u043d\u044f, \u221215 268 \u20bd<\/p>\n<\/td>\n<td>\n<p align=\"left\">36,3 \u0441<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0412\u0441\u0435 \u0434\u0435\u0441\u044f\u0442\u044c \u043e\u043f\u0442\u0438\u043c\u0443\u043c\u043e\u0432 \u0434\u043e\u043a\u0430\u0437\u0430\u043d\u044b. \u0421\u0430\u043c\u0430\u044f \u0434\u043e\u043b\u0433\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u2014 36 \u0441\u0435\u043a\u0443\u043d\u0434. \u041b\u0435\u0442\u043e \u0440\u0435\u0448\u0430\u0435\u0442\u0441\u044f \u0431\u044b\u0441\u0442\u0440\u0435\u0435: \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 14-\u0434\u043d\u0435\u0432\u043d\u043e\u0433\u043e \u043a\u0443\u0441\u043a\u0430 \u043c\u0435\u043d\u044c\u0448\u0435, \u0438\u0441\u043a\u0430\u0442\u044c \u043f\u0440\u043e\u0449\u0435. \u0410 \u0434\u043e\u043b\u044c\u0448\u0435 \u0432\u0441\u0435\u0433\u043e \u0441\u043e\u043b\u0432\u0435\u0440 \u0434\u0443\u043c\u0430\u0435\u0442, \u043a\u043e\u0433\u0434\u0430 \u0435\u0441\u0442\u044c \u0431\u044e\u0434\u0436\u0435\u0442: \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u043d\u0430 \u0434\u0435\u043d\u044c\u0433\u0438 \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u0435\u0442 \u0434\u0432\u0435 \u0446\u0435\u043b\u0438 \u043b\u0431\u0430\u043c\u0438.<\/p>\n<p>\u0421\u043e\u043b\u0432\u0435\u0440 \u0441\u0442\u0430\u0432\u0438\u0442 \u043a\u0443\u0441\u043e\u043a \u043d\u0430 2\u201316 \u043c\u0430\u044f \u2014 \u043b\u043e\u0432\u0438\u0442 9-\u0435 \u0438 \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0451\u043d\u043d\u043e\u0435 10-\u0435. \u00ab\u041b\u0435\u0442\u043e\u00bb \u043f\u043e \u0432\u0435\u0440\u0441\u0438\u0438 \u0441\u043e\u043b\u0432\u0435\u0440\u0430 \u2014 \u044d\u0442\u043e \u043c\u0430\u0439\u0441\u043a\u0438\u0435. \u0418 \u0441\u0442\u043e\u0438\u0442 \u043e\u043d\u043e 5 383 \u20bd \u0441\u0432\u0435\u0440\u0445\u0443.<\/p>\n<p>\u0425\u043e\u0447\u0443 \u0442\u043e\u043b\u044c\u043a\u043e \u0430\u0432\u0433\u0443\u0441\u0442? <code>Chunk = fun x -&gt; x.Month = 8<\/code>. \u041f\u044f\u0442\u044c \u0441\u0435\u043a\u0443\u043d\u0434 \u2014 \u043a\u0443\u0441\u043e\u043a 16\u201329 \u0430\u0432\u0433\u0443\u0441\u0442\u0430, +75 163 \u20bd. \u041c\u043e\u0440\u0435, \u0434\u0430\u0447\u0430, \u0441\u0435\u0441\u0441\u0438\u044f, \u00ab\u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0435 \u0432 \u043e\u0442\u0447\u0451\u0442\u043d\u044b\u0439 \u043f\u0435\u0440\u0438\u043e\u0434\u00bb \u2014 \u0432\u0441\u0451 \u044d\u0442\u043e \u043f\u0440\u0435\u0434\u0438\u043a\u0430\u0442\u044b. <strong>\u041c\u043e\u0434\u0435\u043b\u044c \u043d\u0435 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0438 \u043d\u0430 \u0441\u0442\u0440\u043e\u0447\u043a\u0443.<\/strong> \u0412\u043e\u0442 \u0440\u0430\u0434\u0438 \u044d\u0442\u043e\u0433\u043e \u0432\u0441\u0451 \u0438 \u0437\u0430\u0442\u0435\u0432\u0430\u043b\u043e\u0441\u044c.<\/p>\n<h2>\u0412\u0441\u0435 \u043f\u043b\u0430\u043d\u044b \u043d\u0430 \u043e\u0434\u043d\u043e\u0439 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0435<\/h2>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/7a\/58\/b3\/7a58b3bd164631244a8cffa184c3bed9.png\" alt=\"\u041f\u043b\u0430\u043d\u044b \u043e\u0442\u043f\u0443\u0441\u043a\u0430 \u043d\u0430 2027\" title=\"\u041f\u043b\u0430\u043d\u044b \u043e\u0442\u043f\u0443\u0441\u043a\u0430 \u043d\u0430 2027\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/7a\/58\/b3\/7a58b3bd164631244a8cffa184c3bed9.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/7a\/58\/b3\/7a58b3bd164631244a8cffa184c3bed9.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041f\u043b\u0430\u043d\u044b \u043e\u0442\u043f\u0443\u0441\u043a\u0430 \u043d\u0430 2027<\/figcaption><\/div>\n<\/figure>\n<p>\u0421\u0438\u043d\u0438\u0439 \u2014 \u0431\u0443\u0434\u043d\u0438 \u0432 \u043e\u0442\u043f\u0443\u0441\u043a\u0435, \u0433\u043e\u043b\u0443\u0431\u043e\u0439 \u2014 \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0435 \u0432\u043d\u0443\u0442\u0440\u0438 \u043e\u0442\u0434\u044b\u0445\u0430, \u043e\u0440\u0430\u043d\u0436\u0435\u0432\u044b\u0439 \u2014 \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0435, \u043f\u0440\u043e\u0434\u0430\u043d\u043d\u044b\u0435 \u0440\u0430\u0434\u0438 \u0434\u0435\u043d\u0435\u0433. \u0414\u0435\u043d\u0435\u0436\u043d\u044b\u0435 \u043f\u043b\u0430\u043d\u044b \u0440\u0430\u0441\u0441\u044b\u043f\u0430\u044e\u0442\u0441\u044f \u043e\u0440\u0430\u043d\u0436\u0435\u0432\u043e\u0439 \u0441\u044b\u043f\u044c\u044e \u043f\u043e \u0441\u0443\u0431\u0431\u043e\u0442\u0430\u043c. \u0412\u0441\u0451 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0432 \u043e\u0434\u043d\u0443 \u0441\u0438\u043d\u044e\u044e \u043f\u043e\u043b\u043e\u0441\u0443.<\/p>\n<h2>\u0421\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u043e\u0438\u0442 \u043a\u0430\u0439\u0444<\/h2>\n<p>\u0421\u0430\u043c\u043e\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435. \u041f\u0440\u043e\u0433\u043e\u043d\u044f\u0435\u043c \u0431\u044e\u0434\u0436\u0435\u0442 \u043e\u0442 +80 000 \u0434\u043e \u221245 000 \u20bd \u0438 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0449\u0435\u043c \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c \u043a\u0430\u0439\u0444\u0430. 28 \u0437\u0430\u0434\u0430\u0447, \u043a\u0430\u0436\u0434\u0430\u044f \u2014 \u043e\u0442 \u0434\u043e\u043b\u0435\u0439 \u0441\u0435\u043a\u0443\u043d\u0434\u044b \u0434\u043e 93 \u0441\u0435\u043a\u0443\u043d\u0434, \u0432\u0441\u0435 \u043e\u043f\u0442\u0438\u043c\u0443\u043c\u044b \u0434\u043e\u043a\u0430\u0437\u0430\u043d\u044b:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/7f\/82\/a4\/7f82a46c50bc25662a437b59882db0c2.png\" alt=\"\u0421\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u043e\u0438\u0442 \u043a\u0430\u0439\u0444\" title=\"\u0421\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u043e\u0438\u0442 \u043a\u0430\u0439\u0444\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/7f\/82\/a4\/7f82a46c50bc25662a437b59882db0c2.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/7f\/82\/a4\/7f82a46c50bc25662a437b59882db0c2.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0421\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u043e\u0438\u0442 \u043a\u0430\u0439\u0444<\/figcaption><\/div>\n<\/figure>\n<ul>\n<li>\n<p><strong>\u0411\u0435\u0437 \u043f\u043e\u0442\u0435\u0440\u044c \u2014 32 \u0434\u043d\u044f \u043f\u043e\u0434\u0440\u044f\u0434.<\/strong> \u0411\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e. \u041f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0440\u0430\u0441\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0434\u0430\u0442\u044b.<\/p>\n<\/li>\n<li>\n<p><strong>\u041b\u0443\u0447\u0448\u0438\u0435 10 \u0442\u044b\u0441\u044f\u0447 \u0432 \u0436\u0438\u0437\u043d\u0438 \u2014 \u0441\u0440\u0430\u0437\u0443 \u0437\u0430 \u043d\u0443\u043b\u0451\u043c<\/strong>: \u22129 885 \u20bd \u0434\u0430\u044e\u0442 36 \u0434\u043d\u0435\u0439. +4 \u0434\u043d\u044f \u0437\u0430 \u0434\u0435\u0441\u044f\u0442\u043a\u0443.<\/p>\n<\/li>\n<li>\n<p><strong>\u0414\u0430\u043b\u044c\u0448\u0435 \u2014 \u0433\u0440\u0430\u0431\u0451\u0436.<\/strong> 37 \u0434\u043d\u0435\u0439 \u2014 \u043f\u0440\u0438 \u221220 \u0442\u044b\u0441\u044f\u0447\u0430\u0445, 38 \u2014 \u043f\u0440\u0438 \u221230, 39 \u2014 \u043f\u0440\u0438 \u221245.<\/p>\n<\/li>\n<li>\n<p><strong>\u041b\u0435\u0442\u043e<\/strong> \u2014 \u0434\u043e \u0442\u0440\u0451\u0445 \u0434\u043d\u0435\u0439 \u043c\u0435\u043d\u044c\u0448\u0435 \u043f\u0440\u0438 \u0442\u043e\u043c \u0436\u0435 \u0431\u044e\u0434\u0436\u0435\u0442\u0435, \u043f\u043e\u0442\u043e\u043b\u043e\u043a \u2014 38 \u0434\u043d\u0435\u0439.<\/p>\n<\/li>\n<\/ul>\n<p>\u0413\u043b\u0430\u0437\u0430 \u2014 \u0441\u0432\u0438\u0434\u0435\u0442\u0435\u043b\u044c \u043d\u0435\u043d\u0430\u0434\u0451\u0436\u043d\u044b\u0439, \u043d\u0443\u0436\u0435\u043d \u0432\u0442\u043e\u0440\u043e\u0439. \u0412\u043e\u0437\u044c\u043c\u0451\u043c \u0442\u043e\u0447\u043a\u0438, \u0433\u0434\u0435 \u044f \u0443\u0436\u0435 \u0442\u0435\u0440\u044f\u044e \u0434\u0435\u043d\u044c\u0433\u0438, \u0438 \u043f\u0440\u043e\u0432\u0435\u0434\u0451\u043c \u0447\u0435\u0440\u0435\u0437 \u043d\u0438\u0445 \u043f\u0430\u0440\u0430\u0431\u043e\u043b\u0443 \u043c\u0435\u0442\u043e\u0434\u043e\u043c \u043d\u0430\u0438\u043c\u0435\u043d\u044c\u0448\u0438\u0445 \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043e\u0432 (<code>Fit.Polynomial<\/code> \u0438\u0437 <a href=\"https:\/\/numerics.mathdotnet.com\/\" rel=\"noopener nofollow\">Math.NET<\/a>): \u0434\u043d\u0438 \u2248 32,43 + 0,315\u00b7x \u2212 0,004\u00b7x\u00b2, \u0433\u0434\u0435 x \u2014 \u043f\u043e\u0442\u0435\u0440\u044f \u0432 \u0442\u044b\u0441\u044f\u0447\u0430\u0445. R\u00b2 = 0,95 \u2014 \u043f\u0430\u0440\u0430\u0431\u043e\u043b\u0430 \u043e\u0431\u044a\u044f\u0441\u043d\u044f\u0435\u0442 95% \u0440\u0430\u0437\u0431\u0440\u043e\u0441\u0430 \u0442\u043e\u0447\u0435\u043a, \u0442\u043e \u0435\u0441\u0442\u044c \u043a\u0440\u0438\u0432\u0430\u044f \u0438 \u043f\u0440\u0430\u0432\u0434\u0430 \u0437\u0430\u0433\u0438\u0431\u0430\u0435\u0442\u0441\u044f, \u0430 \u043d\u0435 \u043c\u0435\u0440\u0435\u0449\u0438\u0442\u0441\u044f.<\/p>\n<p>\u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u043d\u0430\u044f \u043f\u0430\u0440\u0430\u0431\u043e\u043b\u044b \u2014 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u043d\u0435\u0439 \u0434\u0430\u0451\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u0442\u044b\u0441\u044f\u0447\u0430. \u041f\u0435\u0440\u0435\u0432\u0435\u0440\u043d\u0451\u043c \u0435\u0451 \u2014 \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0446\u0435\u043d\u0443 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0434\u043d\u044f: \u0443 \u043d\u0443\u043b\u044f ~3 200 \u20bd, \u043d\u0430 \u221220 \u0442\u044b\u0441\u044f\u0447\u0430\u0445 ~6 500 \u20bd, \u0443 \u0441\u0430\u043c\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043b\u043a\u0430 \u2014 \u043f\u043e\u0434 13 600 \u20bd.<\/p>\n<pre><code class=\"fsharp\">#r \"nuget: MathNet.Numerics, 5.0.0\"let coef = Fit.Polynomial(xs, ys, 2)for x in [ 0.0; 10.0; 20.0; 30.0 ] do    printfn $\"\u043f\u043e\u0442\u0435\u0440\u044f {x:F0} \u0442\u044b\u0441 \u20bd: \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0434\u0435\u043d\u044c \u043e\u0442\u0434\u044b\u0445\u0430 \u2248 {1000.0 \/ (coef[1] + 2.0 * coef[2] * x):F0} \u20bd\"<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/de\/0a\/f2\/de0af2008a1485606b8723af4600f676.png\" alt=\"\u041e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u043e\u0442\u043f\u0443\u0441\u043a 2027\" title=\"\u041e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u043e\u0442\u043f\u0443\u0441\u043a 2027\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/de\/0a\/f2\/de0af2008a1485606b8723af4600f676.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/de\/0a\/f2\/de0af2008a1485606b8723af4600f676.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u043e\u0442\u043f\u0443\u0441\u043a 2027<\/figcaption><\/div>\n<\/figure>\n<p><strong>\u00ab\u041c\u0430\u043a\u0441\u0438\u043c\u0443\u043c \u043a\u0430\u0439\u0444\u0430\u00bb \u2014 \u043f\u043b\u043e\u0445\u0430\u044f \u0446\u0435\u043b\u044c.<\/strong> \u0425\u043e\u0440\u043e\u0448\u0430\u044f \u0446\u0435\u043b\u044c \u2014 \u0442\u043e\u0447\u043a\u0430, \u0433\u0434\u0435 \u043a\u0440\u0438\u0432\u0430\u044f \u0437\u0430\u0433\u0438\u0431\u0430\u0435\u0442\u0441\u044f. \u0423 \u043c\u0435\u043d\u044f \u044d\u0442\u043e \u221210 \u0442\u044b\u0441\u044f\u0447 \u0438 36 \u0434\u043d\u0435\u0439 \u043f\u043e\u0434\u0440\u044f\u0434.<\/p>\n<h2>\u0412\u044b\u0432\u043e\u0434\u044b<\/h2>\n<ol>\n<li>\n<p><strong>\u0421\u043e\u043b\u0432\u0435\u0440 \u043d\u0430\u0439\u0434\u0451\u0442 \u043b\u0430\u0437\u0435\u0439\u043a\u0443 \u043b\u0443\u0447\u0448\u0435 \u0432\u0430\u0441.<\/strong> \u0415\u0441\u043b\u0438 \u043e\u043d \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u043b \u0432\u0430\u0441 \u0432 \u043e\u0442\u043f\u0443\u0441\u043a \u043f\u043e \u0441\u0443\u0431\u0431\u043e\u0442\u0430\u043c \u2014 \u044d\u0442\u043e \u0431\u0430\u0433 \u0432\u0430\u0448\u0438\u0445 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439, \u0430 \u043d\u0435 \u0441\u043e\u043b\u0432\u0435\u0440\u0430.<\/p>\n<\/li>\n<li>\n<p><strong>\u0424\u043e\u0440\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u043a\u0430 \u0432\u0430\u0436\u043d\u0435\u0435 \u0436\u0435\u043b\u0435\u0437\u0430.<\/strong> \u041e\u0434\u043d\u0430 \u0438 \u0442\u0430 \u0436\u0435 \u0441\u0443\u043c\u043c\u0430 \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043e\u0432: \u00ab\u043d\u0435 \u0434\u043e\u043a\u0430\u0437\u0430\u043b \u0437\u0430 \u043c\u0438\u043d\u0443\u0442\u0443\u00bb \u043f\u0440\u043e\u0442\u0438\u0432 \u00ab\u0434\u043e\u043a\u0430\u0437\u0430\u043b \u0437\u0430 11\u201336 \u0441\u0435\u043a\u0443\u043d\u0434\u00bb.<\/p>\n<\/li>\n<li>\n<p><strong>\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0439\u0442\u0435 \u0441\u043e\u043b\u0432\u0435\u0440 \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u043c \u043a\u043e\u0434\u043e\u043c.<\/strong> \u0412\u0441\u0435\u0433\u0434\u0430.<\/p>\n<\/li>\n<li>\n<p><strong>CP-SAT \u2014 \u043e\u0431\u044b\u0447\u043d\u044b\u0439 NuGet-\u043f\u0430\u043a\u0435\u0442.<\/strong> \u0411\u0443\u043b\u0435\u0432\u044b \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435, <code>AddExactlyOne<\/code>, <code>AddAtMostOne<\/code>, \u043b\u0438\u043d\u0435\u0439\u043d\u0430\u044f \u0446\u0435\u043b\u044c. \u041d\u0438\u043a\u0430\u043a\u043e\u0439 \u043c\u0430\u0433\u0438\u0438.<\/p>\n<\/li>\n<\/ol>\n<p>\u0421\u043e\u043b\u0432\u0435\u0440 \u043d\u0430\u0448\u0451\u043b \u043e\u043f\u0442\u0438\u043c\u0443\u043c. \u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u043e\u0434\u043d\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043d\u0430 F# \u043d\u0435 \u0432\u044b\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f:<\/p>\n<pre><code class=\"fsharp\">model.Add(manager.Approves plan)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0412\u0441\u0435 \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u044b \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Plotly.NET.Interactive<\/p>\n<pre><code class=\"fsharp\">#r \"nuget: Plotly.NET.Interactive, 5.0.0\"<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u041a\u043e\u0434 \u2014 \u0432 \u043d\u043e\u0443\u0442\u0431\u0443\u043a\u0435 <a href=\"https:\/\/gist.github.com\/gandjustas\/52aadbf30d82ceed4b4cf0139157ac50\" rel=\"noopener nofollow\">https:\/\/gist.github.com\/gandjustas\/52aadbf30d82ceed4b4cf0139157ac50<\/a>. \u0412\u0430\u0440\u0438\u0430\u043d\u0442 \u043d\u0430 C# \u0434\u043b\u044f \u0442\u0435\u0445, \u043a\u0442\u043e \u043d\u0435 \u0437\u043d\u0430\u0435\u0442 F# \u2014<a href=\"https:\/\/gist.github.com\/gandjustas\/d8ce2d36df5633bec703c0b04adb23d3\" rel=\"noopener nofollow\">https:\/\/gist.github.com\/gandjustas\/d8ce2d36df5633bec703c0b04adb23d3<\/a>.<\/p>\n<p>\u041c\u043e\u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0447\u0443\u0442\u044c \u0441\u043b\u043e\u0436\u043d\u0435\u0435 \u0438 \u043c\u043e\u0434\u0435\u043b\u044c \u0442\u043e\u0436\u0435, \u043d\u043e \u043f\u0435\u0440\u0432\u044b\u0439 \u043e\u0442\u043f\u0443\u0441\u043a \u044f \u0443\u0436\u0435 \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u044e \u043d\u0430 \u043c\u0430\u0440\u0442 2027 \u0433\u043e\u0434\u0430. \u0410 \u0432\u044b \u0443\u0436\u0435 \u0441\u0434\u0430\u043b\u0438 \u0434\u0430\u0442\u044b? \u041f\u0440\u0438\u0437\u043d\u0430\u0432\u0430\u0439\u0442\u0435\u0441\u044c \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u0435\u043d\u0435\u0433 \u043e\u0441\u0442\u0430\u0432\u0438\u043b\u0438 \u043d\u0430 \u0441\u0442\u043e\u043b\u0435.<\/p>\n<blockquote>\n<p><em>\u0414\u0430\u0442\u044b \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u2014 \u043d\u0435 \u0444\u0438\u043d\u0430\u043d\u0441\u043e\u0432\u0430\u044f \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u044f. \u041f\u0435\u0440\u0435\u0434 \u043e\u0442\u043f\u0443\u0441\u043a\u043e\u043c \u043f\u0440\u043e\u043a\u043e\u043d\u0441\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u0439\u0442\u0435\u0441\u044c \u0441 \u0431\u0443\u0445\u0433\u0430\u043b\u0442\u0435\u0440\u0438\u0435\u0439.<\/em><\/p>\n<\/blockquote>\n<h2>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n<p>\u0421\u043e\u043b\u0432\u0435\u0440\u044b (CP, LP, SAT) \u2014 \u043e\u0447\u0435\u043d\u044c \u043a\u0440\u0443\u0442\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b, \u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u044b \u043f\u043e\u0447\u0442\u0438 \u0437\u0430\u0431\u044b\u043b\u0438 \u0432 \u044d\u043f\u043e\u0445\u0443 ML \u0438 AI. \u041d\u043e \u043e\u043d\u0438 \u0432\u0441\u0435 \u0435\u0449\u0435 \u043c\u043e\u0433\u0443\u0442 \u0440\u0435\u0448\u0430\u0442\u044c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0437\u0430\u0434\u0430\u0447 \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u0435\u0435, \u0447\u0435\u043c \u0440\u0443\u043a\u043e\u043f\u0430\u0448\u043d\u044b\u0439 \u043a\u043e\u0434 \u0438 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u044e\u0442 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u0438\u043b\u0438 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438 \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u043e\u043c. <\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/c9\/65\/46\/c965469b6998d25fa84536ebc0552163.jpg\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/c9\/65\/46\/c965469b6998d25fa84536ebc0552163.jpg 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/c9\/65\/46\/c965469b6998d25fa84536ebc0552163.jpg 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0412 \u043a\u0430\u0436\u0434\u043e\u043c \u043f\u0430\u043a\u0435\u0442\u043d\u043e\u043c \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0435 \u043f\u0440\u044f\u0447\u0435\u0442\u0441\u044f \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 CP-\u0441\u043e\u043b\u0432\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0435\u0448\u0430\u0435\u0442 \u043a\u0430\u043a\u0438\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u043f\u043e\u0434\u043e\u0431\u0440\u0430\u0442\u044c \u0447\u0442\u043e\u0431\u044b \u0443\u0447\u0435\u0441\u0442\u044c \u0432\u0441\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f. \u0410 \u0432\u044b\u0432\u043e\u0434 \u0442\u0438\u043f\u043e\u0432, \u043a\u0430\u043a \u0432 F#, TypeScript \u0438\u043b\u0438 Rust \u2014 \u044d\u0442\u043e \u0443\u0436\u0435 \u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u0441\u043e\u043b\u0432\u0435\u0440.<\/p>\n<p>\u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u043e\u043b\u0432\u0435\u0440\u043e\u0432 \u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0448\u0430\u0442\u044c \u0431\u0438\u0437\u043d\u0435\u0441-\u0437\u0430\u0434\u0430\u0447\u0438: \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u0438\u0439 \u0438 \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432, \u043d\u043e \u0438 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u043e\u0432 (<a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B0_%D0%BA%D0%BE%D0%BC%D0%BC%D0%B8%D0%B2%D0%BE%D1%8F%D0%B6%D1%91%D1%80%D0%B0\" rel=\"noopener nofollow\">\u0417\u0430\u0434\u0430\u0447\u0430 \u043a\u043e\u043c\u043c\u0438\u0432\u043e\u044f\u0436\u0451\u0440\u0430<\/a>), \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0431\u044e\u0434\u0436\u0435\u0442\u043e\u0432, \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0430. \u0414\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u044d\u0442\u043e\u0442 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0432 \u0441\u0432\u043e\u044e \u043a\u043e\u043f\u0438\u043b\u043a\u0443.<\/p>\n<p>\u0421\u043f\u0430\u0441\u0438\u0431\u043e \u0432\u0441\u0435\u043c \u043a\u0442\u043e \u0434\u043e\u0447\u0438\u0442\u0430\u043b \u0434\u043e \u043a\u043e\u043d\u0446\u0430.<\/p>\n<\/div>\n<p>\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/1096432\/\">https:\/\/habr.com\/ru\/articles\/1096432\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p> \u041a\u0430\u0436\u0434\u0443\u044e \u043e\u0441\u0435\u043d\u044c HR \u043f\u0440\u043e\u0441\u0438\u0442 \u0437\u0430\u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0442\u043f\u0443\u0441\u043a\u0430 \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0433\u043e\u0434. \u041e\u0431\u044b\u0447\u043d\u043e \u043b\u044e\u0434\u0438 \u0441\u0440\u0430\u0437\u0443 \u0431\u0435\u0440\u0443\u0442 \u043c\u0435\u0436\u0434\u0443 \u043c\u0430\u0439\u0441\u043a\u0438\u043c\u0438, \u043a\u0442\u043e-\u0442\u043e \u043f\u043e\u0434\u0431\u0438\u0440\u0430\u0435\u0442 \u0434\u0430\u043d\u044b \u043f\u043e\u0434 \u0434\u0435\u043d\u044c \u043d\u0430\u0440\u043e\u0434\u043d\u043e\u0433\u043e \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0430, \u0430 \u043c\u043d\u043e\u0433\u0438\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u0442\u0430\u0432\u044f\u0442 \u043d\u0430 \u0434\u0435\u043a\u0430\u0431\u0440\u044c, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0442\u043e\u043c \u0434\u0432\u0438\u0433\u0430\u0442\u044c \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e. \u0410 \u044f \u0437\u0430\u0434\u0430\u043b\u0441\u044f \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u043c &#8212; \u043c\u043e\u0436\u043d\u043e \u043b\u0438 \u043d\u0430\u0439\u0442\u0438 \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u043e\u0442\u043f\u0443\u0441\u043a \u043f\u043e\u0434 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0438 \u043e\u0442\u043a\u0440\u044b\u043b VS Code\\Jupiter \u0441 F# (\u043f\u043e\u043a\u0430 \u043e\u043d\u043e \u0435\u0449\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442). \u0412\u0441\u0451 \u0436\u0438\u0432\u0451\u0442 \u0432 Jupyter-\u043d\u043e\u0443\u0442\u0431\u0443\u043a\u0435 \u0441 \u044f\u0434\u0440\u043e\u043c .NET Interactive \u2014 \u0434\u0430, F# \u0443\u043c\u0435\u0435\u0442 \u0432 \u043d\u043e\u0443\u0442\u0431\u0443\u043a\u0438, \u043f\u0438\u0442\u043e\u043d\u0438\u0441\u0442\u044b, \u043d\u0435 \u0440\u0435\u0432\u043d\u0443\u0439\u0442\u0435.\u041f\u0440\u0430\u0432\u0438\u043b\u0430 \u0438\u0433\u0440\u044b \u043d\u0430 2027\u041a\u043e\u0440\u043e\u0442\u043a\u043e \u0438 \u0431\u0435\u0437 \u043f\u0440\u0435\u0442\u0435\u043d\u0437\u0438\u0438 \u043d\u0430 \u044e\u0440\u0438\u0434\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u043a\u043e\u043d\u0441\u0443\u043b\u044c\u0442\u0430\u0446\u0438\u044e:28 \u043a\u0430\u043b\u0435\u043d\u0434\u0430\u0440\u043d\u044b\u0445 \u0434\u043d\u0435\u0439, \u043e\u0434\u0438\u043d \u043a\u0443\u0441\u043e\u043a \u2014 \u043d\u0435 \u043a\u043e\u0440\u043e\u0447\u0435 14 \u0434\u043d\u0435\u0439 \u043f\u043e\u0434\u0440\u044f\u0434 (\u0441\u0442. 125 \u0422\u041a). \u041e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 14 \u0431\u0435\u0440\u0443 \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443.\u041f\u0440\u0430\u0437\u0434\u043d\u0438\u043a\u0438 \u0432 \u043e\u0442\u043f\u0443\u0441\u043a \u043d\u0435 \u0432\u0445\u043e\u0434\u044f\u0442 \u0438 \u043f\u0440\u043e\u0434\u043b\u0435\u0432\u0430\u044e\u0442 \u0435\u0433\u043e (\u0441\u0442. 120). \u0412\u044b\u0445\u043e\u0434\u043d\u044b\u0435 \u2014 \u0432\u0445\u043e\u0434\u044f\u0442.\u041a\u0430\u043b\u0435\u043d\u0434\u0430\u0440\u044c 2027: \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a\u0438 1\u20138 \u044f\u043d\u0432\u0430\u0440\u044f, 23 \u0444\u0435\u0432\u0440\u0430\u043b\u044f, 8 \u043c\u0430\u0440\u0442\u0430, 1 \u0438 9 \u043c\u0430\u044f, 12 \u0438\u044e\u043d\u044f, 4 \u043d\u043e\u044f\u0431\u0440\u044f; \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u044b \u043d\u0430 22 \u0444\u0435\u0432\u0440\u0430\u043b\u044f, 3 \u0438 10 \u043c\u0430\u044f, 14 \u0438\u044e\u043d\u044f, 5 \u043d\u043e\u044f\u0431\u0440\u044f \u0438 31 \u0434\u0435\u043a\u0430\u0431\u0440\u044f; \u0440\u0430\u0431\u043e\u0447\u0430\u044f \u0441\u0443\u0431\u0431\u043e\u0442\u0430 20 \u0444\u0435\u0432\u0440\u0430\u043b\u044f. \u041d\u043e\u0432\u043e\u0433\u043e\u0434\u043d\u0438\u0435 \u043a\u0430\u043d\u0438\u043a\u0443\u043b\u044b \u0435\u0441\u0442\u044c \u0443 \u0432\u0441\u0435\u0445 \u2014 \u0441\u0447\u0438\u0442\u0430\u0435\u043c \u0441 11 \u044f\u043d\u0432\u0430\u0440\u044f.\u0414\u0435\u043d\u044c\u0433\u0438: \u0437\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u043a\u0430\u043b\u0435\u043d\u0434\u0430\u0440\u043d\u044b\u0439 \u0434\u0435\u043d\u044c \u043e\u0442\u043f\u0443\u0441\u043a\u0430 \u043f\u043b\u0430\u0442\u044f\u0442 \u0433\u043e\u0434\u043e\u0432\u043e\u0439 \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u043e\u043a \u00f7 12 \u00f7 29,3 (\u0441\u0442. 139), \u0437\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u043d\u0435\u043e\u0442\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u0439 \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u0434\u0435\u043d\u044c \u0442\u0435\u0440\u044f\u0435\u0448\u044c \u043e\u043a\u043b\u0430\u0434 \u00f7 \u0440\u0430\u0431\u043e\u0447\u0438\u0435 \u0434\u043d\u0438 \u043c\u0435\u0441\u044f\u0446\u0430.\u0414\u043b\u044f \u043e\u043a\u043b\u0430\u0434\u0430 150 000 \u20bd:\u0414\u0435\u043d\u044c \u043e\u0442\u043f\u0443\u0441\u043a\u0430\u0420\u0430\u0431\u043e\u0447\u0438\u0445 \u0434\u043d\u0435\u0439 \u0432 \u043c\u0435\u0441\u044f\u0446\u0435\u0414\u0435\u043d\u044c\u0433\u0438\u0431\u0443\u0434\u043d\u0438\u0439 \u0434\u0435\u043d\u044c \u0432 \u044f\u043d\u0432\u0430\u0440\u043515\u22124 881 \u20bd\u0431\u0443\u0434\u043d\u0438\u0439 \u0434\u0435\u043d\u044c \u0432 \u0444\u0435\u0432\u0440\u0430\u043b\u0435 \u0438\u043b\u0438 \u043c\u0430\u043519\u22122 775 \u20bd\u0431\u0443\u0434\u043d\u0438\u0439 \u0434\u0435\u043d\u044c \u0432 \u043d\u043e\u044f\u0431\u0440\u043520\u22122 381 \u20bd\u0431\u0443\u0434\u043d\u0438\u0439 \u0434\u0435\u043d\u044c \u0432 \u0438\u044e\u043d\u0435 \u0438\u043b\u0438 \u043e\u043a\u0442\u044f\u0431\u0440\u043521\u22122 023 \u20bd\u0431\u0443\u0434\u043d\u0438\u0439 \u0434\u0435\u043d\u044c \u0432 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043c\u0435\u0441\u044f\u0446\u044b22\u22121 699 \u20bd\u0441\u0443\u0431\u0431\u043e\u0442\u0430 \u0438\u043b\u0438 \u0432\u043e\u0441\u043a\u0440\u0435\u0441\u0435\u043d\u044c\u0435\u2014+5 119 \u20bd\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u043d\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044e\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u0435\u0449\u0451 \u0440\u0430\u0437. \u0421\u0443\u0431\u0431\u043e\u0442\u0430 \u0432 \u043e\u0442\u043f\u0443\u0441\u043a\u0435 \u043f\u0440\u0438\u043d\u043e\u0441\u0438\u0442 \u0434\u0435\u043d\u044c\u0433\u0438. \u0412\u044b \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0442\u0435\u0440\u044f\u0435\u0442\u0435, \u0430 \u043e\u0442\u043f\u0443\u0441\u043a\u043d\u044b\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0435.\u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043a\u0430\u043b\u0435\u043d\u0434\u0430\u0440\u044c \u0432 \u043a\u043e\u0434\u0435\u0414\u0435\u043d\u044c \u2014 \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u043e\u043c\u0435\u0440 d, \u0441\u0447\u0438\u0442\u0430\u044f \u0441 11 \u044f\u043d\u0432\u0430\u0440\u044f: 0, 1, 2, \u2026 354. \u0412\u0441\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0434\u043d\u044f \u0441\u0447\u0438\u0442\u0430\u044e\u0442\u0441\u044f \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u0438 \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u044b, \u0434\u0430\u043b\u044c\u0448\u0435 \u043c\u043e\u0434\u0435\u043b\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043c\u043e\u0442\u0440\u0438\u0442 \u0432 \u043d\u0438\u0445 \u043f\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0443.module Cal =    let first, last = DateOnly(2027, 1, 11), DateOnly(2027, 12, 31)    let days = last.DayNumber &#8212; first.DayNumber + 1    let date (d: int) = first.AddDays d    let day (ddMM: string) = DateOnly.ParseExact(ddMM + &#171;.2027&#187;, &#171;dd.MM.yyyy&#187;).DayNumber &#8212; first.DayNumber    let show d = (date d).ToString &#171;dd.MM&#187;     let private key (x: DateOnly) = x.ToString &#171;dd.MM&#187;    let private holidays = set [ &#171;23.02&#187;; &#171;08.03&#187;; &#171;01.05&#187;; &#171;09.05&#187;; &#171;12.06&#187;; &#171;04.11&#187; ]    let private movedDaysOff = set [ &#171;22.02&#187;; &#171;03.05&#187;; &#171;10.05&#187;; &#171;14.06&#187;; &#171;05.11&#187;; &#171;31.12&#187; ]    let private workingSaturday = &#171;20.02&#187;     let private isHoliday (x: DateOnly) = holidays.Contains(key x) || x.Month = 1 &amp;&amp; x.Day &lt;= 8    \/\/\/ \u043d\u0435\u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u043b\u0438 \u0434\u0435\u043d\u044c: \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439, \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0451\u043d\u043d\u044b\u0439 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439 (\u043a\u0440\u043e\u043c\u0435 \u0440\u0430\u0431\u043e\u0447\u0435\u0439 \u0441\u0443\u0431\u0431\u043e\u0442\u044b)    let isOff (x: DateOnly) =        key x &lt;&gt; workingSaturday        &amp;&amp; (x.DayOfWeek = DayOfWeek.Saturday || x.DayOfWeek = DayOfWeek.Sunday || isHoliday x || movedDaysOff.Contains(key x))     let holiday = Array.init days (date &gt;&gt; isHoliday)    let off = Array.init days (date &gt;&gt; isOff)    let workdays = [| for d in 0 .. days &#8212; 1 do if not off[d] then d |]     \/\/\/ 14 \u0434\u043d\u0435\u0439 \u043e\u0442\u043f\u0443\u0441\u043a\u0430 \u0441 \u0434\u043d\u044f start: \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a\u0438 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u043c, \u043e\u043d\u0438 \u043f\u0440\u043e\u0434\u043b\u0435\u0432\u0430\u044e\u0442 \u043e\u0442\u043f\u0443\u0441\u043a    let chunk start =        if holiday[start] then None        else            let ds = seq { start .. days &#8212; 1 } |&gt; Seq.filter (fun d -&gt; not holiday[d]) |&gt; Seq.truncate 14 |&gt; Seq.toArray            if ds.Length = 14 then Some ds else None printfn $&#187;\u0414\u043d\u0435\u0439: {Cal.days}, \u0440\u0430\u0431\u043e\u0447\u0438\u0445: {Cal.workdays.Length}&#187;\/\/ \u0414\u043d\u0435\u0439: 355, \u0440\u0430\u0431\u043e\u0447\u0438\u0445: 247\u0427\u0442\u043e \u0437\u0434\u0435\u0441\u044c \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442:\u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043a\u0430\u043b\u0435\u043d\u0434\u0430\u0440\u044c \u2014 \u0442\u0440\u0438 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 (set) \u0441\u0442\u0440\u043e\u043a. \u041f\u0440\u0430\u0437\u0434\u043d\u0438\u043a\u0438, \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u044b \u0438 \u043e\u0434\u043d\u0430 \u0440\u0430\u0431\u043e\u0447\u0430\u044f \u0441\u0443\u0431\u0431\u043e\u0442\u0430. \u041a\u043b\u044e\u0447 \u2014 \u0441\u0442\u0440\u043e\u043a\u0430 &#171;dd.MM&#187;. \u041d\u0435 \u043e\u0447\u0435\u043d\u044c \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e, \u0437\u0430\u0442\u043e \u0441\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u043f\u0440\u0430\u0432\u0438\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0430 \u0433\u043b\u0430\u0437\u0430\u043c\u0438 \u0437\u0430 \u0434\u0435\u0441\u044f\u0442\u044c \u0441\u0435\u043a\u0443\u043d\u0434.\u0412\u044b\u0445\u043e\u0434\u043d\u044b\u0435 \u0438 \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a\u0438 &#8212; \u043d\u0435 \u043e\u0434\u043d\u043e \u0438 \u0442\u043e \u0436\u0435. holiday \u2014 \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a: \u0432 \u043e\u0442\u043f\u0443\u0441\u043a \u043d\u0435 \u0432\u0445\u043e\u0434\u0438\u0442 \u0438 \u043f\u0440\u043e\u0434\u043b\u0435\u0432\u0430\u0435\u0442 \u0435\u0433\u043e. off \u2014 \u043b\u044e\u0431\u043e\u0439 \u043d\u0435\u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u0434\u0435\u043d\u044c: \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439, \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u043d\u043e\u0441. \u041f\u0443\u0442\u0430\u0442\u044c \u0438\u0445 \u043d\u0435\u043b\u044c\u0437\u044f: \u0441\u0443\u0431\u0431\u043e\u0442\u0430 \u0432 \u043e\u0442\u043f\u0443\u0441\u043a \u0432\u0445\u043e\u0434\u0438\u0442 \u0438 \u043f\u0440\u0438\u043d\u043e\u0441\u0438\u0442 \u0434\u0435\u043d\u044c\u0433\u0438, \u0430 23 \u0444\u0435\u0432\u0440\u0430\u043b\u044f \u2014 \u043d\u0435 \u0432\u0445\u043e\u0434\u0438\u0442 \u0438 \u043d\u0435 \u043f\u0440\u0438\u043d\u043e\u0441\u0438\u0442 \u043d\u0438\u0447\u0435\u0433\u043e.\u0420\u0430\u0431\u043e\u0447\u0430\u044f \u0441\u0443\u0431\u0431\u043e\u0442\u0430 20 \u0444\u0435\u0432\u0440\u0430\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0432\u043e\u0439 \u0438 \u043f\u043e\u0431\u0435\u0436\u0434\u0430\u0435\u0442 \u0432\u0441\u0451 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435. \u0413\u043e\u0441\u0443\u0434\u0430\u0440\u0441\u0442\u0432\u043e \u0434\u0430\u043b\u043e, \u0433\u043e\u0441\u0443\u0434\u0430\u0440\u0441\u0442\u0432\u043e \u0432\u0437\u044f\u043b\u043e.workdays \u2014 \u043d\u043e\u043c\u0435\u0440\u0430 \u0440\u0430\u0431\u043e\u0447\u0438\u0445 \u0434\u043d\u0435\u0439 \u043f\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0443.chunk start \u2014 \u0434\u043d\u0438 14-\u0434\u043d\u0435\u0432\u043d\u043e\u0433\u043e \u043a\u0443\u0441\u043a\u0430 \u0441 \u043d\u0430\u0447\u0430\u043b\u043e\u043c start. \u041f\u0440\u0430\u0437\u0434\u043d\u0438\u043a\u0438 \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u044e\u0442\u0441\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043a\u0443\u0441\u043e\u043a \u0447\u0435\u0440\u0435\u0437 8 \u043c\u0430\u0440\u0442\u0430 \u0434\u043b\u0438\u0442\u0441\u044f 15 \u043a\u0430\u043b\u0435\u043d\u0434\u0430\u0440\u043d\u044b\u0445 \u0434\u043d\u0435\u0439. \u041d\u0430\u0447\u0438\u043d\u0430\u0442\u044c \u043e\u0442\u043f\u0443\u0441\u043a \u0441 \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a\u0430 \u043d\u0435\u043b\u044c\u0437\u044f \u2014 None. \u0421\u0432\u0435\u0440\u043a\u0430 \u0441 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e: 247 \u0440\u0430\u0431\u043e\u0447\u0438\u0445 \u0434\u043d\u0435\u0439 \u0432 2027-\u043c, \u043a\u0430\u043a \u0432 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u043c \u043a\u0430\u043b\u0435\u043d\u0434\u0430\u0440\u0435. \u0417\u043d\u0430\u0447\u0438\u0442, \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043f\u043e\u0442\u0435\u0440\u044f\u043b\u0438.\u0414\u0435\u043d\u044c\u0433\u0438 \u0437\u0430 \u0434\u0435\u043d\u044c \u0441\u0447\u0438\u0442\u0430\u044e\u0442\u0441\u044f \u0442\u0443\u0442 \u0436\u0435, \u043f\u043e \u0444\u043e\u0440\u043c\u0443\u043b\u0430\u043c \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u2014 \u0438 \u0441\u0440\u0430\u0437\u0443 \u0432 \u043a\u043e\u043f\u0435\u0439\u043a\u0430\u0445. \u042d\u0442\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u0435\u0435 \u0438 \u0434\u0430\u043b\u044c\u0448\u0435 \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u0441\u044f:\u041a\u043e\u043f\u0435\u0439\u043a\u0438 \u0437\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u0434\u0435\u043d\u044c \u0433\u043e\u0434\u0430\/\/\/ \u043a\u043e\u043f\u0435\u0439\u043a\u0438 \u0437\u0430 \u0434\u0435\u043d\u044c \u043e\u0442\u043f\u0443\u0441\u043a\u0430: \u043e\u0442\u043f\u0443\u0441\u043a\u043d\u044b\u0435 \u043c\u0438\u043d\u0443\u0441 \u043f\u043e\u0442\u0435\u0440\u044f\u043d\u043d\u0430\u044f \u0437\u0430\u0440\u043f\u043b\u0430\u0442\u0430 (\u0441\u0442. 139: \u0433\u043e\u0434\u043e\u0432\u043e\u0439 \u00f7 12 \u00f7 29,3)static member val MoneyPerDay : int64[] =    let salary = 150_000m    let workdaysInMonth =        Array.init 12 (fun i -&gt;            let m = i + 1            Seq.init (DateTime.DaysInMonth(2027, m)) (fun j -&gt; DateOnly(2027, m, j + 1))            |&gt; Seq.filter (Cal.isOff &gt;&gt; not) |&gt; Seq.length)    Array.init Cal.days (fun d -&gt;        if Cal.holiday[d] then 0L        else            let lost = if Cal.off[d] then 0m else salary \/ decimal workdaysInMonth[(Cal.date d).Month &#8212; 1]            int64 (Math.Round((salary \/ 29.3m &#8212; lost) * 100m))) \u041f\u0440\u0430\u0437\u0434\u043d\u0438\u043a \u2014 \u043d\u043e\u043b\u044c: \u0437\u0430 \u043d\u0435\u0433\u043e \u043d\u0435 \u043f\u043b\u0430\u0442\u044f\u0442 \u0438 \u043d\u0435 \u0432\u044b\u0447\u0438\u0442\u0430\u044e\u0442. \u0412\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u2014 \u0447\u0438\u0441\u0442\u044b\u0435 \u043e\u0442\u043f\u0443\u0441\u043a\u043d\u044b\u0435. \u0411\u0443\u0434\u043d\u0438\u0439 \u0434\u0435\u043d\u044c \u2014 \u043e\u0442\u043f\u0443\u0441\u043a\u043d\u044b\u0435 \u043c\u0438\u043d\u0443\u0441 \u0434\u043d\u0435\u0432\u043d\u0430\u044f \u0437\u0430\u0440\u043f\u043b\u0430\u0442\u0430 \u044d\u0442\u043e\u0433\u043e \u043c\u0435\u0441\u044f\u0446\u0430. \u0412\u0441\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0432\u044b\u0448\u0435 \u2014 \u044d\u0442\u043e \u0432\u043e\u0442 \u044d\u0442\u0438 \u0434\u0435\u0441\u044f\u0442\u044c \u0441\u0442\u0440\u043e\u043a. \u041f\u0435\u0440\u0435\u0431\u043e\u0440 \u0443\u043c\u0438\u0440\u0430\u0435\u0442 \u043d\u0430 \u043f\u044f\u0442\u043e\u043c \u0434\u043d\u043514-\u0434\u043d\u0435\u0432\u043d\u044b\u0439 \u043a\u0443\u0441\u043e\u043a \u2014 \u044d\u0442\u043e \u043e\u0434\u043d\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f: \u0434\u0435\u043d\u044c \u043d\u0430\u0447\u0430\u043b\u0430. \u041f\u0440\u043e\u0433\u043e\u043d\u044f\u0435\u043c Cal.chunk \u043f\u043e \u0432\u0441\u0435\u043c \u0434\u043d\u044f\u043c \u0433\u043e\u0434\u0430 \u2014 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 336, \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043c\u0433\u043d\u043e\u0432\u0435\u043d\u043d\u043e.\u041c\u0430\u043a\u0441\u0438\u043c\u0443\u043c \u0434\u0435\u043d\u0435\u0433 \u2014 +13 897 \u20bd \u0437\u0430 \u043a\u0443\u0441\u043e\u043a 21 \u0444\u0435\u0432\u0440\u0430\u043b\u044f \u2014 7 \u043c\u0430\u0440\u0442\u0430. \u041c\u0430\u043a\u0441\u0438\u043c\u0443\u043c \u043e\u0442\u0434\u044b\u0445\u0430 \u2014 18 \u0434\u043d\u0435\u0439 \u0441 7 \u0444\u0435\u0432\u0440\u0430\u043b\u044f: \u0442\u0443\u0434\u0430 \u0432\u043b\u0435\u0437\u0430\u044e\u0442 \u0438 22-\u0435, \u0438 23-\u0435, \u0438 \u0440\u0430\u0431\u043e\u0447\u0430\u044f \u0441\u0443\u0431\u0431\u043e\u0442\u0430.\u0410 \u0434\u0430\u043b\u044c\u0448\u0435 14 \u043e\u0434\u0438\u043d\u043e\u0447\u043d\u044b\u0445 \u0434\u043d\u0435\u0439. \u041d\u0435\u043f\u0440\u0430\u0437\u0434\u043d\u0438\u0447\u043d\u044b\u0445 \u0434\u043d\u0435\u0439 \u0432 \u0433\u043e\u0434\u0443 349. \u0412\u044b\u0431\u0440\u0430\u0442\u044c \u0438\u0437 \u043d\u0438\u0445 \u043f\u044f\u0442\u044c \u2014 41 922 588 819 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432. \u0412\u044b\u0431\u0440\u0430\u0442\u044c \u0447\u0435\u0442\u044b\u0440\u043d\u0430\u0434\u0446\u0430\u0442\u044c \u2014 3,5 \u00b7 10\u00b2\u2074. \u0414\u043e \u0432\u044b\u0445\u043e\u0434\u0430 \u0432 \u043e\u0442\u043f\u0443\u0441\u043a \u043d\u0435 \u0434\u043e\u0441\u0447\u0438\u0442\u0430\u0435\u043c. \u0414\u0430\u0436\u0435 \u0434\u043e \u043f\u0435\u043d\u0441\u0438\u0438.\u041f\u0435\u0440\u0435\u0431\u043e\u0440 \u043c\u043e\u0436\u043d\u043e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u2014 \u043d\u0430\u0447\u0438\u043d\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u0431\u043e\u0440 \u0441 \u0434\u043d\u0435\u0439, \u043f\u0440\u0438\u043c\u044b\u043a\u0430\u044e\u0449\u0438\u0445 \u043a \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u043c, \u043e\u0442\u0441\u0435\u043a\u0430\u0442\u044c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u043f\u043e \u043c\u0435\u0442\u043e\u0434\u0443 \u0432\u0435\u0442\u0432\u0435\u0439 \u0438 \u0433\u0440\u0430\u043d\u0438\u0446, \u0438 \u0435\u0449\u0435 \u043c\u043d\u043e\u0433\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432. \u041d\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u044d\u0442\u043e \u0432\u0441\u0435 \u0441\u043b\u043e\u0436\u043d\u043e, \u0434\u0430\u0436\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0418\u0418.\u041d\u0430 \u043f\u043e\u043c\u043e\u0449\u044c \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u0441\u043e\u043b\u0432\u0435\u0440CP-SAT \u2014 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0439 \u0441\u043e\u043b\u0432\u0435\u0440 \u0438\u0437 Google OR-Tools. \u0414\u043b\u044f .NET \u044d\u0442\u043e \u043e\u0431\u044b\u0447\u043d\u044b\u0439 NuGet-\u043f\u0430\u043a\u0435\u0442. \u041c\u043d\u043e\u0433\u043e \u043b\u0435\u0442 \u043f\u043e\u0434\u0440\u044f\u0434 \u043e\u043d \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442 \u043c\u0435\u0434\u0430\u043b\u0438 \u043d\u0430 MiniZinc Challenge \u2014 \u0447\u0435\u043c\u043f\u0438\u043e\u043d\u0430\u0442\u0435 \u0441\u043e\u043b\u0432\u0435\u0440\u043e\u0432, \u0435\u0441\u0442\u044c \u0438 \u0442\u0430\u043a\u043e\u0439.\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 \u043d\u0438\u043c \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a: \u0432\u044b \u043d\u0435 \u043f\u0438\u0448\u0435\u0442\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c. \u0412\u044b \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0435 \u0437\u0430\u0434\u0430\u0447\u0443 \u2014 \u043a\u0430\u043a\u0438\u0435 \u0435\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435, \u0447\u0442\u043e \u0438\u043c \u043d\u0435\u043b\u044c\u0437\u044f, \u0447\u0442\u043e \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043c\u0430\u043a\u0441\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u2014 \u0430 \u0441\u043e\u043b\u0432\u0435\u0440 \u0441\u0430\u043c \u0438\u0449\u0435\u0442 \u043e\u0442\u0432\u0435\u0442. \u041a\u0430\u043a SQL: \u043f\u0438\u0448\u0435\u0448\u044c \u00ab\u0447\u0442\u043e\u00bb, \u0430 \u043d\u0435 \u00ab\u043a\u0430\u043a\u00bb.\u041e\u0442\u0432\u0435\u0442 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u0441 \u043e\u0434\u043d\u0438\u043c \u0438\u0437 \u0441\u0442\u0430\u0442\u0443\u0441\u043e\u0432:Optimal \u2014 \u043f\u043b\u0430\u043d \u043d\u0430\u0439\u0434\u0435\u043d, \u0438 \u0434\u043e\u043a\u0430\u0437\u0430\u043d\u043e, \u0447\u0442\u043e \u043b\u0443\u0447\u0448\u0435 \u043d\u0435 \u0431\u044b\u0432\u0430\u0435\u0442;Feasible \u2014 \u043f\u043b\u0430\u043d \u043d\u0430\u0439\u0434\u0435\u043d, \u043d\u043e \u0434\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043d\u0435 \u0443\u0441\u043f\u0435\u043b (\u043a\u043e\u043d\u0447\u0438\u043b\u0441\u044f \u043b\u0438\u043c\u0438\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438);Infeasible \u2014 \u0434\u043e\u043a\u0430\u0437\u0430\u043d\u043e, \u0447\u0442\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u0440\u0435\u0447\u0430\u0442 \u0434\u0440\u0443\u0433 \u0434\u0440\u0443\u0433\u0443. \u041e\u0442\u043f\u0443\u0441\u043a\u0430 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442. \u0414\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u043e \u2014 \u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u044d\u0432\u0440\u0438\u0441\u0442\u0438\u043a \u0438 \u0433\u0435\u043d\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432. \u0422\u0435 \u0433\u043e\u0432\u043e\u0440\u044f\u0442 \u00ab\u0432\u0440\u043e\u0434\u0435 \u043d\u0435\u043f\u043b\u043e\u0445\u043e\u00bb. CP-SAT \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u00ab\u043b\u0443\u0447\u0448\u0435 \u043d\u0435\u043b\u044c\u0437\u044f, \u0432\u043e\u0442 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u044f\u00bb.\u041a\u0430\u043a \u043e\u043d \u043e\u0431\u0445\u043e\u0434\u0438\u0442 10\u00b2\u2074 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432, \u043d\u0435 \u043f\u0435\u0440\u0435\u0431\u0438\u0440\u0430\u044f \u0438\u0445? \u0422\u0440\u0438 \u043f\u0440\u0438\u0451\u043c\u0430, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0445 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e:\u0420\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439. \u0412\u044b\u0431\u0440\u0430\u043b \u043a\u0443\u0441\u043e\u043a 21 \u0444\u0435\u0432\u0440\u0430\u043b\u044f \u2014 7 \u043c\u0430\u0440\u0442\u0430? \u0412\u0441\u0435 14 \u0434\u043d\u0435\u0439 \u0432\u043d\u0443\u0442\u0440\u0438 \u043c\u0433\u043d\u043e\u0432\u0435\u043d\u043d\u043e \u0432\u044b\u0447\u0451\u0440\u043a\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0438\u0437 \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442\u043e\u0432 \u0432 \u043e\u0434\u0438\u043d\u043e\u0447\u043d\u044b\u0435 \u0434\u043d\u0438. \u041e\u0434\u043d\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0442\u044f\u043d\u0435\u0442 \u0437\u0430 \u0441\u043e\u0431\u043e\u0439 \u0441\u043e\u0442\u043d\u0438 \u0432\u044b\u0432\u043e\u0434\u043e\u0432.\u041e\u0431\u0443\u0447\u0435\u043d\u0438\u0435 \u043d\u0430 \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u0430\u0445 \u2014 \u043e\u0442 SAT \u0432 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0438. \u0417\u0430\u0448\u0451\u043b \u0432 \u0442\u0443\u043f\u0438\u043a \u2014 \u0441\u043e\u043b\u0432\u0435\u0440 \u0432\u044b\u044f\u0441\u043d\u044f\u0435\u0442 \u043f\u043e\u0447\u0435\u043c\u0443 \u0438 \u0437\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u0442 \u043f\u0440\u0438\u0447\u0438\u043d\u0443 \u043a\u0430\u043a \u043d\u043e\u0432\u043e\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e. \u0412 \u044d\u0442\u043e\u0442 \u0442\u0443\u043f\u0438\u043a \u043e\u043d \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u0437\u0430\u0439\u0434\u0451\u0442 \u043d\u0438 \u0441 \u043a\u0430\u043a\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b.\u041e\u0446\u0435\u043d\u043a\u0438 \u0441\u0432\u0435\u0440\u0445\u0443. \u0421\u043e\u043b\u0432\u0435\u0440 \u0443\u043c\u0435\u0435\u0442 \u0431\u044b\u0441\u0442\u0440\u043e \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u00ab\u0431\u043e\u043b\u044c\u0448\u0435 \u044d\u0442\u043e\u0433\u043e \u0442\u043e\u0447\u043d\u043e \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f\u00bb \u0438 \u043e\u0442\u0440\u0435\u0437\u0430\u0442\u044c \u0446\u0435\u043b\u044b\u0435 \u0432\u0435\u0442\u043a\u0438 \u043f\u043e\u0438\u0441\u043a\u0430, \u043d\u0435 \u0437\u0430\u0445\u043e\u0434\u044f \u0432 \u043d\u0438\u0445. \u041a\u0430\u043a \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u2014 \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043d\u0438\u0436\u0435.\u041f\u043b\u044e\u0441 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u2014 \u0441\u043e\u043b\u0432\u0435\u0440 \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u044f\u0440\u0430\u0445. \u041d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u044f\u0434\u0440\u0435 \u0441\u0432\u043e\u0439 \u0432\u043e\u0440\u043a\u0435\u0440 \u0441\u043e \u0441\u0432\u043e\u0435\u0439 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0435\u0439, \u0438 \u043e\u043d\u0438 \u0434\u0435\u043b\u044f\u0442\u0441\u044f \u043d\u0430\u0445\u043e\u0434\u043a\u0430\u043c\u0438 \u0434\u0440\u0443\u0433 \u0441 \u0434\u0440\u0443\u0433\u043e\u043c.\u0427\u0442\u043e CP-SAT \u043d\u0435 \u0443\u043c\u0435\u0435\u0442 \u2014 \u0438 \u044d\u0442\u043e \u0432\u0430\u0436\u043d\u043e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0434\u0430\u043b\u044c\u0448\u0435 \u0432\u0441\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u2014 \u0431\u043e\u0440\u044c\u0431\u0430 \u0441 \u044d\u0442\u0438\u043c\u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f\u043c\u0438:\u0422\u043e\u043b\u044c\u043a\u043e \u0446\u0435\u043b\u044b\u0435 \u0447\u0438\u0441\u043b\u0430. \u041d\u0438\u043a\u0430\u043a\u0438\u0445 float. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u0441\u0435 \u0434\u0435\u043d\u044c\u0433\u0438 \u0432 \u043c\u043e\u0434\u0435\u043b\u0438 \u2014 \u0432 \u043a\u043e\u043f\u0435\u0439\u043a\u0430\u0445, int64.\u0423 \u043a\u0430\u0436\u0434\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u2014 \u0433\u0440\u0430\u043d\u0438\u0446\u044b. \u00ab\u0426\u0435\u043b\u043e\u0435 \u043e\u0442 0 \u0434\u043e 136\u00bb \u2014 \u043c\u043e\u0436\u043d\u043e. \u00ab\u0426\u0435\u043b\u043e\u0435 \u043a\u0430\u043a\u043e\u0435-\u043d\u0438\u0431\u0443\u0434\u044c\u00bb \u2014 \u043d\u0435\u043b\u044c\u0437\u044f.\u0422\u043e\u043b\u044c\u043a\u043e \u043b\u0438\u043d\u0435\u0439\u043d\u044b\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0438 \u043b\u0438\u043d\u0435\u0439\u043d\u0430\u044f \u0446\u0435\u043b\u044c: \u0441\u0443\u043c\u043c\u044b \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0441 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u044b\u043c\u0438 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u0430\u043c\u0438. 3\u00b7x + 5\u00b7y \u2264 10 \u2014 \u0434\u0430. x\u00b2 \u0438\u043b\u0438 x\u00b7y \u2014 \u0444\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e \u0435\u0441\u0442\u044c AddMultiplicationEquality, \u043d\u043e \u0441\u043e\u043b\u0432\u0435\u0440 \u0435\u0433\u043e \u043d\u0435 \u043b\u044e\u0431\u0438\u0442 \u0438 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u043c \u0438 \u0433\u0440\u0443\u0441\u0442\u043d\u044b\u043c.\u0426\u0435\u043b\u044c \u043e\u0434\u043d\u0430. \u00ab\u041f\u043e\u0431\u043e\u043b\u044c\u0448\u0435 \u043e\u0442\u0434\u043e\u0445\u043d\u0443\u0442\u044c \u0438 \u043d\u0435 \u043f\u043e\u0442\u0435\u0440\u044f\u0442\u044c \u0434\u0435\u043d\u0435\u0433\u00bb \u2014 \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0443\u043f\u0430\u043a\u043e\u0432\u0430\u0442\u044c \u0432 \u043e\u0434\u043d\u043e \u0447\u0438\u0441\u043b\u043e.\u0425\u0443\u0434\u0448\u0438\u0439 \u0441\u043b\u0443\u0447\u0430\u0439 \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u044d\u043a\u0441\u043f\u043e\u043d\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439. \u0417\u0430\u0434\u0430\u0447\u0430 NP-\u0442\u0440\u0443\u0434\u043d\u0430\u044f, \u0447\u0443\u0434\u0435\u0441 \u043d\u0435 \u0431\u044b\u0432\u0430\u0435\u0442. \u041f\u043b\u043e\u0445\u0430\u044f \u0444\u043e\u0440\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u043a\u0430 \u043c\u043e\u0436\u0435\u0442 \u043d\u0435 \u0440\u0435\u0448\u0438\u0442\u044c\u0441\u044f \u0437\u0430 \u0440\u0430\u0437\u0443\u043c\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u2014 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u043d\u0430 \u0441\u0435\u0431\u0435. \u0417\u0430\u0442\u043e \u0435\u0441\u0442\u044c \u0443\u0434\u043e\u0431\u043d\u044b\u0435 \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f. \u041d\u0430\u043c \u0445\u0432\u0430\u0442\u0438\u0442 \u0441\u0430\u043c\u044b\u0445 \u043f\u0440\u043e\u0441\u0442\u044b\u0445:AddExactlyOne(xs) \u2014 \u0440\u043e\u0432\u043d\u043e \u043e\u0434\u043d\u0430 \u0431\u0443\u043b\u0435\u0432\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u0430 \u0438\u0441\u0442\u0438\u043d\u043d\u0430;AddAtMostOne(xs) \u2014 \u043d\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u043e\u0434\u043d\u043e\u0439;AddLinearConstraint(expr, lo, hi) \u2014 \u043b\u0438\u043d\u0435\u0439\u043d\u043e\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0432 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435 [lo, hi];OnlyEnforceIf(lit) \u2014 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435, \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u043b\u0438\u0442\u0435\u0440\u0430\u043b \u0438\u0441\u0442\u0438\u043d\u0435\u043d. \u041b\u0438\u0442\u0435\u0440\u0430\u043b \u2014 \u044d\u0442\u043e \u0431\u0443\u043b\u0435\u0432\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u0438\u043b\u0438 \u0435\u0451 \u043e\u0442\u0440\u0438\u0446\u0430\u043d\u0438\u0435: x \u0438\u043b\u0438 not x. \u0415\u0441\u0442\u044c \u0438 \u0442\u044f\u0436\u0451\u043b\u0430\u044f \u0430\u0440\u0442\u0438\u043b\u043b\u0435\u0440\u0438\u044f \u2014 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u044b \u0431\u0435\u0437 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u0439 (AddNoOverlap, \u0434\u043b\u044f \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u0438\u0439), \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u044b (AddCircuit, \u0434\u043b\u044f \u043a\u043e\u043c\u043c\u0438\u0432\u043e\u044f\u0436\u0451\u0440\u0430), \u0440\u0435\u0441\u0443\u0440\u0441\u044b (AddCumulative). \u0414\u043b\u044f \u0440\u0430\u0441\u0447\u0451\u0442\u0430 \u043e\u0442\u043f\u0443\u0441\u043a\u0430 \u043e\u043d\u0438 \u043d\u0435 \u043d\u0443\u0436\u043d\u044b.\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c#r &#171;nuget: Google.OrTools, 9.15.6755&#8243;\u041c\u043e\u0434\u0435\u043b\u044c \u0434\u043b\u044f \u0441\u043e\u043b\u0432\u0435\u0440\u0430: \u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435, \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f, \u0446\u0435\u043b\u044c.\u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0431\u0443\u043b\u0435\u0432\u044b:start[t] \u2014 14-\u0434\u043d\u0435\u0432\u043d\u044b\u0439 \u043a\u0443\u0441\u043e\u043a \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0432 \u0434\u0435\u043d\u044c t;single[d] \u2014 \u0434\u0435\u043d\u044c d \u0432\u0437\u044f\u0442 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e.\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f:\u043d\u0430\u0447\u0430\u043b\u043e \u0440\u043e\u0432\u043d\u043e \u043e\u0434\u043d\u043e (AddExactlyOne);\u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u0434\u043d\u0435\u0439 \u0440\u043e\u0432\u043d\u043e 14, \u0432 \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a\u0438 \u0438\u0445 \u0431\u0440\u0430\u0442\u044c \u043d\u0435\u043b\u044c\u0437\u044f, \u0438 \u0434\u0435\u043d\u044c \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0432 \u043a\u0443\u0441\u043a\u0435 \u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c (AddAtMostOne).\u0414\u0435\u043d\u044c\u0433\u0438 \u2014 \u043b\u0438\u043d\u0435\u0439\u043d\u0430\u044f \u0441\u0443\u043c\u043c\u0430: \u043a\u0430\u0436\u0434\u0430\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u0443\u043c\u043d\u043e\u0436\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0435 \u043a\u043e\u043f\u0435\u0439\u043a\u0438. \u041a\u0430\u043b\u0435\u043d\u0434\u0430\u0440\u044c \u0446\u0435\u043b\u0438\u043a\u043e\u043c \u0443\u0445\u043e\u0434\u0438\u0442 \u0432 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u044b, \u043c\u043e\u0434\u0435\u043b\u044c \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u043b\u0438\u043d\u0435\u0439\u043d\u043e\u0439.\u0413\u043b\u0430\u0432\u043d\u0430\u044f \u0444\u0438\u0448\u043a\u0430: \u043c\u043e\u0434\u0435\u043b\u044c \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0437\u043d\u0430\u0435\u0442 \u043f\u0440\u043e \u043b\u0435\u0442\u043e, \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0435 \u0438 \u0432\u0430\u0448\u0438 \u0445\u043e\u0442\u0435\u043b\u043a\u0438. \u041e\u043d\u0430 \u0441\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442 \u0443 \u0434\u0432\u0443\u0445 \u043f\u0440\u0435\u0434\u0438\u043a\u0430\u0442\u043e\u0432 DateOnly -&gt; bool:type Rules =    { Chunk: DateOnly -&gt; bool    \/\/ \u043a\u0430\u043a\u0438\u043c \u0434\u043d\u044f\u043c \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u043e \u0431\u044b\u0442\u044c \u0432 14-\u0434\u043d\u0435\u0432\u043d\u043e\u043c \u043a\u0443\u0441\u043a\u0435      Single: DateOnly -&gt; bool   \/\/ \u043a\u0430\u043a\u0438\u0435 \u0434\u043d\u0438 \u043c\u043e\u0436\u043d\u043e \u0431\u0440\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c\u0438      Budget: decimal option }   \/\/ \u0434\u0435\u043d\u044c\u0433\u0438 \u0437\u0430 \u043e\u0442\u043f\u0443\u0441\u043a \u043d\u0435 \u043c\u0435\u043d\u044c\u0448\u0435 \u0441\u0442\u043e\u043b\u044c\u043a\u0438\u0445 \u0440\u0443\u0431\u043b\u0435\u0439\u0414\u0435\u043d\u0435\u0436\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u043c\u043e\u0434\u0435\u043b\u0438type VacationModel(rules: Rules) =    let model = CpModel()    let start, single = Dictionary&lt;int, BoolVar&gt;(), Dictionary&lt;int, BoolVar&gt;()    let takes = Array.init Cal.days (fun _ -&gt; ResizeArray&lt;ILiteral&gt;())   \/\/ \u0434\u0435\u043d\u044c \u043a\u0430\u043b\u0435\u043d\u0434\u0430\u0440\u044f -&gt; \u043a\u0430\u043a\u0438\u043c\u0438 \u043a\u0443\u0441\u043a\u0430\u043c\u0438 \u043e\u0442\u043f\u0443\u0441\u043a\u0430 \u043e\u043d \u0437\u0430\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f    let terms = ResizeArray&lt;LinearExpr&gt;()  &#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-499364","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/499364","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=499364"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/499364\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=499364"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=499364"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=499364"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}