{"leetcode/013-roman-to-integer.flang":"\u003cspan class=f-d\u003eмодуль\u003c/span\u003e \u003cspan class=f-q\u003e«Римские числа»\u003c/span\u003e\n\n\u003cspan class=f-c\u003e// LeetCode 13. Roman to Integer.\u003c/span\u003e\n\u003cspan class=f-c\u003e// Перевести римскую запись в число.\u003c/span\u003e\n\u003cspan class=f-c\u003e//\u003c/span\u003e\n\u003cspan class=f-c\u003e// Обычная, не тотальная — и виновата только строка. Сам разбор («если\u003c/span\u003e\n\u003cspan class=f-c\u003e// предыдущая цифра меньше текущей, вычесть её дважды») выражается свёрткой\u003c/span\u003e\n\u003cspan class=f-c\u003e// с записью-состоянием и тотален; но чтобы получить символы строки, её надо\u003c/span\u003e\n\u003cspan class=f-c\u003e// обойти по одному, а убывание «строка стала короче на символ» анализ\u003c/span\u003e\n\u003cspan class=f-c\u003e// завершаемости не признаёт: часть значения — это хвост списка, голова,\u003c/span\u003e\n\u003cspan class=f-c\u003e// поле записи или поле варианта, и ничего больше.\u003c/span\u003e\n\u003cspan class=f-c\u003e//\u003c/span\u003e\n\u003cspan class=f-c\u003e// Была бы встроенная форма «символы строки», задача стала бы тотальной\u003c/span\u003e\n\u003cspan class=f-c\u003e// целиком.\u003c/span\u003e\n\n\u003cspan class=f-d\u003eобъект\u003c/span\u003e \u003cspan class=f-q\u003e«Разбор римского»\u003c/span\u003e\n  сумма \u003cspan class=f-k\u003eявляется\u003c/span\u003e \u003cspan class=f-t\u003eчислом\u003c/span\u003e\n  предыдущее \u003cspan class=f-k\u003eявляется\u003c/span\u003e \u003cspan class=f-t\u003eчислом\u003c/span\u003e\n\n\u003cspan class=f-d\u003eтотальная\u003c/span\u003e \u003cspan class=f-d\u003eфункция\u003c/span\u003e \u003cspan class=f-q\u003e«Приписать строку в начало»\u003c/span\u003e\n  \u003cspan class=f-k\u003eпринимает\u003c/span\u003e первая: \u003cspan class=f-t\u003eстрока\u003c/span\u003e, элементы: \u003cspan class=f-k\u003eсписок\u003c/span\u003e \u003cspan class=f-t\u003eстроки\u003c/span\u003e\n  \u003cspan class=f-k\u003eвозвращает\u003c/span\u003e \u003cspan class=f-k\u003eсписок\u003c/span\u003e \u003cspan class=f-t\u003eстроки\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«В непустой»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e первая \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-s\u003e\"I\"\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e элементы \u003cspan class=f-o\u003eравно\u003c/span\u003e [\u003cspan class=f-s\u003e\"V\"\u003c/span\u003e]\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e [\u003cspan class=f-s\u003e\"I\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"V\"\u003c/span\u003e]\n  \u003cspan class=f-k\u003eсвёртка\u003c/span\u003e элементы \u003cspan class=f-k\u003eначиная с\u003c/span\u003e [первая] \u003cspan class=f-k\u003eкак\u003c/span\u003e акк \u003cspan class=f-k\u003eи\u003c/span\u003e эл \u003cspan class=f-o\u003e→\u003c/span\u003e \u003cspan class=f-k\u003eдобавить\u003c/span\u003e эл \u003cspan class=f-k\u003eк\u003c/span\u003e акк\n\n\u003cspan class=f-d\u003eтотальная\u003c/span\u003e \u003cspan class=f-d\u003eфункция\u003c/span\u003e \u003cspan class=f-q\u003e«Значение цифры»\u003c/span\u003e\n  \u003cspan class=f-k\u003eпринимает\u003c/span\u003e буква: \u003cspan class=f-t\u003eстрока\u003c/span\u003e\n  \u003cspan class=f-k\u003eвозвращает\u003c/span\u003e \u003cspan class=f-t\u003eчисло\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Единица»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e буква \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-s\u003e\"I\"\u003c/span\u003e\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e \u003cspan class=f-n\u003e1\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Тысяча»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e буква \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-s\u003e\"M\"\u003c/span\u003e\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e \u003cspan class=f-n\u003e1000\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Не римская цифра»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e буква \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-s\u003e\"щ\"\u003c/span\u003e\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e \u003cspan class=f-n\u003e0\u003c/span\u003e\n  \u003cspan class=f-k\u003eесли\u003c/span\u003e буква \u003cspan class=f-o\u003eравен\u003c/span\u003e \u003cspan class=f-s\u003e\"I\"\u003c/span\u003e\n    \u003cspan class=f-k\u003eто\u003c/span\u003e \u003cspan class=f-n\u003e1\u003c/span\u003e\n    \u003cspan class=f-k\u003eиначе\u003c/span\u003e\n      \u003cspan class=f-k\u003eесли\u003c/span\u003e буква \u003cspan class=f-o\u003eравен\u003c/span\u003e \u003cspan class=f-s\u003e\"V\"\u003c/span\u003e\n        \u003cspan class=f-k\u003eто\u003c/span\u003e \u003cspan class=f-n\u003e5\u003c/span\u003e\n        \u003cspan class=f-k\u003eиначе\u003c/span\u003e\n          \u003cspan class=f-k\u003eесли\u003c/span\u003e буква \u003cspan class=f-o\u003eравен\u003c/span\u003e \u003cspan class=f-s\u003e\"X\"\u003c/span\u003e\n            \u003cspan class=f-k\u003eто\u003c/span\u003e \u003cspan class=f-n\u003e10\u003c/span\u003e\n            \u003cspan class=f-k\u003eиначе\u003c/span\u003e\n              \u003cspan class=f-k\u003eесли\u003c/span\u003e буква \u003cspan class=f-o\u003eравен\u003c/span\u003e \u003cspan class=f-s\u003e\"L\"\u003c/span\u003e\n                \u003cspan class=f-k\u003eто\u003c/span\u003e \u003cspan class=f-n\u003e50\u003c/span\u003e\n                \u003cspan class=f-k\u003eиначе\u003c/span\u003e\n                  \u003cspan class=f-k\u003eесли\u003c/span\u003e буква \u003cspan class=f-o\u003eравен\u003c/span\u003e \u003cspan class=f-s\u003e\"C\"\u003c/span\u003e\n                    \u003cspan class=f-k\u003eто\u003c/span\u003e \u003cspan class=f-n\u003e100\u003c/span\u003e\n                    \u003cspan class=f-k\u003eиначе\u003c/span\u003e\n                      \u003cspan class=f-k\u003eесли\u003c/span\u003e буква \u003cspan class=f-o\u003eравен\u003c/span\u003e \u003cspan class=f-s\u003e\"D\"\u003c/span\u003e\n                        \u003cspan class=f-k\u003eто\u003c/span\u003e \u003cspan class=f-n\u003e500\u003c/span\u003e\n                        \u003cspan class=f-k\u003eиначе\u003c/span\u003e\n                          \u003cspan class=f-k\u003eесли\u003c/span\u003e буква \u003cspan class=f-o\u003eравен\u003c/span\u003e \u003cspan class=f-s\u003e\"M\"\u003c/span\u003e \u003cspan class=f-k\u003eто\u003c/span\u003e \u003cspan class=f-n\u003e1000\u003c/span\u003e \u003cspan class=f-k\u003eиначе\u003c/span\u003e \u003cspan class=f-n\u003e0\u003c/span\u003e\n\n\u003cspan class=f-d\u003eфункция\u003c/span\u003e \u003cspan class=f-q\u003e«Символы с позиции»\u003c/span\u003e\n  \u003cspan class=f-k\u003eпринимает\u003c/span\u003e текст: \u003cspan class=f-t\u003eстрока\u003c/span\u003e, позиция: \u003cspan class=f-t\u003eчисло\u003c/span\u003e\n  \u003cspan class=f-k\u003eвозвращает\u003c/span\u003e \u003cspan class=f-k\u003eсписок\u003c/span\u003e \u003cspan class=f-t\u003eстроки\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«С последнего символа»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e текст \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-s\u003e\"IV\"\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e позиция \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-n\u003e2\u003c/span\u003e\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e [\u003cspan class=f-s\u003e\"V\"\u003c/span\u003e]\n  \u003cspan class=f-k\u003eесли\u003c/span\u003e позиция \u003cspan class=f-o\u003eбольше\u003c/span\u003e (\u003cspan class=f-k\u003eдлина\u003c/span\u003e текст)\n    \u003cspan class=f-k\u003eто\u003c/span\u003e \u003cspan class=f-k\u003eпустой список\u003c/span\u003e\n    \u003cspan class=f-k\u003eиначе\u003c/span\u003e\n      \u003cspan class=f-k\u003eпусть\u003c/span\u003e буква \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-k\u003eподстрока\u003c/span\u003e текст \u003cspan class=f-k\u003eс\u003c/span\u003e позиция \u003cspan class=f-k\u003eпо\u003c/span\u003e позиция\n      \u003cspan class=f-q\u003e«Приписать строку в начало»\u003c/span\u003e \u003cspan class=f-k\u003eот\u003c/span\u003e буква \u003cspan class=f-k\u003eи\u003c/span\u003e (\u003cspan class=f-q\u003e«Символы с позиции»\u003c/span\u003e \u003cspan class=f-k\u003eот\u003c/span\u003e текст \u003cspan class=f-k\u003eи\u003c/span\u003e (позиция \u003cspan class=f-o\u003eплюс\u003c/span\u003e \u003cspan class=f-n\u003e1\u003c/span\u003e))\n\n\u003cspan class=f-d\u003eфункция\u003c/span\u003e \u003cspan class=f-q\u003e«Римское в число»\u003c/span\u003e\n  \u003cspan class=f-k\u003eпринимает\u003c/span\u003e текст: \u003cspan class=f-t\u003eстрока\u003c/span\u003e\n  \u003cspan class=f-k\u003eвозвращает\u003c/span\u003e \u003cspan class=f-t\u003eчисло\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Пример 1 из условия»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e текст \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-s\u003e\"III\"\u003c/span\u003e\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e \u003cspan class=f-n\u003e3\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Пример 2 из условия»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e текст \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-s\u003e\"LVIII\"\u003c/span\u003e\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e \u003cspan class=f-n\u003e58\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Пример 3 из условия»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e текст \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-s\u003e\"MCMXCIV\"\u003c/span\u003e\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e \u003cspan class=f-n\u003e1994\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Вычитание»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e текст \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-s\u003e\"IV\"\u003c/span\u003e\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e \u003cspan class=f-n\u003e4\u003c/span\u003e\n  \u003cspan class=f-k\u003eпусть\u003c/span\u003e начальное \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-d\u003eзапись\u003c/span\u003e \u003cspan class=f-q\u003e«Разбор римского»\u003c/span\u003e \u003cspan class=f-k\u003eс\u003c/span\u003e сумма \u003cspan class=f-o\u003eравным\u003c/span\u003e \u003cspan class=f-n\u003e0\u003c/span\u003e \u003cspan class=f-k\u003eи\u003c/span\u003e предыдущее \u003cspan class=f-o\u003eравным\u003c/span\u003e \u003cspan class=f-n\u003e0\u003c/span\u003e\n  \u003cspan class=f-k\u003eпусть\u003c/span\u003e итог \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-k\u003eсвёртка\u003c/span\u003e (\u003cspan class=f-q\u003e«Символы с позиции»\u003c/span\u003e \u003cspan class=f-k\u003eот\u003c/span\u003e текст \u003cspan class=f-k\u003eи\u003c/span\u003e \u003cspan class=f-n\u003e1\u003c/span\u003e) \u003cspan class=f-k\u003eначиная с\u003c/span\u003e начальное \u003cspan class=f-k\u003eкак\u003c/span\u003e акк \u003cspan class=f-k\u003eи\u003c/span\u003e буква\n    \u003cspan class=f-k\u003eпусть\u003c/span\u003e значение \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-q\u003e«Значение цифры»\u003c/span\u003e \u003cspan class=f-k\u003eот\u003c/span\u003e буква\n    \u003cspan class=f-k\u003eпусть\u003c/span\u003e поправка \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-k\u003eесли\u003c/span\u003e акк.предыдущее \u003cspan class=f-o\u003eменьше\u003c/span\u003e значение \u003cspan class=f-k\u003eто\u003c/span\u003e (\u003cspan class=f-n\u003e2\u003c/span\u003e \u003cspan class=f-o\u003eумножить на\u003c/span\u003e акк.предыдущее) \u003cspan class=f-k\u003eиначе\u003c/span\u003e \u003cspan class=f-n\u003e0\u003c/span\u003e\n    \u003cspan class=f-d\u003eзапись\u003c/span\u003e \u003cspan class=f-q\u003e«Разбор римского»\u003c/span\u003e \u003cspan class=f-k\u003eс\u003c/span\u003e сумма \u003cspan class=f-o\u003eравным\u003c/span\u003e (акк.сумма \u003cspan class=f-o\u003eплюс\u003c/span\u003e значение \u003cspan class=f-o\u003eминус\u003c/span\u003e поправка) \u003cspan class=f-k\u003eи\u003c/span\u003e предыдущее \u003cspan class=f-o\u003eравным\u003c/span\u003e значение\n  итог.сумма\n","leetcode/014-longest-common-prefix.flang":"\u003cspan class=f-d\u003eмодуль\u003c/span\u003e \u003cspan class=f-q\u003e«Общий префикс»\u003c/span\u003e\n\n\u003cspan class=f-c\u003e// LeetCode 14. Longest Common Prefix.\u003c/span\u003e\n\u003cspan class=f-c\u003e// Найти наибольший общий начальный кусок для списка слов.\u003c/span\u003e\n\u003cspan class=f-c\u003e//\u003c/span\u003e\n\u003cspan class=f-c\u003e// Обычная. Свёртка по списку слов тотальна, а вот сравнение двух слов идёт\u003c/span\u003e\n\u003cspan class=f-c\u003e// по позициям — рекурсия по числу, которую анализ завершаемости не\u003c/span\u003e\n\u003cspan class=f-c\u003e// принимает: «позиция плюс 1» не является частью значения «позиция».\u003c/span\u003e\n\u003cspan class=f-c\u003e// Ни один известный приём здесь не спасает: топливо (см. задачу 704) можно\u003c/span\u003e\n\u003cspan class=f-c\u003e// было бы взять из списка слов, но длина слова с длиной списка не связана.\u003c/span\u003e\n\n\u003cspan class=f-d\u003eфункция\u003c/span\u003e \u003cspan class=f-q\u003e«Общий префикс до позиции»\u003c/span\u003e\n  \u003cspan class=f-k\u003eпринимает\u003c/span\u003e первое: \u003cspan class=f-t\u003eстрока\u003c/span\u003e, второе: \u003cspan class=f-t\u003eстрока\u003c/span\u003e, позиция: \u003cspan class=f-t\u003eчисло\u003c/span\u003e\n  \u003cspan class=f-k\u003eвозвращает\u003c/span\u003e \u003cspan class=f-t\u003eстрока\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Совпало два символа»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e первое \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-s\u003e\"flower\"\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e второе \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-s\u003e\"flow\"\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e позиция \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-n\u003e1\u003c/span\u003e\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e \u003cspan class=f-s\u003e\"flow\"\u003c/span\u003e\n  \u003cspan class=f-k\u003eпусть\u003c/span\u003e предел \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-k\u003eесли\u003c/span\u003e (\u003cspan class=f-k\u003eдлина\u003c/span\u003e первое) \u003cspan class=f-o\u003eменьше\u003c/span\u003e (\u003cspan class=f-k\u003eдлина\u003c/span\u003e второе) \u003cspan class=f-k\u003eто\u003c/span\u003e (\u003cspan class=f-k\u003eдлина\u003c/span\u003e первое) \u003cspan class=f-k\u003eиначе\u003c/span\u003e (\u003cspan class=f-k\u003eдлина\u003c/span\u003e второе)\n  \u003cspan class=f-k\u003eесли\u003c/span\u003e позиция \u003cspan class=f-o\u003eбольше\u003c/span\u003e предел\n    \u003cspan class=f-k\u003eто\u003c/span\u003e \u003cspan class=f-k\u003eподстрока\u003c/span\u003e первое \u003cspan class=f-k\u003eс\u003c/span\u003e \u003cspan class=f-n\u003e1\u003c/span\u003e \u003cspan class=f-k\u003eпо\u003c/span\u003e предел\n    \u003cspan class=f-k\u003eиначе\u003c/span\u003e\n      \u003cspan class=f-k\u003eесли\u003c/span\u003e (\u003cspan class=f-k\u003eподстрока\u003c/span\u003e первое \u003cspan class=f-k\u003eс\u003c/span\u003e позиция \u003cspan class=f-k\u003eпо\u003c/span\u003e позиция) \u003cspan class=f-o\u003eравен\u003c/span\u003e (\u003cspan class=f-k\u003eподстрока\u003c/span\u003e второе \u003cspan class=f-k\u003eс\u003c/span\u003e позиция \u003cspan class=f-k\u003eпо\u003c/span\u003e позиция)\n        \u003cspan class=f-k\u003eто\u003c/span\u003e \u003cspan class=f-q\u003e«Общий префикс до позиции»\u003c/span\u003e \u003cspan class=f-k\u003eот\u003c/span\u003e первое \u003cspan class=f-k\u003eи\u003c/span\u003e второе \u003cspan class=f-k\u003eи\u003c/span\u003e (позиция \u003cspan class=f-o\u003eплюс\u003c/span\u003e \u003cspan class=f-n\u003e1\u003c/span\u003e)\n        \u003cspan class=f-k\u003eиначе\u003c/span\u003e \u003cspan class=f-k\u003eподстрока\u003c/span\u003e первое \u003cspan class=f-k\u003eс\u003c/span\u003e \u003cspan class=f-n\u003e1\u003c/span\u003e \u003cspan class=f-k\u003eпо\u003c/span\u003e (позиция \u003cspan class=f-o\u003eминус\u003c/span\u003e \u003cspan class=f-n\u003e1\u003c/span\u003e)\n\n\u003cspan class=f-d\u003eфункция\u003c/span\u003e \u003cspan class=f-q\u003e«Общий префикс двух»\u003c/span\u003e\n  \u003cspan class=f-k\u003eпринимает\u003c/span\u003e первое: \u003cspan class=f-t\u003eстрока\u003c/span\u003e, второе: \u003cspan class=f-t\u003eстрока\u003c/span\u003e\n  \u003cspan class=f-k\u003eвозвращает\u003c/span\u003e \u003cspan class=f-t\u003eстрока\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Общее начало»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e первое \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-s\u003e\"flower\"\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e второе \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-s\u003e\"flight\"\u003c/span\u003e\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e \u003cspan class=f-s\u003e\"fl\"\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Ничего общего»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e первое \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-s\u003e\"dog\"\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e второе \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-s\u003e\"racecar\"\u003c/span\u003e\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e \u003cspan class=f-s\u003e\"\"\u003c/span\u003e\n  \u003cspan class=f-q\u003e«Общий префикс до позиции»\u003c/span\u003e \u003cspan class=f-k\u003eот\u003c/span\u003e первое \u003cspan class=f-k\u003eи\u003c/span\u003e второе \u003cspan class=f-k\u003eи\u003c/span\u003e \u003cspan class=f-n\u003e1\u003c/span\u003e\n\n\u003cspan class=f-d\u003eфункция\u003c/span\u003e \u003cspan class=f-q\u003e«Наибольший общий префикс»\u003c/span\u003e\n  \u003cspan class=f-k\u003eпринимает\u003c/span\u003e слова: \u003cspan class=f-k\u003eсписок\u003c/span\u003e \u003cspan class=f-t\u003eстроки\u003c/span\u003e\n  \u003cspan class=f-k\u003eвозвращает\u003c/span\u003e \u003cspan class=f-t\u003eстрока\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Пример 1 из условия»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e слова \u003cspan class=f-o\u003eравно\u003c/span\u003e [\u003cspan class=f-s\u003e\"flower\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"flow\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"flight\"\u003c/span\u003e]\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e \u003cspan class=f-s\u003e\"fl\"\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Пример 2 из условия»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e слова \u003cspan class=f-o\u003eравно\u003c/span\u003e [\u003cspan class=f-s\u003e\"dog\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"racecar\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"car\"\u003c/span\u003e]\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e \u003cspan class=f-s\u003e\"\"\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Одно слово»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e слова \u003cspan class=f-o\u003eравно\u003c/span\u003e [\u003cspan class=f-s\u003e\"abc\"\u003c/span\u003e]\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e \u003cspan class=f-s\u003e\"abc\"\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Пустой список»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e слова \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-k\u003eпустой список\u003c/span\u003e\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e \u003cspan class=f-s\u003e\"\"\u003c/span\u003e\n  \u003cspan class=f-k\u003eразбор\u003c/span\u003e слова\n    \u003cspan class=f-k\u003eслучай\u003c/span\u003e \u003cspan class=f-k\u003eпусто\u003c/span\u003e\n      \u003cspan class=f-k\u003eто\u003c/span\u003e \u003cspan class=f-s\u003e\"\"\u003c/span\u003e\n    \u003cspan class=f-k\u003eслучай\u003c/span\u003e \u003cspan class=f-k\u003eголова и хвост\u003c/span\u003e\n      \u003cspan class=f-k\u003eсвёртка\u003c/span\u003e \u003cspan class=f-k\u003eхвост\u003c/span\u003e \u003cspan class=f-k\u003eначиная с\u003c/span\u003e \u003cspan class=f-k\u003eголова\u003c/span\u003e \u003cspan class=f-k\u003eкак\u003c/span\u003e акк \u003cspan class=f-k\u003eи\u003c/span\u003e слово \u003cspan class=f-o\u003e→\u003c/span\u003e \u003cspan class=f-q\u003e«Общий префикс двух»\u003c/span\u003e \u003cspan class=f-k\u003eот\u003c/span\u003e акк \u003cspan class=f-k\u003eи\u003c/span\u003e слово\n","leetcode/020-valid-parentheses.flang":"\u003cspan class=f-d\u003eмодуль\u003c/span\u003e \u003cspan class=f-q\u003e«Правильные скобки»\u003c/span\u003e\n\n\u003cspan class=f-c\u003e// LeetCode 20. Valid Parentheses.\u003c/span\u003e\n\u003cspan class=f-c\u003e// Проверить, что скобки трёх видов закрываются в правильном порядке.\u003c/span\u003e\n\u003cspan class=f-c\u003e//\u003c/span\u003e\n\u003cspan class=f-c\u003e// Две функции нарочно. «Скобки в списке» принимает список символов и\u003c/span\u003e\n\u003cspan class=f-c\u003e// тотальна: стек живёт в накопителе свёртки (обычной строкой — стек строк\u003c/span\u003e\n\u003cspan class=f-c\u003e// потребовал бы отдельного типа), а свёртка конечна по построению.\u003c/span\u003e\n\u003cspan class=f-c\u003e// «Скобки в строке» принимает строку, как в условии, и тотальной быть не\u003c/span\u003e\n\u003cspan class=f-c\u003e// может: чтобы получить символы, строку надо обойти, а убывание строки\u003c/span\u003e\n\u003cspan class=f-c\u003e// анализ завершаемости не признаёт — «пусто» и «голова и хвост» работают\u003c/span\u003e\n\u003cspan class=f-c\u003e// только со списком.\u003c/span\u003e\n\u003cspan class=f-c\u003e//\u003c/span\u003e\n\u003cspan class=f-c\u003e// Прерывать свёртку нельзя, поэтому ошибка запоминается в самом стеке:\u003c/span\u003e\n\u003cspan class=f-c\u003e// строка, начинающаяся с «!», означает «уже сломано».\u003c/span\u003e\n\n\u003cspan class=f-d\u003eтотальная\u003c/span\u003e \u003cspan class=f-d\u003eфункция\u003c/span\u003e \u003cspan class=f-q\u003e«Приписать строку в начало»\u003c/span\u003e\n  \u003cspan class=f-k\u003eпринимает\u003c/span\u003e первая: \u003cspan class=f-t\u003eстрока\u003c/span\u003e, элементы: \u003cspan class=f-k\u003eсписок\u003c/span\u003e \u003cspan class=f-t\u003eстроки\u003c/span\u003e\n  \u003cspan class=f-k\u003eвозвращает\u003c/span\u003e \u003cspan class=f-k\u003eсписок\u003c/span\u003e \u003cspan class=f-t\u003eстроки\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«В непустой»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e первая \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-s\u003e\"а\"\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e элементы \u003cspan class=f-o\u003eравно\u003c/span\u003e [\u003cspan class=f-s\u003e\"б\"\u003c/span\u003e]\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e [\u003cspan class=f-s\u003e\"а\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"б\"\u003c/span\u003e]\n  \u003cspan class=f-k\u003eсвёртка\u003c/span\u003e элементы \u003cspan class=f-k\u003eначиная с\u003c/span\u003e [первая] \u003cspan class=f-k\u003eкак\u003c/span\u003e акк \u003cspan class=f-k\u003eи\u003c/span\u003e эл \u003cspan class=f-o\u003e→\u003c/span\u003e \u003cspan class=f-k\u003eдобавить\u003c/span\u003e эл \u003cspan class=f-k\u003eк\u003c/span\u003e акк\n\n\u003cspan class=f-d\u003eтотальная\u003c/span\u003e \u003cspan class=f-d\u003eфункция\u003c/span\u003e \u003cspan class=f-q\u003e«Парная открывающая»\u003c/span\u003e\n  \u003cspan class=f-k\u003eпринимает\u003c/span\u003e закрывающая: \u003cspan class=f-t\u003eстрока\u003c/span\u003e\n  \u003cspan class=f-k\u003eвозвращает\u003c/span\u003e \u003cspan class=f-t\u003eстрока\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Круглая»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e закрывающая \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-s\u003e\")\"\u003c/span\u003e\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e \u003cspan class=f-s\u003e\"(\"\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Квадратная»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e закрывающая \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-s\u003e\"]\"\u003c/span\u003e\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e \u003cspan class=f-s\u003e\"[\"\u003c/span\u003e\n  \u003cspan class=f-k\u003eесли\u003c/span\u003e закрывающая \u003cspan class=f-o\u003eравен\u003c/span\u003e \u003cspan class=f-s\u003e\")\"\u003c/span\u003e\n    \u003cspan class=f-k\u003eто\u003c/span\u003e \u003cspan class=f-s\u003e\"(\"\u003c/span\u003e\n    \u003cspan class=f-k\u003eиначе\u003c/span\u003e\n      \u003cspan class=f-k\u003eесли\u003c/span\u003e закрывающая \u003cspan class=f-o\u003eравен\u003c/span\u003e \u003cspan class=f-s\u003e\"]\"\u003c/span\u003e \u003cspan class=f-k\u003eто\u003c/span\u003e \u003cspan class=f-s\u003e\"[\"\u003c/span\u003e \u003cspan class=f-k\u003eиначе\u003c/span\u003e \u003cspan class=f-s\u003e\"{\"\u003c/span\u003e\n\n\u003cspan class=f-d\u003eтотальная\u003c/span\u003e \u003cspan class=f-d\u003eфункция\u003c/span\u003e \u003cspan class=f-q\u003e«Скобки в списке»\u003c/span\u003e\n  \u003cspan class=f-k\u003eпринимает\u003c/span\u003e символы: \u003cspan class=f-k\u003eсписок\u003c/span\u003e \u003cspan class=f-t\u003eстроки\u003c/span\u003e\n  \u003cspan class=f-k\u003eвозвращает\u003c/span\u003e \u003cspan class=f-t\u003eпризнак\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Пример 1 из условия»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e символы \u003cspan class=f-o\u003eравно\u003c/span\u003e [\u003cspan class=f-s\u003e\"(\"\u003c/span\u003e, \u003cspan class=f-s\u003e\")\"\u003c/span\u003e]\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e \u003cspan class=f-i\u003eда\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Пример 2 из условия»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e символы \u003cspan class=f-o\u003eравно\u003c/span\u003e [\u003cspan class=f-s\u003e\"(\"\u003c/span\u003e, \u003cspan class=f-s\u003e\")\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"[\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"]\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"{\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"}\"\u003c/span\u003e]\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e \u003cspan class=f-i\u003eда\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Пример 3 из условия»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e символы \u003cspan class=f-o\u003eравно\u003c/span\u003e [\u003cspan class=f-s\u003e\"(\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"]\"\u003c/span\u003e]\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e \u003cspan class=f-i\u003eнет\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Незакрытая скобка»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e символы \u003cspan class=f-o\u003eравно\u003c/span\u003e [\u003cspan class=f-s\u003e\"(\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"[\"\u003c/span\u003e]\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e \u003cspan class=f-i\u003eнет\u003c/span\u003e\n  \u003cspan class=f-k\u003eпусть\u003c/span\u003e стек \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-k\u003eсвёртка\u003c/span\u003e символы \u003cspan class=f-k\u003eначиная с\u003c/span\u003e \u003cspan class=f-s\u003e\"\"\u003c/span\u003e \u003cspan class=f-k\u003eкак\u003c/span\u003e акк \u003cspan class=f-k\u003eи\u003c/span\u003e буква\n    \u003cspan class=f-k\u003eесли\u003c/span\u003e акк \u003cspan class=f-k\u003eначинается с\u003c/span\u003e \u003cspan class=f-s\u003e\"!\"\u003c/span\u003e\n      \u003cspan class=f-k\u003eто\u003c/span\u003e акк\n      \u003cspan class=f-k\u003eиначе\u003c/span\u003e\n        \u003cspan class=f-k\u003eесли\u003c/span\u003e \u003cspan class=f-s\u003e\"([{\"\u003c/span\u003e \u003cspan class=f-k\u003eсодержит\u003c/span\u003e буква\n          \u003cspan class=f-k\u003eто\u003c/span\u003e \u003cspan class=f-k\u003eсоединить\u003c/span\u003e акк \u003cspan class=f-k\u003eс\u003c/span\u003e буква\n          \u003cspan class=f-k\u003eиначе\u003c/span\u003e\n            \u003cspan class=f-k\u003eесли\u003c/span\u003e (\u003cspan class=f-k\u003eдлина\u003c/span\u003e акк) \u003cspan class=f-o\u003eравен\u003c/span\u003e \u003cspan class=f-n\u003e0\u003c/span\u003e\n              \u003cspan class=f-k\u003eто\u003c/span\u003e \u003cspan class=f-s\u003e\"!\"\u003c/span\u003e\n              \u003cspan class=f-k\u003eиначе\u003c/span\u003e\n                \u003cspan class=f-k\u003eпусть\u003c/span\u003e верх \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-k\u003eподстрока\u003c/span\u003e акк \u003cspan class=f-k\u003eс\u003c/span\u003e (\u003cspan class=f-k\u003eдлина\u003c/span\u003e акк) \u003cspan class=f-k\u003eпо\u003c/span\u003e (\u003cspan class=f-k\u003eдлина\u003c/span\u003e акк)\n                \u003cspan class=f-k\u003eесли\u003c/span\u003e верх \u003cspan class=f-o\u003eравен\u003c/span\u003e (\u003cspan class=f-q\u003e«Парная открывающая»\u003c/span\u003e \u003cspan class=f-k\u003eот\u003c/span\u003e буква)\n                  \u003cspan class=f-k\u003eто\u003c/span\u003e \u003cspan class=f-k\u003eподстрока\u003c/span\u003e акк \u003cspan class=f-k\u003eс\u003c/span\u003e \u003cspan class=f-n\u003e1\u003c/span\u003e \u003cspan class=f-k\u003eпо\u003c/span\u003e ((\u003cspan class=f-k\u003eдлина\u003c/span\u003e акк) \u003cspan class=f-o\u003eминус\u003c/span\u003e \u003cspan class=f-n\u003e1\u003c/span\u003e)\n                  \u003cspan class=f-k\u003eиначе\u003c/span\u003e \u003cspan class=f-s\u003e\"!\"\u003c/span\u003e\n  стек \u003cspan class=f-o\u003eравен\u003c/span\u003e \u003cspan class=f-s\u003e\"\"\u003c/span\u003e\n\n\u003cspan class=f-d\u003eфункция\u003c/span\u003e \u003cspan class=f-q\u003e«Символы с позиции»\u003c/span\u003e\n  \u003cspan class=f-k\u003eпринимает\u003c/span\u003e текст: \u003cspan class=f-t\u003eстрока\u003c/span\u003e, позиция: \u003cspan class=f-t\u003eчисло\u003c/span\u003e\n  \u003cspan class=f-k\u003eвозвращает\u003c/span\u003e \u003cspan class=f-k\u003eсписок\u003c/span\u003e \u003cspan class=f-t\u003eстроки\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«С последнего символа»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e текст \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-s\u003e\"()\"\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e позиция \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-n\u003e2\u003c/span\u003e\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e [\u003cspan class=f-s\u003e\")\"\u003c/span\u003e]\n  \u003cspan class=f-k\u003eесли\u003c/span\u003e позиция \u003cspan class=f-o\u003eбольше\u003c/span\u003e (\u003cspan class=f-k\u003eдлина\u003c/span\u003e текст)\n    \u003cspan class=f-k\u003eто\u003c/span\u003e \u003cspan class=f-k\u003eпустой список\u003c/span\u003e\n    \u003cspan class=f-k\u003eиначе\u003c/span\u003e\n      \u003cspan class=f-k\u003eпусть\u003c/span\u003e буква \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-k\u003eподстрока\u003c/span\u003e текст \u003cspan class=f-k\u003eс\u003c/span\u003e позиция \u003cspan class=f-k\u003eпо\u003c/span\u003e позиция\n      \u003cspan class=f-q\u003e«Приписать строку в начало»\u003c/span\u003e \u003cspan class=f-k\u003eот\u003c/span\u003e буква \u003cspan class=f-k\u003eи\u003c/span\u003e (\u003cspan class=f-q\u003e«Символы с позиции»\u003c/span\u003e \u003cspan class=f-k\u003eот\u003c/span\u003e текст \u003cspan class=f-k\u003eи\u003c/span\u003e (позиция \u003cspan class=f-o\u003eплюс\u003c/span\u003e \u003cspan class=f-n\u003e1\u003c/span\u003e))\n\n\u003cspan class=f-d\u003eфункция\u003c/span\u003e \u003cspan class=f-q\u003e«Скобки в строке»\u003c/span\u003e\n  \u003cspan class=f-k\u003eпринимает\u003c/span\u003e текст: \u003cspan class=f-t\u003eстрока\u003c/span\u003e\n  \u003cspan class=f-k\u003eвозвращает\u003c/span\u003e \u003cspan class=f-t\u003eпризнак\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Пример 1 из условия»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e текст \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-s\u003e\"()\"\u003c/span\u003e\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e \u003cspan class=f-i\u003eда\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Пример 2 из условия»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e текст \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-s\u003e\"()[]{}\"\u003c/span\u003e\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e \u003cspan class=f-i\u003eда\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Пример 3 из условия»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e текст \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-s\u003e\"(]\"\u003c/span\u003e\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e \u003cspan class=f-i\u003eнет\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Вложенные скобки»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e текст \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-s\u003e\"{[()]}\"\u003c/span\u003e\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e \u003cspan class=f-i\u003eда\u003c/span\u003e\n  \u003cspan class=f-q\u003e«Скобки в списке»\u003c/span\u003e \u003cspan class=f-k\u003eот\u003c/span\u003e (\u003cspan class=f-q\u003e«Символы с позиции»\u003c/span\u003e \u003cspan class=f-k\u003eот\u003c/span\u003e текст \u003cspan class=f-k\u003eи\u003c/span\u003e \u003cspan class=f-n\u003e1\u003c/span\u003e)\n","leetcode/026-remove-duplicates-from-sorted-array.flang":"\u003cspan class=f-d\u003eмодуль\u003c/span\u003e \u003cspan class=f-q\u003e«Удалить повторы»\u003c/span\u003e\n\n\u003cspan class=f-c\u003e// LeetCode 26. Remove Duplicates from Sorted Array.\u003c/span\u003e\n\u003cspan class=f-c\u003e// Из отсортированного списка убрать повторы. В условии просят изменить массив\u003c/span\u003e\n\u003cspan class=f-c\u003e// на месте и вернуть число уникальных; изменяемых массивов в языке нет и быть\u003c/span\u003e\n\u003cspan class=f-c\u003e// не может — значения flang неизменяемы, — поэтому возвращается новый список,\u003c/span\u003e\n\u003cspan class=f-c\u003e// а «число уникальных» вынесено отдельной функцией.\u003c/span\u003e\n\u003cspan class=f-c\u003e//\u003c/span\u003e\n\u003cspan class=f-c\u003e// Тотальная: свёртка по списку, рекурсии нет вовсе.\u003c/span\u003e\n\n\u003cspan class=f-d\u003eтотальная\u003c/span\u003e \u003cspan class=f-d\u003eфункция\u003c/span\u003e \u003cspan class=f-q\u003e«Без повторов»\u003c/span\u003e\n  \u003cspan class=f-k\u003eпринимает\u003c/span\u003e элементы: \u003cspan class=f-k\u003eсписок\u003c/span\u003e \u003cspan class=f-t\u003eчисла\u003c/span\u003e\n  \u003cspan class=f-k\u003eвозвращает\u003c/span\u003e \u003cspan class=f-k\u003eсписок\u003c/span\u003e \u003cspan class=f-t\u003eчисла\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Пример 1 из условия»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e элементы \u003cspan class=f-o\u003eравно\u003c/span\u003e [\u003cspan class=f-n\u003e1\u003c/span\u003e, \u003cspan class=f-n\u003e1\u003c/span\u003e, \u003cspan class=f-n\u003e2\u003c/span\u003e]\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e [\u003cspan class=f-n\u003e1\u003c/span\u003e, \u003cspan class=f-n\u003e2\u003c/span\u003e]\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Пример 2 из условия»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e элементы \u003cspan class=f-o\u003eравно\u003c/span\u003e [\u003cspan class=f-n\u003e0\u003c/span\u003e, \u003cspan class=f-n\u003e0\u003c/span\u003e, \u003cspan class=f-n\u003e1\u003c/span\u003e, \u003cspan class=f-n\u003e1\u003c/span\u003e, \u003cspan class=f-n\u003e1\u003c/span\u003e, \u003cspan class=f-n\u003e2\u003c/span\u003e, \u003cspan class=f-n\u003e2\u003c/span\u003e, \u003cspan class=f-n\u003e3\u003c/span\u003e, \u003cspan class=f-n\u003e3\u003c/span\u003e, \u003cspan class=f-n\u003e4\u003c/span\u003e]\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e [\u003cspan class=f-n\u003e0\u003c/span\u003e, \u003cspan class=f-n\u003e1\u003c/span\u003e, \u003cspan class=f-n\u003e2\u003c/span\u003e, \u003cspan class=f-n\u003e3\u003c/span\u003e, \u003cspan class=f-n\u003e4\u003c/span\u003e]\n  \u003cspan class=f-k\u003eсвёртка\u003c/span\u003e элементы \u003cspan class=f-k\u003eначиная с\u003c/span\u003e \u003cspan class=f-k\u003eпустой список\u003c/span\u003e \u003cspan class=f-k\u003eкак\u003c/span\u003e акк \u003cspan class=f-k\u003eи\u003c/span\u003e эл\n    \u003cspan class=f-k\u003eесли\u003c/span\u003e акк \u003cspan class=f-k\u003eсодержит\u003c/span\u003e эл \u003cspan class=f-k\u003eто\u003c/span\u003e акк \u003cspan class=f-k\u003eиначе\u003c/span\u003e \u003cspan class=f-k\u003eдобавить\u003c/span\u003e эл \u003cspan class=f-k\u003eк\u003c/span\u003e акк\n\n\u003cspan class=f-d\u003eтотальная\u003c/span\u003e \u003cspan class=f-d\u003eфункция\u003c/span\u003e \u003cspan class=f-q\u003e«Сколько уникальных»\u003c/span\u003e\n  \u003cspan class=f-k\u003eпринимает\u003c/span\u003e элементы: \u003cspan class=f-k\u003eсписок\u003c/span\u003e \u003cspan class=f-t\u003eчисла\u003c/span\u003e\n  \u003cspan class=f-k\u003eвозвращает\u003c/span\u003e \u003cspan class=f-t\u003eчисло\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Пример 1 из условия»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e элементы \u003cspan class=f-o\u003eравно\u003c/span\u003e [\u003cspan class=f-n\u003e1\u003c/span\u003e, \u003cspan class=f-n\u003e1\u003c/span\u003e, \u003cspan class=f-n\u003e2\u003c/span\u003e]\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e \u003cspan class=f-n\u003e2\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Пустой список»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e элементы \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-k\u003eпустой список\u003c/span\u003e\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e \u003cspan class=f-n\u003e0\u003c/span\u003e\n  \u003cspan class=f-k\u003eдлина\u003c/span\u003e (\u003cspan class=f-q\u003e«Без повторов»\u003c/span\u003e \u003cspan class=f-k\u003eот\u003c/span\u003e элементы)\n","leetcode/049-group-anagrams.flang":"\u003cspan class=f-d\u003eмодуль\u003c/span\u003e \u003cspan class=f-q\u003e«Группировка анаграмм»\u003c/span\u003e\n\n\u003cspan class=f-c\u003e// LeetCode 49. Group Anagrams.\u003c/span\u003e\n\u003cspan class=f-c\u003e// Разложить слова по группам: в одной группе — слова из одних и тех же букв.\u003c/span\u003e\n\u003cspan class=f-c\u003e//\u003c/span\u003e\n\u003cspan class=f-c\u003e// Тотальная. Каноническое решение — словарь «подпись → список слов», а\u003c/span\u003e\n\u003cspan class=f-c\u003e// ассоциативных массивов в языке нет. Замена: список записей «Группа» и\u003c/span\u003e\n\u003cspan class=f-c\u003e// линейный поиск по ключу. Подпись слова тоже строится без обхода символов —\u003c/span\u003e\n\u003cspan class=f-c\u003e// свёрткой по алфавиту с подсчётом через «разделить» (тот же приём, что в\u003c/span\u003e\n\u003cspan class=f-c\u003e// задаче 242). Порядок групп — порядок первого появления.\u003c/span\u003e\n\u003cspan class=f-c\u003e//\u003c/span\u003e\n\u003cspan class=f-c\u003e// Цена отсутствия словаря: O(слов × групп × 26) вместо O(суммарной длины).\u003c/span\u003e\n\n\u003cspan class=f-d\u003eобъект\u003c/span\u003e \u003cspan class=f-q\u003e«Группа»\u003c/span\u003e\n  ключ \u003cspan class=f-k\u003eявляется\u003c/span\u003e \u003cspan class=f-t\u003eстрокой\u003c/span\u003e\n  слова \u003cspan class=f-k\u003eявляется\u003c/span\u003e \u003cspan class=f-k\u003eсписок\u003c/span\u003e \u003cspan class=f-t\u003eстроки\u003c/span\u003e\n\n\u003cspan class=f-d\u003eтотальная\u003c/span\u003e \u003cspan class=f-d\u003eфункция\u003c/span\u003e \u003cspan class=f-q\u003e«Счёт буквы»\u003c/span\u003e\n  \u003cspan class=f-k\u003eпринимает\u003c/span\u003e текст: \u003cspan class=f-t\u003eстрока\u003c/span\u003e, буква: \u003cspan class=f-t\u003eстрока\u003c/span\u003e\n  \u003cspan class=f-k\u003eвозвращает\u003c/span\u003e \u003cspan class=f-t\u003eчисло\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Две буквы a»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e текст \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-s\u003e\"abac\"\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e буква \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-s\u003e\"a\"\u003c/span\u003e\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e \u003cspan class=f-n\u003e2\u003c/span\u003e\n  (\u003cspan class=f-k\u003eдлина\u003c/span\u003e (\u003cspan class=f-k\u003eразделить\u003c/span\u003e текст \u003cspan class=f-k\u003eпо\u003c/span\u003e буква)) \u003cspan class=f-o\u003eминус\u003c/span\u003e \u003cspan class=f-n\u003e1\u003c/span\u003e\n\n\u003cspan class=f-d\u003eтотальная\u003c/span\u003e \u003cspan class=f-d\u003eфункция\u003c/span\u003e \u003cspan class=f-q\u003e«Подпись»\u003c/span\u003e\n  \u003cspan class=f-k\u003eпринимает\u003c/span\u003e слово: \u003cspan class=f-t\u003eстрока\u003c/span\u003e\n  \u003cspan class=f-k\u003eвозвращает\u003c/span\u003e \u003cspan class=f-t\u003eстрока\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Анаграммы дают одну подпись»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e слово \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-s\u003e\"eat\"\u003c/span\u003e\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e \u003cspan class=f-s\u003e\"1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,\"\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Другое слово — другая подпись»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e слово \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-s\u003e\"bat\"\u003c/span\u003e\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e \u003cspan class=f-s\u003e\"1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,\"\u003c/span\u003e\n  \u003cspan class=f-k\u003eсвёртка\u003c/span\u003e [\u003cspan class=f-s\u003e\"a\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"b\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"c\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"d\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"e\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"f\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"g\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"h\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"i\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"j\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"k\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"l\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"m\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"n\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"o\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"p\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"q\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"r\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"s\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"t\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"u\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"v\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"w\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"x\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"y\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"z\"\u003c/span\u003e] \u003cspan class=f-k\u003eначиная с\u003c/span\u003e \u003cspan class=f-s\u003e\"\"\u003c/span\u003e \u003cspan class=f-k\u003eкак\u003c/span\u003e акк \u003cspan class=f-k\u003eи\u003c/span\u003e буква\n    \u003cspan class=f-k\u003eсоединить\u003c/span\u003e (\u003cspan class=f-k\u003eсоединить\u003c/span\u003e акк \u003cspan class=f-k\u003eс\u003c/span\u003e (\u003cspan class=f-k\u003eк строке\u003c/span\u003e (\u003cspan class=f-q\u003e«Счёт буквы»\u003c/span\u003e \u003cspan class=f-k\u003eот\u003c/span\u003e слово \u003cspan class=f-k\u003eи\u003c/span\u003e буква))) \u003cspan class=f-k\u003eс\u003c/span\u003e \u003cspan class=f-s\u003e\",\"\u003c/span\u003e\n\n\u003cspan class=f-d\u003eтотальная\u003c/span\u003e \u003cspan class=f-d\u003eфункция\u003c/span\u003e \u003cspan class=f-q\u003e«Есть группа»\u003c/span\u003e\n  \u003cspan class=f-k\u003eпринимает\u003c/span\u003e группы: \u003cspan class=f-k\u003eсписок\u003c/span\u003e \u003cspan class=f-q\u003e«Группа»\u003c/span\u003e, ключ: \u003cspan class=f-t\u003eстрока\u003c/span\u003e\n  \u003cspan class=f-k\u003eвозвращает\u003c/span\u003e \u003cspan class=f-t\u003eпризнак\u003c/span\u003e\n  \u003cspan class=f-k\u003eсвёртка\u003c/span\u003e группы \u003cspan class=f-k\u003eначиная с\u003c/span\u003e \u003cspan class=f-i\u003eнет\u003c/span\u003e \u003cspan class=f-k\u003eкак\u003c/span\u003e акк \u003cspan class=f-k\u003eи\u003c/span\u003e группа\n    \u003cspan class=f-k\u003eесли\u003c/span\u003e акк \u003cspan class=f-o\u003eравен\u003c/span\u003e \u003cspan class=f-i\u003eда\u003c/span\u003e \u003cspan class=f-k\u003eто\u003c/span\u003e \u003cspan class=f-i\u003eда\u003c/span\u003e \u003cspan class=f-k\u003eиначе\u003c/span\u003e группа.ключ \u003cspan class=f-o\u003eравен\u003c/span\u003e ключ\n\n\u003cspan class=f-d\u003eтотальная\u003c/span\u003e \u003cspan class=f-d\u003eфункция\u003c/span\u003e \u003cspan class=f-q\u003e«Добавить слово»\u003c/span\u003e\n  \u003cspan class=f-k\u003eпринимает\u003c/span\u003e группы: \u003cspan class=f-k\u003eсписок\u003c/span\u003e \u003cspan class=f-q\u003e«Группа»\u003c/span\u003e, ключ: \u003cspan class=f-t\u003eстрока\u003c/span\u003e, слово: \u003cspan class=f-t\u003eстрока\u003c/span\u003e\n  \u003cspan class=f-k\u003eвозвращает\u003c/span\u003e \u003cspan class=f-k\u003eсписок\u003c/span\u003e \u003cspan class=f-q\u003e«Группа»\u003c/span\u003e\n  \u003cspan class=f-k\u003eесли\u003c/span\u003e \u003cspan class=f-q\u003e«Есть группа»\u003c/span\u003e \u003cspan class=f-k\u003eот\u003c/span\u003e группы \u003cspan class=f-k\u003eи\u003c/span\u003e ключ\n    \u003cspan class=f-k\u003eто\u003c/span\u003e\n      \u003cspan class=f-k\u003eотобразить\u003c/span\u003e группы \u003cspan class=f-k\u003eкак\u003c/span\u003e группа\n        \u003cspan class=f-k\u003eесли\u003c/span\u003e группа.ключ \u003cspan class=f-o\u003eравен\u003c/span\u003e ключ\n          \u003cspan class=f-k\u003eто\u003c/span\u003e \u003cspan class=f-d\u003eзапись\u003c/span\u003e \u003cspan class=f-q\u003e«Группа»\u003c/span\u003e \u003cspan class=f-k\u003eс\u003c/span\u003e ключ \u003cspan class=f-o\u003eравным\u003c/span\u003e ключ \u003cspan class=f-k\u003eи\u003c/span\u003e слова \u003cspan class=f-o\u003eравным\u003c/span\u003e (\u003cspan class=f-k\u003eдобавить\u003c/span\u003e слово \u003cspan class=f-k\u003eк\u003c/span\u003e группа.слова)\n          \u003cspan class=f-k\u003eиначе\u003c/span\u003e группа\n    \u003cspan class=f-k\u003eиначе\u003c/span\u003e \u003cspan class=f-k\u003eдобавить\u003c/span\u003e (\u003cspan class=f-d\u003eзапись\u003c/span\u003e \u003cspan class=f-q\u003e«Группа»\u003c/span\u003e \u003cspan class=f-k\u003eс\u003c/span\u003e ключ \u003cspan class=f-o\u003eравным\u003c/span\u003e ключ \u003cspan class=f-k\u003eи\u003c/span\u003e слова \u003cspan class=f-o\u003eравным\u003c/span\u003e [слово]) \u003cspan class=f-k\u003eк\u003c/span\u003e группы\n\n\u003cspan class=f-d\u003eтотальная\u003c/span\u003e \u003cspan class=f-d\u003eфункция\u003c/span\u003e \u003cspan class=f-q\u003e«Группировать анаграммы»\u003c/span\u003e\n  \u003cspan class=f-k\u003eпринимает\u003c/span\u003e слова: \u003cspan class=f-k\u003eсписок\u003c/span\u003e \u003cspan class=f-t\u003eстроки\u003c/span\u003e\n  \u003cspan class=f-k\u003eвозвращает\u003c/span\u003e \u003cspan class=f-k\u003eсписок\u003c/span\u003e \u003cspan class=f-k\u003eсписок\u003c/span\u003e \u003cspan class=f-t\u003eстроки\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Пример 1 из условия»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e слова \u003cspan class=f-o\u003eравно\u003c/span\u003e [\u003cspan class=f-s\u003e\"eat\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"tea\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"tan\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"ate\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"nat\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"bat\"\u003c/span\u003e]\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e [[\u003cspan class=f-s\u003e\"eat\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"tea\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"ate\"\u003c/span\u003e], [\u003cspan class=f-s\u003e\"tan\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"nat\"\u003c/span\u003e], [\u003cspan class=f-s\u003e\"bat\"\u003c/span\u003e]]\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Пример 2 из условия»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e слова \u003cspan class=f-o\u003eравно\u003c/span\u003e [\u003cspan class=f-s\u003e\"\"\u003c/span\u003e]\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e [[\u003cspan class=f-s\u003e\"\"\u003c/span\u003e]]\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Пример 3 из условия»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e слова \u003cspan class=f-o\u003eравно\u003c/span\u003e [\u003cspan class=f-s\u003e\"a\"\u003c/span\u003e]\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e [[\u003cspan class=f-s\u003e\"a\"\u003c/span\u003e]]\n  \u003cspan class=f-k\u003eпусть\u003c/span\u003e группы \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-k\u003eсвёртка\u003c/span\u003e слова \u003cspan class=f-k\u003eначиная с\u003c/span\u003e \u003cspan class=f-k\u003eпустой список\u003c/span\u003e \u003cspan class=f-k\u003eкак\u003c/span\u003e акк \u003cspan class=f-k\u003eи\u003c/span\u003e слово\n    \u003cspan class=f-q\u003e«Добавить слово»\u003c/span\u003e \u003cspan class=f-k\u003eот\u003c/span\u003e акк \u003cspan class=f-k\u003eи\u003c/span\u003e (\u003cspan class=f-q\u003e«Подпись»\u003c/span\u003e \u003cspan class=f-k\u003eот\u003c/span\u003e слово) \u003cspan class=f-k\u003eи\u003c/span\u003e слово\n  \u003cspan class=f-k\u003eотобразить\u003c/span\u003e группы \u003cspan class=f-k\u003eкак\u003c/span\u003e группа \u003cspan class=f-o\u003e→\u003c/span\u003e группа.слова\n","leetcode/053-maximum-subarray.flang":"\u003cspan class=f-d\u003eмодуль\u003c/span\u003e \u003cspan class=f-q\u003e«Максимальная подпоследовательность»\u003c/span\u003e\n\n\u003cspan class=f-c\u003e// LeetCode 53. Maximum Subarray.\u003c/span\u003e\n\u003cspan class=f-c\u003e// Найти наибольшую сумму непрерывного куска списка (алгоритм Кадане).\u003c/span\u003e\n\u003cspan class=f-c\u003e//\u003c/span\u003e\n\u003cspan class=f-c\u003e// Тотальная. Это самая «динамическая» из задач, которые язык принимает без\u003c/span\u003e\n\u003cspan class=f-c\u003e// сопротивления: состояние Кадане — два числа, а два числа складываются в\u003c/span\u003e\n\u003cspan class=f-c\u003e// запись, и запись отлично живёт накопителем свёртки. Настоящая динамика\u003c/span\u003e\n\u003cspan class=f-c\u003e// с таблицей (Coin Change, Edit Distance) так не переносится — там нужен\u003c/span\u003e\n\u003cspan class=f-c\u003e// массив с произвольным доступом по индексу, которого в языке нет.\u003c/span\u003e\n\n\u003cspan class=f-d\u003eобъект\u003c/span\u003e \u003cspan class=f-q\u003e«Состояние Кадане»\u003c/span\u003e\n  текущая \u003cspan class=f-k\u003eявляется\u003c/span\u003e \u003cspan class=f-t\u003eчислом\u003c/span\u003e\n  лучшая \u003cspan class=f-k\u003eявляется\u003c/span\u003e \u003cspan class=f-t\u003eчислом\u003c/span\u003e\n\n\u003cspan class=f-d\u003eтотальная\u003c/span\u003e \u003cspan class=f-d\u003eфункция\u003c/span\u003e \u003cspan class=f-q\u003e«Наибольшая сумма куска»\u003c/span\u003e\n  \u003cspan class=f-k\u003eпринимает\u003c/span\u003e элементы: \u003cspan class=f-k\u003eсписок\u003c/span\u003e \u003cspan class=f-t\u003eчисла\u003c/span\u003e\n  \u003cspan class=f-k\u003eвозвращает\u003c/span\u003e \u003cspan class=f-t\u003eчисло\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Пример 1 из условия»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e элементы \u003cspan class=f-o\u003eравно\u003c/span\u003e [\u003cspan class=f-n\u003e-2\u003c/span\u003e, \u003cspan class=f-n\u003e1\u003c/span\u003e, \u003cspan class=f-n\u003e-3\u003c/span\u003e, \u003cspan class=f-n\u003e4\u003c/span\u003e, \u003cspan class=f-n\u003e-1\u003c/span\u003e, \u003cspan class=f-n\u003e2\u003c/span\u003e, \u003cspan class=f-n\u003e1\u003c/span\u003e, \u003cspan class=f-n\u003e-5\u003c/span\u003e, \u003cspan class=f-n\u003e4\u003c/span\u003e]\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e \u003cspan class=f-n\u003e6\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Пример 2 из условия»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e элементы \u003cspan class=f-o\u003eравно\u003c/span\u003e [\u003cspan class=f-n\u003e1\u003c/span\u003e]\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e \u003cspan class=f-n\u003e1\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Пример 3 из условия»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e элементы \u003cspan class=f-o\u003eравно\u003c/span\u003e [\u003cspan class=f-n\u003e5\u003c/span\u003e, \u003cspan class=f-n\u003e4\u003c/span\u003e, \u003cspan class=f-n\u003e-1\u003c/span\u003e, \u003cspan class=f-n\u003e7\u003c/span\u003e, \u003cspan class=f-n\u003e8\u003c/span\u003e]\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e \u003cspan class=f-n\u003e23\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Пустой список»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e элементы \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-k\u003eпустой список\u003c/span\u003e\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e \u003cspan class=f-n\u003e0\u003c/span\u003e\n  \u003cspan class=f-k\u003eразбор\u003c/span\u003e элементов\n    \u003cspan class=f-k\u003eслучай\u003c/span\u003e \u003cspan class=f-k\u003eпусто\u003c/span\u003e\n      \u003cspan class=f-k\u003eто\u003c/span\u003e \u003cspan class=f-n\u003e0\u003c/span\u003e\n    \u003cspan class=f-k\u003eслучай\u003c/span\u003e \u003cspan class=f-k\u003eголова и хвост\u003c/span\u003e\n      \u003cspan class=f-k\u003eпусть\u003c/span\u003e начальное \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-d\u003eзапись\u003c/span\u003e \u003cspan class=f-q\u003e«Состояние Кадане»\u003c/span\u003e \u003cspan class=f-k\u003eс\u003c/span\u003e текущая \u003cspan class=f-o\u003eравным\u003c/span\u003e \u003cspan class=f-k\u003eголова\u003c/span\u003e \u003cspan class=f-k\u003eи\u003c/span\u003e лучшая \u003cspan class=f-o\u003eравным\u003c/span\u003e \u003cspan class=f-k\u003eголова\u003c/span\u003e\n      \u003cspan class=f-k\u003eпусть\u003c/span\u003e итог \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-k\u003eсвёртка\u003c/span\u003e \u003cspan class=f-k\u003eхвост\u003c/span\u003e \u003cspan class=f-k\u003eначиная с\u003c/span\u003e начальное \u003cspan class=f-k\u003eкак\u003c/span\u003e акк \u003cspan class=f-k\u003eи\u003c/span\u003e эл\n        \u003cspan class=f-k\u003eпусть\u003c/span\u003e продолженная \u003cspan class=f-o\u003eравно\u003c/span\u003e акк.текущая \u003cspan class=f-o\u003eплюс\u003c/span\u003e эл\n        \u003cspan class=f-k\u003eпусть\u003c/span\u003e текущая \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-k\u003eесли\u003c/span\u003e продолженная \u003cspan class=f-o\u003eбольше\u003c/span\u003e эл \u003cspan class=f-k\u003eто\u003c/span\u003e продолженная \u003cspan class=f-k\u003eиначе\u003c/span\u003e эл\n        \u003cspan class=f-k\u003eпусть\u003c/span\u003e лучшая \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-k\u003eесли\u003c/span\u003e текущая \u003cspan class=f-o\u003eбольше\u003c/span\u003e акк.лучшая \u003cspan class=f-k\u003eто\u003c/span\u003e текущая \u003cspan class=f-k\u003eиначе\u003c/span\u003e акк.лучшая\n        \u003cspan class=f-d\u003eзапись\u003c/span\u003e \u003cspan class=f-q\u003e«Состояние Кадане»\u003c/span\u003e \u003cspan class=f-k\u003eс\u003c/span\u003e текущая \u003cspan class=f-o\u003eравным\u003c/span\u003e текущая \u003cspan class=f-k\u003eи\u003c/span\u003e лучшая \u003cspan class=f-o\u003eравным\u003c/span\u003e лучшая\n      итог.лучшая\n","leetcode/066-plus-one.flang":"\u003cspan class=f-d\u003eмодуль\u003c/span\u003e \u003cspan class=f-q\u003e«Прибавить единицу»\u003c/span\u003e\n\n\u003cspan class=f-c\u003e// LeetCode 66. Plus One.\u003c/span\u003e\n\u003cspan class=f-c\u003e// Список цифр — большое число. Прибавить к нему единицу.\u003c/span\u003e\n\u003cspan class=f-c\u003e//\u003c/span\u003e\n\u003cspan class=f-c\u003e// Тотальная. Перенос идёт справа налево, а свёртка идёт слева направо,\u003c/span\u003e\n\u003cspan class=f-c\u003e// поэтому список сначала обращается, потом сворачивается, потом обращается\u003c/span\u003e\n\u003cspan class=f-c\u003e// обратно. Обращение выражается свёрткой, а не встроенной формой: приписать\u003c/span\u003e\n\u003cspan class=f-c\u003e// элемент в начало списка встроенным «добавить … к …» нельзя — оно\u003c/span\u003e\n\u003cspan class=f-c\u003e// дописывает в конец.\u003c/span\u003e\n\n\u003cspan class=f-d\u003eобъект\u003c/span\u003e \u003cspan class=f-q\u003e«Перенос»\u003c/span\u003e\n  перенос \u003cspan class=f-k\u003eявляется\u003c/span\u003e \u003cspan class=f-t\u003eчислом\u003c/span\u003e\n  цифры \u003cspan class=f-k\u003eявляется\u003c/span\u003e \u003cspan class=f-k\u003eсписок\u003c/span\u003e \u003cspan class=f-t\u003eчисла\u003c/span\u003e\n\n\u003cspan class=f-d\u003eтотальная\u003c/span\u003e \u003cspan class=f-d\u003eфункция\u003c/span\u003e \u003cspan class=f-q\u003e«Приписать в начало»\u003c/span\u003e\n  \u003cspan class=f-k\u003eпринимает\u003c/span\u003e первый: \u003cspan class=f-t\u003eчисло\u003c/span\u003e, элементы: \u003cspan class=f-k\u003eсписок\u003c/span\u003e \u003cspan class=f-t\u003eчисла\u003c/span\u003e\n  \u003cspan class=f-k\u003eвозвращает\u003c/span\u003e \u003cspan class=f-k\u003eсписок\u003c/span\u003e \u003cspan class=f-t\u003eчисла\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«В непустой»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e первый \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-n\u003e1\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e элементы \u003cspan class=f-o\u003eравно\u003c/span\u003e [\u003cspan class=f-n\u003e2\u003c/span\u003e]\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e [\u003cspan class=f-n\u003e1\u003c/span\u003e, \u003cspan class=f-n\u003e2\u003c/span\u003e]\n  \u003cspan class=f-k\u003eсвёртка\u003c/span\u003e элементы \u003cspan class=f-k\u003eначиная с\u003c/span\u003e [первый] \u003cspan class=f-k\u003eкак\u003c/span\u003e акк \u003cspan class=f-k\u003eи\u003c/span\u003e эл \u003cspan class=f-o\u003e→\u003c/span\u003e \u003cspan class=f-k\u003eдобавить\u003c/span\u003e эл \u003cspan class=f-k\u003eк\u003c/span\u003e акк\n\n\u003cspan class=f-d\u003eтотальная\u003c/span\u003e \u003cspan class=f-d\u003eфункция\u003c/span\u003e \u003cspan class=f-q\u003e«Обратить»\u003c/span\u003e\n  \u003cspan class=f-k\u003eпринимает\u003c/span\u003e элементы: \u003cspan class=f-k\u003eсписок\u003c/span\u003e \u003cspan class=f-t\u003eчисла\u003c/span\u003e\n  \u003cspan class=f-k\u003eвозвращает\u003c/span\u003e \u003cspan class=f-k\u003eсписок\u003c/span\u003e \u003cspan class=f-t\u003eчисла\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Три элемента»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e элементы \u003cspan class=f-o\u003eравно\u003c/span\u003e [\u003cspan class=f-n\u003e1\u003c/span\u003e, \u003cspan class=f-n\u003e2\u003c/span\u003e, \u003cspan class=f-n\u003e3\u003c/span\u003e]\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e [\u003cspan class=f-n\u003e3\u003c/span\u003e, \u003cspan class=f-n\u003e2\u003c/span\u003e, \u003cspan class=f-n\u003e1\u003c/span\u003e]\n  \u003cspan class=f-k\u003eсвёртка\u003c/span\u003e элементы \u003cspan class=f-k\u003eначиная с\u003c/span\u003e \u003cspan class=f-k\u003eпустой список\u003c/span\u003e \u003cspan class=f-k\u003eкак\u003c/span\u003e акк \u003cspan class=f-k\u003eи\u003c/span\u003e эл \u003cspan class=f-o\u003e→\u003c/span\u003e \u003cspan class=f-q\u003e«Приписать в начало»\u003c/span\u003e \u003cspan class=f-k\u003eот\u003c/span\u003e эл \u003cspan class=f-k\u003eи\u003c/span\u003e акк\n\n\u003cspan class=f-d\u003eтотальная\u003c/span\u003e \u003cspan class=f-d\u003eфункция\u003c/span\u003e \u003cspan class=f-q\u003e«Прибавить единицу»\u003c/span\u003e\n  \u003cspan class=f-k\u003eпринимает\u003c/span\u003e цифры: \u003cspan class=f-k\u003eсписок\u003c/span\u003e \u003cspan class=f-t\u003eчисла\u003c/span\u003e\n  \u003cspan class=f-k\u003eвозвращает\u003c/span\u003e \u003cspan class=f-k\u003eсписок\u003c/span\u003e \u003cspan class=f-t\u003eчисла\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Пример 1 из условия»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e цифры \u003cspan class=f-o\u003eравно\u003c/span\u003e [\u003cspan class=f-n\u003e1\u003c/span\u003e, \u003cspan class=f-n\u003e2\u003c/span\u003e, \u003cspan class=f-n\u003e3\u003c/span\u003e]\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e [\u003cspan class=f-n\u003e1\u003c/span\u003e, \u003cspan class=f-n\u003e2\u003c/span\u003e, \u003cspan class=f-n\u003e4\u003c/span\u003e]\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Пример 2 из условия»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e цифры \u003cspan class=f-o\u003eравно\u003c/span\u003e [\u003cspan class=f-n\u003e4\u003c/span\u003e, \u003cspan class=f-n\u003e3\u003c/span\u003e, \u003cspan class=f-n\u003e2\u003c/span\u003e, \u003cspan class=f-n\u003e1\u003c/span\u003e]\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e [\u003cspan class=f-n\u003e4\u003c/span\u003e, \u003cspan class=f-n\u003e3\u003c/span\u003e, \u003cspan class=f-n\u003e2\u003c/span\u003e, \u003cspan class=f-n\u003e2\u003c/span\u003e]\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Пример 3 из условия»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e цифры \u003cspan class=f-o\u003eравно\u003c/span\u003e [\u003cspan class=f-n\u003e9\u003c/span\u003e]\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e [\u003cspan class=f-n\u003e1\u003c/span\u003e, \u003cspan class=f-n\u003e0\u003c/span\u003e]\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Сплошные девятки»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e цифры \u003cspan class=f-o\u003eравно\u003c/span\u003e [\u003cspan class=f-n\u003e9\u003c/span\u003e, \u003cspan class=f-n\u003e9\u003c/span\u003e, \u003cspan class=f-n\u003e9\u003c/span\u003e]\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e [\u003cspan class=f-n\u003e1\u003c/span\u003e, \u003cspan class=f-n\u003e0\u003c/span\u003e, \u003cspan class=f-n\u003e0\u003c/span\u003e, \u003cspan class=f-n\u003e0\u003c/span\u003e]\n  \u003cspan class=f-k\u003eпусть\u003c/span\u003e начальное \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-d\u003eзапись\u003c/span\u003e \u003cspan class=f-q\u003e«Перенос»\u003c/span\u003e \u003cspan class=f-k\u003eс\u003c/span\u003e перенос \u003cspan class=f-o\u003eравным\u003c/span\u003e \u003cspan class=f-n\u003e1\u003c/span\u003e \u003cspan class=f-k\u003eи\u003c/span\u003e цифры \u003cspan class=f-o\u003eравным\u003c/span\u003e \u003cspan class=f-k\u003eпустой список\u003c/span\u003e\n  \u003cspan class=f-k\u003eпусть\u003c/span\u003e итог \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-k\u003eсвёртка\u003c/span\u003e (\u003cspan class=f-q\u003e«Обратить»\u003c/span\u003e \u003cspan class=f-k\u003eот\u003c/span\u003e цифры) \u003cspan class=f-k\u003eначиная с\u003c/span\u003e начальное \u003cspan class=f-k\u003eкак\u003c/span\u003e акк \u003cspan class=f-k\u003eи\u003c/span\u003e цифра\n    \u003cspan class=f-k\u003eпусть\u003c/span\u003e сумма \u003cspan class=f-o\u003eравно\u003c/span\u003e цифра \u003cspan class=f-o\u003eплюс\u003c/span\u003e акк.перенос\n    \u003cspan class=f-k\u003eпусть\u003c/span\u003e новая \u003cspan class=f-o\u003eравно\u003c/span\u003e сумма \u003cspan class=f-o\u003eостаток от\u003c/span\u003e \u003cspan class=f-n\u003e10\u003c/span\u003e\n    \u003cspan class=f-k\u003eпусть\u003c/span\u003e дальше \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-k\u003eесли\u003c/span\u003e сумма \u003cspan class=f-o\u003eне меньше\u003c/span\u003e \u003cspan class=f-n\u003e10\u003c/span\u003e \u003cspan class=f-k\u003eто\u003c/span\u003e \u003cspan class=f-n\u003e1\u003c/span\u003e \u003cspan class=f-k\u003eиначе\u003c/span\u003e \u003cspan class=f-n\u003e0\u003c/span\u003e\n    \u003cspan class=f-d\u003eзапись\u003c/span\u003e \u003cspan class=f-q\u003e«Перенос»\u003c/span\u003e \u003cspan class=f-k\u003eс\u003c/span\u003e перенос \u003cspan class=f-o\u003eравным\u003c/span\u003e дальше \u003cspan class=f-k\u003eи\u003c/span\u003e цифры \u003cspan class=f-o\u003eравным\u003c/span\u003e (\u003cspan class=f-k\u003eдобавить\u003c/span\u003e новая \u003cspan class=f-k\u003eк\u003c/span\u003e акк.цифры)\n  \u003cspan class=f-k\u003eпусть\u003c/span\u003e \u003cspan class=f-k\u003eрезультат\u003c/span\u003e \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-q\u003e«Обратить»\u003c/span\u003e \u003cspan class=f-k\u003eот\u003c/span\u003e итог.цифры\n  \u003cspan class=f-k\u003eесли\u003c/span\u003e итог.перенос \u003cspan class=f-o\u003eравен\u003c/span\u003e \u003cspan class=f-n\u003e1\u003c/span\u003e\n    \u003cspan class=f-k\u003eто\u003c/span\u003e \u003cspan class=f-q\u003e«Приписать в начало»\u003c/span\u003e \u003cspan class=f-k\u003eот\u003c/span\u003e \u003cspan class=f-n\u003e1\u003c/span\u003e \u003cspan class=f-k\u003eи\u003c/span\u003e \u003cspan class=f-k\u003eрезультат\u003c/span\u003e\n    \u003cspan class=f-k\u003eиначе\u003c/span\u003e \u003cspan class=f-k\u003eрезультат\u003c/span\u003e\n","leetcode/070-climbing-stairs.flang":"\u003cspan class=f-d\u003eмодуль\u003c/span\u003e \u003cspan class=f-q\u003e«Ступени»\u003c/span\u003e\n\n\u003cspan class=f-c\u003e// LeetCode 70. Climbing Stairs.\u003c/span\u003e\n\u003cspan class=f-c\u003e// Сколькими способами подняться на n ступеней шагами по одной и по две.\u003c/span\u003e\n\u003cspan class=f-c\u003e//\u003c/span\u003e\n\u003cspan class=f-c\u003e// Обычная. Ответ — число Фибоначчи, и считается он за один проход с двумя\u003c/span\u003e\n\u003cspan class=f-c\u003e// накопителями; тотальной функция всё равно не становится, потому что\u003c/span\u003e\n\u003cspan class=f-c\u003e// «осталось минус 1» не является частью значения «осталось». Это та же\u003c/span\u003e\n\u003cspan class=f-c\u003e// граница, что в модуле stdlib/numbers.flang: рекурсия по числу анализу\u003c/span\u003e\n\u003cspan class=f-c\u003e// недоступна в принципе, ей нужна мера, а мер он не знает.\u003c/span\u003e\n\u003cspan class=f-c\u003e//\u003c/span\u003e\n\u003cspan class=f-c\u003e// Обход существует: передать список из n элементов и рекурсировать по нему.\u003c/span\u003e\n\u003cspan class=f-c\u003e// Но список из n элементов сам по себе строится рекурсией по n — то есть\u003c/span\u003e\n\u003cspan class=f-c\u003e// обычной функцией, и тотальность не спасена, а лишь передвинута.\u003c/span\u003e\n\n\u003cspan class=f-d\u003eфункция\u003c/span\u003e \u003cspan class=f-q\u003e«Ступени шагом»\u003c/span\u003e\n  \u003cspan class=f-k\u003eпринимает\u003c/span\u003e осталось: \u003cspan class=f-t\u003eчисло\u003c/span\u003e, предыдущее: \u003cspan class=f-t\u003eчисло\u003c/span\u003e, текущее: \u003cspan class=f-t\u003eчисло\u003c/span\u003e\n  \u003cspan class=f-k\u003eвозвращает\u003c/span\u003e \u003cspan class=f-t\u003eчисло\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Один шаг»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e осталось \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-n\u003e1\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e предыдущее \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-n\u003e1\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e текущее \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-n\u003e1\u003c/span\u003e\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e \u003cspan class=f-n\u003e2\u003c/span\u003e\n  \u003cspan class=f-k\u003eесли\u003c/span\u003e осталось \u003cspan class=f-o\u003eне больше\u003c/span\u003e \u003cspan class=f-n\u003e0\u003c/span\u003e\n    \u003cspan class=f-k\u003eто\u003c/span\u003e текущее\n    \u003cspan class=f-k\u003eиначе\u003c/span\u003e \u003cspan class=f-q\u003e«Ступени шагом»\u003c/span\u003e \u003cspan class=f-k\u003eот\u003c/span\u003e (осталось \u003cspan class=f-o\u003eминус\u003c/span\u003e \u003cspan class=f-n\u003e1\u003c/span\u003e) \u003cspan class=f-k\u003eи\u003c/span\u003e текущее \u003cspan class=f-k\u003eи\u003c/span\u003e (предыдущее \u003cspan class=f-o\u003eплюс\u003c/span\u003e текущее)\n\n\u003cspan class=f-d\u003eфункция\u003c/span\u003e \u003cspan class=f-q\u003e«Ступени»\u003c/span\u003e\n  \u003cspan class=f-k\u003eпринимает\u003c/span\u003e н: \u003cspan class=f-t\u003eчисло\u003c/span\u003e\n  \u003cspan class=f-k\u003eвозвращает\u003c/span\u003e \u003cspan class=f-t\u003eчисло\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Пример 1 из условия»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e н \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-n\u003e2\u003c/span\u003e\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e \u003cspan class=f-n\u003e2\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Пример 2 из условия»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e н \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-n\u003e3\u003c/span\u003e\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e \u003cspan class=f-n\u003e3\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Одна ступень»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e н \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-n\u003e1\u003c/span\u003e\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e \u003cspan class=f-n\u003e1\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Десять ступеней»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e н \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-n\u003e10\u003c/span\u003e\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e \u003cspan class=f-n\u003e89\u003c/span\u003e\n  \u003cspan class=f-k\u003eесли\u003c/span\u003e н \u003cspan class=f-o\u003eне больше\u003c/span\u003e \u003cspan class=f-n\u003e1\u003c/span\u003e\n    \u003cspan class=f-k\u003eто\u003c/span\u003e \u003cspan class=f-n\u003e1\u003c/span\u003e\n    \u003cspan class=f-k\u003eиначе\u003c/span\u003e \u003cspan class=f-q\u003e«Ступени шагом»\u003c/span\u003e \u003cspan class=f-k\u003eот\u003c/span\u003e (н \u003cspan class=f-o\u003eминус\u003c/span\u003e \u003cspan class=f-n\u003e1\u003c/span\u003e) \u003cspan class=f-k\u003eи\u003c/span\u003e \u003cspan class=f-n\u003e1\u003c/span\u003e \u003cspan class=f-k\u003eи\u003c/span\u003e \u003cspan class=f-n\u003e1\u003c/span\u003e\n","leetcode/088-merge-sorted-array.flang":"\u003cspan class=f-d\u003eмодуль\u003c/span\u003e \u003cspan class=f-q\u003e«Слияние отсортированных»\u003c/span\u003e\n\n\u003cspan class=f-c\u003e// LeetCode 88. Merge Sorted Array.\u003c/span\u003e\n\u003cspan class=f-c\u003e// Слить два отсортированных списка в один отсортированный.\u003c/span\u003e\n\u003cspan class=f-c\u003e//\u003c/span\u003e\n\u003cspan class=f-c\u003e// Тотальная — но не тем алгоритмом, каким её пишут обычно. Классическое\u003c/span\u003e\n\u003cspan class=f-c\u003e// слияние рекурсирует то по первому списку, то по второму, и анализ\u003c/span\u003e\n\u003cspan class=f-c\u003e// завершаемости такой цикл отвергает: он требует ОДНУ позицию аргумента,\u003c/span\u003e\n\u003cspan class=f-c\u003e// убывающую на каждом рекурсивном вызове (totality.mjs, контрпример в шапке\u003c/span\u003e\n\u003cspan class=f-c\u003e// файла). Слияние даёт две разные позиции и получает FLANG_NOT_TOTAL.\u003c/span\u003e\n\u003cspan class=f-c\u003e//\u003c/span\u003e\n\u003cspan class=f-c\u003e// Поэтому здесь слияние вставками: «Вставить по порядку» рекурсирует ровно\u003c/span\u003e\n\u003cspan class=f-c\u003e// по хвосту второго аргумента, а внешний проход — свёртка. Результат тот же,\u003c/span\u003e\n\u003cspan class=f-c\u003e// сложность O(n·m) вместо O(n+m).\u003c/span\u003e\n\n\u003cspan class=f-d\u003eтотальная\u003c/span\u003e \u003cspan class=f-d\u003eфункция\u003c/span\u003e \u003cspan class=f-q\u003e«Приписать в начало»\u003c/span\u003e\n  \u003cspan class=f-k\u003eпринимает\u003c/span\u003e первый: \u003cspan class=f-t\u003eчисло\u003c/span\u003e, элементы: \u003cspan class=f-k\u003eсписок\u003c/span\u003e \u003cspan class=f-t\u003eчисла\u003c/span\u003e\n  \u003cspan class=f-k\u003eвозвращает\u003c/span\u003e \u003cspan class=f-k\u003eсписок\u003c/span\u003e \u003cspan class=f-t\u003eчисла\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«В непустой»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e первый \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-n\u003e1\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e элементы \u003cspan class=f-o\u003eравно\u003c/span\u003e [\u003cspan class=f-n\u003e2\u003c/span\u003e]\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e [\u003cspan class=f-n\u003e1\u003c/span\u003e, \u003cspan class=f-n\u003e2\u003c/span\u003e]\n  \u003cspan class=f-k\u003eсвёртка\u003c/span\u003e элементы \u003cspan class=f-k\u003eначиная с\u003c/span\u003e [первый] \u003cspan class=f-k\u003eкак\u003c/span\u003e акк \u003cspan class=f-k\u003eи\u003c/span\u003e эл \u003cspan class=f-o\u003e→\u003c/span\u003e \u003cspan class=f-k\u003eдобавить\u003c/span\u003e эл \u003cspan class=f-k\u003eк\u003c/span\u003e акк\n\n\u003cspan class=f-d\u003eтотальная\u003c/span\u003e \u003cspan class=f-d\u003eфункция\u003c/span\u003e \u003cspan class=f-q\u003e«Вставить по порядку»\u003c/span\u003e\n  \u003cspan class=f-k\u003eпринимает\u003c/span\u003e значение: \u003cspan class=f-t\u003eчисло\u003c/span\u003e, элементы: \u003cspan class=f-k\u003eсписок\u003c/span\u003e \u003cspan class=f-t\u003eчисла\u003c/span\u003e\n  \u003cspan class=f-k\u003eвозвращает\u003c/span\u003e \u003cspan class=f-k\u003eсписок\u003c/span\u003e \u003cspan class=f-t\u003eчисла\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«В середину»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e значение \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-n\u003e2\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e элементы \u003cspan class=f-o\u003eравно\u003c/span\u003e [\u003cspan class=f-n\u003e1\u003c/span\u003e, \u003cspan class=f-n\u003e3\u003c/span\u003e]\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e [\u003cspan class=f-n\u003e1\u003c/span\u003e, \u003cspan class=f-n\u003e2\u003c/span\u003e, \u003cspan class=f-n\u003e3\u003c/span\u003e]\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«В пустой»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e значение \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-n\u003e2\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e элементы \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-k\u003eпустой список\u003c/span\u003e\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e [\u003cspan class=f-n\u003e2\u003c/span\u003e]\n  \u003cspan class=f-k\u003eразбор\u003c/span\u003e элементов\n    \u003cspan class=f-k\u003eслучай\u003c/span\u003e \u003cspan class=f-k\u003eпусто\u003c/span\u003e\n      \u003cspan class=f-k\u003eто\u003c/span\u003e [значение]\n    \u003cspan class=f-k\u003eслучай\u003c/span\u003e \u003cspan class=f-k\u003eголова и хвост\u003c/span\u003e\n      \u003cspan class=f-k\u003eесли\u003c/span\u003e значение \u003cspan class=f-o\u003eне больше\u003c/span\u003e \u003cspan class=f-k\u003eголова\u003c/span\u003e\n        \u003cspan class=f-k\u003eто\u003c/span\u003e \u003cspan class=f-q\u003e«Приписать в начало»\u003c/span\u003e \u003cspan class=f-k\u003eот\u003c/span\u003e значение \u003cspan class=f-k\u003eи\u003c/span\u003e элементы\n        \u003cspan class=f-k\u003eиначе\u003c/span\u003e \u003cspan class=f-q\u003e«Приписать в начало»\u003c/span\u003e \u003cspan class=f-k\u003eот\u003c/span\u003e \u003cspan class=f-k\u003eголова\u003c/span\u003e \u003cspan class=f-k\u003eи\u003c/span\u003e (\u003cspan class=f-q\u003e«Вставить по порядку»\u003c/span\u003e \u003cspan class=f-k\u003eот\u003c/span\u003e значение \u003cspan class=f-k\u003eи\u003c/span\u003e \u003cspan class=f-k\u003eхвост\u003c/span\u003e)\n\n\u003cspan class=f-d\u003eтотальная\u003c/span\u003e \u003cspan class=f-d\u003eфункция\u003c/span\u003e \u003cspan class=f-q\u003e«Слить отсортированные»\u003c/span\u003e\n  \u003cspan class=f-k\u003eпринимает\u003c/span\u003e первый: \u003cspan class=f-k\u003eсписок\u003c/span\u003e \u003cspan class=f-t\u003eчисла\u003c/span\u003e, второй: \u003cspan class=f-k\u003eсписок\u003c/span\u003e \u003cspan class=f-t\u003eчисла\u003c/span\u003e\n  \u003cspan class=f-k\u003eвозвращает\u003c/span\u003e \u003cspan class=f-k\u003eсписок\u003c/span\u003e \u003cspan class=f-t\u003eчисла\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Пример 1 из условия»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e первый \u003cspan class=f-o\u003eравно\u003c/span\u003e [\u003cspan class=f-n\u003e1\u003c/span\u003e, \u003cspan class=f-n\u003e2\u003c/span\u003e, \u003cspan class=f-n\u003e3\u003c/span\u003e]\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e второй \u003cspan class=f-o\u003eравно\u003c/span\u003e [\u003cspan class=f-n\u003e2\u003c/span\u003e, \u003cspan class=f-n\u003e5\u003c/span\u003e, \u003cspan class=f-n\u003e6\u003c/span\u003e]\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e [\u003cspan class=f-n\u003e1\u003c/span\u003e, \u003cspan class=f-n\u003e2\u003c/span\u003e, \u003cspan class=f-n\u003e2\u003c/span\u003e, \u003cspan class=f-n\u003e3\u003c/span\u003e, \u003cspan class=f-n\u003e5\u003c/span\u003e, \u003cspan class=f-n\u003e6\u003c/span\u003e]\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Пример 2 из условия»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e первый \u003cspan class=f-o\u003eравно\u003c/span\u003e [\u003cspan class=f-n\u003e1\u003c/span\u003e]\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e второй \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-k\u003eпустой список\u003c/span\u003e\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e [\u003cspan class=f-n\u003e1\u003c/span\u003e]\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Пример 3 из условия»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e первый \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-k\u003eпустой список\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e второй \u003cspan class=f-o\u003eравно\u003c/span\u003e [\u003cspan class=f-n\u003e1\u003c/span\u003e]\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e [\u003cspan class=f-n\u003e1\u003c/span\u003e]\n  \u003cspan class=f-k\u003eсвёртка\u003c/span\u003e второй \u003cspan class=f-k\u003eначиная с\u003c/span\u003e первый \u003cspan class=f-k\u003eкак\u003c/span\u003e акк \u003cspan class=f-k\u003eи\u003c/span\u003e эл \u003cspan class=f-o\u003e→\u003c/span\u003e \u003cspan class=f-q\u003e«Вставить по порядку»\u003c/span\u003e \u003cspan class=f-k\u003eот\u003c/span\u003e эл \u003cspan class=f-k\u003eи\u003c/span\u003e акк\n","leetcode/110-balanced-binary-tree.flang":"\u003cspan class=f-d\u003eмодуль\u003c/span\u003e \u003cspan class=f-q\u003e«Сбалансированное дерево»\u003c/span\u003e\n\n\u003cspan class=f-c\u003e// LeetCode 110. Balanced Binary Tree.\u003c/span\u003e\n\u003cspan class=f-c\u003e// Проверить, что для каждого узла глубины поддеревьев отличаются не более\u003c/span\u003e\n\u003cspan class=f-c\u003e// чем на единицу.\u003c/span\u003e\n\u003cspan class=f-c\u003e//\u003c/span\u003e\n\u003cspan class=f-c\u003e// Тотальная. Логических «и» и «или» в языке нет (SPEC перечисляет только\u003c/span\u003e\n\u003cspan class=f-c\u003e// арифметику и сравнения), поэтому конъюнкция трёх условий записана\u003c/span\u003e\n\u003cspan class=f-c\u003e// вложенными «если» — читается длиннее, но означает ровно то же.\u003c/span\u003e\n\n\u003cspan class=f-d\u003eтип\u003c/span\u003e \u003cspan class=f-q\u003e«Дерево»\u003c/span\u003e\n  \u003cspan class=f-d\u003eвариант\u003c/span\u003e Лист\n  \u003cspan class=f-d\u003eвариант\u003c/span\u003e Узел \u003cspan class=f-k\u003eсодержит\u003c/span\u003e значение: \u003cspan class=f-t\u003eчисло\u003c/span\u003e, левое: \u003cspan class=f-q\u003e«Дерево»\u003c/span\u003e, правое: \u003cspan class=f-q\u003e«Дерево»\u003c/span\u003e\n\n\u003cspan class=f-d\u003eтотальная\u003c/span\u003e \u003cspan class=f-d\u003eфункция\u003c/span\u003e \u003cspan class=f-q\u003e«Вставить в дерево»\u003c/span\u003e\n  \u003cspan class=f-k\u003eпринимает\u003c/span\u003e дерево: \u003cspan class=f-q\u003e«Дерево»\u003c/span\u003e, \u003cspan class=f-t\u003eчисло\u003c/span\u003e: \u003cspan class=f-t\u003eчисло\u003c/span\u003e\n  \u003cspan class=f-k\u003eвозвращает\u003c/span\u003e \u003cspan class=f-q\u003e«Дерево»\u003c/span\u003e\n  \u003cspan class=f-k\u003eразбор\u003c/span\u003e дерева\n    \u003cspan class=f-k\u003eслучай\u003c/span\u003e Лист\n      \u003cspan class=f-k\u003eто\u003c/span\u003e Узел \u003cspan class=f-k\u003eс\u003c/span\u003e значение \u003cspan class=f-o\u003eравным\u003c/span\u003e \u003cspan class=f-t\u003eчисло\u003c/span\u003e \u003cspan class=f-k\u003eи\u003c/span\u003e левое \u003cspan class=f-o\u003eравным\u003c/span\u003e \u003cspan class=f-d\u003eвариант\u003c/span\u003e Лист \u003cspan class=f-k\u003eи\u003c/span\u003e правое \u003cspan class=f-o\u003eравным\u003c/span\u003e \u003cspan class=f-d\u003eвариант\u003c/span\u003e Лист\n    \u003cspan class=f-k\u003eслучай\u003c/span\u003e \u003cspan class=f-d\u003eвариант\u003c/span\u003e Узел \u003cspan class=f-k\u003eс\u003c/span\u003e значение \u003cspan class=f-k\u003eкак\u003c/span\u003e зн \u003cspan class=f-k\u003eи\u003c/span\u003e левое \u003cspan class=f-k\u003eкак\u003c/span\u003e л \u003cspan class=f-k\u003eи\u003c/span\u003e правое \u003cspan class=f-k\u003eкак\u003c/span\u003e п\n      \u003cspan class=f-k\u003eесли\u003c/span\u003e \u003cspan class=f-t\u003eчисло\u003c/span\u003e \u003cspan class=f-o\u003eменьше\u003c/span\u003e зн\n        \u003cspan class=f-k\u003eто\u003c/span\u003e\n          \u003cspan class=f-k\u003eпусть\u003c/span\u003e новое \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-q\u003e«Вставить в дерево»\u003c/span\u003e \u003cspan class=f-k\u003eот\u003c/span\u003e л \u003cspan class=f-k\u003eи\u003c/span\u003e \u003cspan class=f-t\u003eчисло\u003c/span\u003e\n          Узел \u003cspan class=f-k\u003eс\u003c/span\u003e значение \u003cspan class=f-o\u003eравным\u003c/span\u003e зн \u003cspan class=f-k\u003eи\u003c/span\u003e левое \u003cspan class=f-o\u003eравным\u003c/span\u003e новое \u003cspan class=f-k\u003eи\u003c/span\u003e правое \u003cspan class=f-o\u003eравным\u003c/span\u003e п\n        \u003cspan class=f-k\u003eиначе\u003c/span\u003e\n          \u003cspan class=f-k\u003eпусть\u003c/span\u003e новое \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-q\u003e«Вставить в дерево»\u003c/span\u003e \u003cspan class=f-k\u003eот\u003c/span\u003e п \u003cspan class=f-k\u003eи\u003c/span\u003e \u003cspan class=f-t\u003eчисло\u003c/span\u003e\n          Узел \u003cspan class=f-k\u003eс\u003c/span\u003e значение \u003cspan class=f-o\u003eравным\u003c/span\u003e зн \u003cspan class=f-k\u003eи\u003c/span\u003e левое \u003cspan class=f-o\u003eравным\u003c/span\u003e л \u003cspan class=f-k\u003eи\u003c/span\u003e правое \u003cspan class=f-o\u003eравным\u003c/span\u003e новое\n\n\u003cspan class=f-d\u003eтотальная\u003c/span\u003e \u003cspan class=f-d\u003eфункция\u003c/span\u003e \u003cspan class=f-q\u003e«Дерево из списка»\u003c/span\u003e\n  \u003cspan class=f-k\u003eпринимает\u003c/span\u003e элементы: \u003cspan class=f-k\u003eсписок\u003c/span\u003e \u003cspan class=f-t\u003eчисла\u003c/span\u003e\n  \u003cspan class=f-k\u003eвозвращает\u003c/span\u003e \u003cspan class=f-q\u003e«Дерево»\u003c/span\u003e\n  \u003cspan class=f-k\u003eсвёртка\u003c/span\u003e элементы \u003cspan class=f-k\u003eначиная с\u003c/span\u003e \u003cspan class=f-d\u003eвариант\u003c/span\u003e Лист \u003cspan class=f-k\u003eкак\u003c/span\u003e акк \u003cspan class=f-k\u003eи\u003c/span\u003e эл \u003cspan class=f-o\u003e→\u003c/span\u003e \u003cspan class=f-q\u003e«Вставить в дерево»\u003c/span\u003e \u003cspan class=f-k\u003eот\u003c/span\u003e акк \u003cspan class=f-k\u003eи\u003c/span\u003e эл\n\n\u003cspan class=f-d\u003eтотальная\u003c/span\u003e \u003cspan class=f-d\u003eфункция\u003c/span\u003e \u003cspan class=f-q\u003e«Глубина»\u003c/span\u003e\n  \u003cspan class=f-k\u003eпринимает\u003c/span\u003e дерево: \u003cspan class=f-q\u003e«Дерево»\u003c/span\u003e\n  \u003cspan class=f-k\u003eвозвращает\u003c/span\u003e \u003cspan class=f-t\u003eчисло\u003c/span\u003e\n  \u003cspan class=f-k\u003eразбор\u003c/span\u003e дерева\n    \u003cspan class=f-k\u003eслучай\u003c/span\u003e Лист\n      \u003cspan class=f-k\u003eто\u003c/span\u003e \u003cspan class=f-n\u003e0\u003c/span\u003e\n    \u003cspan class=f-k\u003eслучай\u003c/span\u003e \u003cspan class=f-d\u003eвариант\u003c/span\u003e Узел \u003cspan class=f-k\u003eс\u003c/span\u003e левое \u003cspan class=f-k\u003eкак\u003c/span\u003e л \u003cspan class=f-k\u003eи\u003c/span\u003e правое \u003cspan class=f-k\u003eкак\u003c/span\u003e п\n      \u003cspan class=f-k\u003eпусть\u003c/span\u003e слева \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-q\u003e«Глубина»\u003c/span\u003e \u003cspan class=f-k\u003eот\u003c/span\u003e л\n      \u003cspan class=f-k\u003eпусть\u003c/span\u003e справа \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-q\u003e«Глубина»\u003c/span\u003e \u003cspan class=f-k\u003eот\u003c/span\u003e п\n      \u003cspan class=f-n\u003e1\u003c/span\u003e \u003cspan class=f-o\u003eплюс\u003c/span\u003e (\u003cspan class=f-k\u003eесли\u003c/span\u003e слева \u003cspan class=f-o\u003eбольше\u003c/span\u003e справа \u003cspan class=f-k\u003eто\u003c/span\u003e слева \u003cspan class=f-k\u003eиначе\u003c/span\u003e справа)\n\n\u003cspan class=f-d\u003eтотальная\u003c/span\u003e \u003cspan class=f-d\u003eфункция\u003c/span\u003e \u003cspan class=f-q\u003e«Сбалансировано»\u003c/span\u003e\n  \u003cspan class=f-k\u003eпринимает\u003c/span\u003e дерево: \u003cspan class=f-q\u003e«Дерево»\u003c/span\u003e\n  \u003cspan class=f-k\u003eвозвращает\u003c/span\u003e \u003cspan class=f-t\u003eпризнак\u003c/span\u003e\n  \u003cspan class=f-k\u003eразбор\u003c/span\u003e дерева\n    \u003cspan class=f-k\u003eслучай\u003c/span\u003e Лист\n      \u003cspan class=f-k\u003eто\u003c/span\u003e \u003cspan class=f-i\u003eда\u003c/span\u003e\n    \u003cspan class=f-k\u003eслучай\u003c/span\u003e \u003cspan class=f-d\u003eвариант\u003c/span\u003e Узел \u003cspan class=f-k\u003eс\u003c/span\u003e левое \u003cspan class=f-k\u003eкак\u003c/span\u003e л \u003cspan class=f-k\u003eи\u003c/span\u003e правое \u003cspan class=f-k\u003eкак\u003c/span\u003e п\n      \u003cspan class=f-k\u003eесли\u003c/span\u003e (\u003cspan class=f-q\u003e«Сбалансировано»\u003c/span\u003e \u003cspan class=f-k\u003eот\u003c/span\u003e л) \u003cspan class=f-o\u003eравен\u003c/span\u003e \u003cspan class=f-i\u003eнет\u003c/span\u003e\n        \u003cspan class=f-k\u003eто\u003c/span\u003e \u003cspan class=f-i\u003eнет\u003c/span\u003e\n        \u003cspan class=f-k\u003eиначе\u003c/span\u003e\n          \u003cspan class=f-k\u003eесли\u003c/span\u003e (\u003cspan class=f-q\u003e«Сбалансировано»\u003c/span\u003e \u003cspan class=f-k\u003eот\u003c/span\u003e п) \u003cspan class=f-o\u003eравен\u003c/span\u003e \u003cspan class=f-i\u003eнет\u003c/span\u003e\n            \u003cspan class=f-k\u003eто\u003c/span\u003e \u003cspan class=f-i\u003eнет\u003c/span\u003e\n            \u003cspan class=f-k\u003eиначе\u003c/span\u003e\n              \u003cspan class=f-k\u003eпусть\u003c/span\u003e разница \u003cspan class=f-o\u003eравно\u003c/span\u003e (\u003cspan class=f-q\u003e«Глубина»\u003c/span\u003e \u003cspan class=f-k\u003eот\u003c/span\u003e л) \u003cspan class=f-o\u003eминус\u003c/span\u003e (\u003cspan class=f-q\u003e«Глубина»\u003c/span\u003e \u003cspan class=f-k\u003eот\u003c/span\u003e п)\n              \u003cspan class=f-k\u003eесли\u003c/span\u003e разница \u003cspan class=f-o\u003eменьше\u003c/span\u003e \u003cspan class=f-n\u003e0\u003c/span\u003e\n                \u003cspan class=f-k\u003eто\u003c/span\u003e (\u003cspan class=f-n\u003e0\u003c/span\u003e \u003cspan class=f-o\u003eминус\u003c/span\u003e разница) \u003cspan class=f-o\u003eне больше\u003c/span\u003e \u003cspan class=f-n\u003e1\u003c/span\u003e\n                \u003cspan class=f-k\u003eиначе\u003c/span\u003e разница \u003cspan class=f-o\u003eне больше\u003c/span\u003e \u003cspan class=f-n\u003e1\u003c/span\u003e\n\n\u003cspan class=f-d\u003eтотальная\u003c/span\u003e \u003cspan class=f-d\u003eфункция\u003c/span\u003e \u003cspan class=f-q\u003e«Сбалансировано для списка»\u003c/span\u003e\n  \u003cspan class=f-k\u003eпринимает\u003c/span\u003e элементы: \u003cspan class=f-k\u003eсписок\u003c/span\u003e \u003cspan class=f-t\u003eчисла\u003c/span\u003e\n  \u003cspan class=f-k\u003eвозвращает\u003c/span\u003e \u003cspan class=f-t\u003eпризнак\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Сбалансированное дерево»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e элементы \u003cspan class=f-o\u003eравно\u003c/span\u003e [\u003cspan class=f-n\u003e2\u003c/span\u003e, \u003cspan class=f-n\u003e1\u003c/span\u003e, \u003cspan class=f-n\u003e3\u003c/span\u003e]\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e \u003cspan class=f-i\u003eда\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Цепочка не сбалансирована»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e элементы \u003cspan class=f-o\u003eравно\u003c/span\u003e [\u003cspan class=f-n\u003e1\u003c/span\u003e, \u003cspan class=f-n\u003e2\u003c/span\u003e, \u003cspan class=f-n\u003e3\u003c/span\u003e, \u003cspan class=f-n\u003e4\u003c/span\u003e]\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e \u003cspan class=f-i\u003eнет\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Пустое дерево сбалансировано»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e элементы \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-k\u003eпустой список\u003c/span\u003e\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e \u003cspan class=f-i\u003eда\u003c/span\u003e\n  \u003cspan class=f-q\u003e«Сбалансировано»\u003c/span\u003e \u003cspan class=f-k\u003eот\u003c/span\u003e (\u003cspan class=f-q\u003e«Дерево из списка»\u003c/span\u003e \u003cspan class=f-k\u003eот\u003c/span\u003e элементы)\n","leetcode/121-best-time-to-buy-and-sell-stock.flang":"\u003cspan class=f-d\u003eмодуль\u003c/span\u003e \u003cspan class=f-q\u003e«Лучшая сделка»\u003c/span\u003e\n\n\u003cspan class=f-c\u003e// LeetCode 121. Best Time to Buy and Sell Stock.\u003c/span\u003e\n\u003cspan class=f-c\u003e// По списку цен по дням найти наибольшую прибыль от одной покупки и одной\u003c/span\u003e\n\u003cspan class=f-c\u003e// последующей продажи. Если прибыли нет — ноль.\u003c/span\u003e\n\u003cspan class=f-c\u003e//\u003c/span\u003e\n\u003cspan class=f-c\u003e// Тотальная: один проход свёрткой, состояние — запись из двух чисел\u003c/span\u003e\n\u003cspan class=f-c\u003e// (минимальная цена и лучшая прибыль).\u003c/span\u003e\n\n\u003cspan class=f-d\u003eобъект\u003c/span\u003e \u003cspan class=f-q\u003e«Сделка»\u003c/span\u003e\n  минимум \u003cspan class=f-k\u003eявляется\u003c/span\u003e \u003cspan class=f-t\u003eчислом\u003c/span\u003e\n  прибыль \u003cspan class=f-k\u003eявляется\u003c/span\u003e \u003cspan class=f-t\u003eчислом\u003c/span\u003e\n\n\u003cspan class=f-d\u003eтотальная\u003c/span\u003e \u003cspan class=f-d\u003eфункция\u003c/span\u003e \u003cspan class=f-q\u003e«Лучшая прибыль»\u003c/span\u003e\n  \u003cspan class=f-k\u003eпринимает\u003c/span\u003e цены: \u003cspan class=f-k\u003eсписок\u003c/span\u003e \u003cspan class=f-t\u003eчисла\u003c/span\u003e\n  \u003cspan class=f-k\u003eвозвращает\u003c/span\u003e \u003cspan class=f-t\u003eчисло\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Пример 1 из условия»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e цены \u003cspan class=f-o\u003eравно\u003c/span\u003e [\u003cspan class=f-n\u003e7\u003c/span\u003e, \u003cspan class=f-n\u003e1\u003c/span\u003e, \u003cspan class=f-n\u003e5\u003c/span\u003e, \u003cspan class=f-n\u003e3\u003c/span\u003e, \u003cspan class=f-n\u003e6\u003c/span\u003e, \u003cspan class=f-n\u003e4\u003c/span\u003e]\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e \u003cspan class=f-n\u003e5\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Пример 2 из условия»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e цены \u003cspan class=f-o\u003eравно\u003c/span\u003e [\u003cspan class=f-n\u003e7\u003c/span\u003e, \u003cspan class=f-n\u003e6\u003c/span\u003e, \u003cspan class=f-n\u003e4\u003c/span\u003e, \u003cspan class=f-n\u003e3\u003c/span\u003e, \u003cspan class=f-n\u003e1\u003c/span\u003e]\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e \u003cspan class=f-n\u003e0\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Пустой список»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e цены \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-k\u003eпустой список\u003c/span\u003e\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e \u003cspan class=f-n\u003e0\u003c/span\u003e\n  \u003cspan class=f-k\u003eразбор\u003c/span\u003e цены\n    \u003cspan class=f-k\u003eслучай\u003c/span\u003e \u003cspan class=f-k\u003eпусто\u003c/span\u003e\n      \u003cspan class=f-k\u003eто\u003c/span\u003e \u003cspan class=f-n\u003e0\u003c/span\u003e\n    \u003cspan class=f-k\u003eслучай\u003c/span\u003e \u003cspan class=f-k\u003eголова и хвост\u003c/span\u003e\n      \u003cspan class=f-k\u003eпусть\u003c/span\u003e начальное \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-d\u003eзапись\u003c/span\u003e \u003cspan class=f-q\u003e«Сделка»\u003c/span\u003e \u003cspan class=f-k\u003eс\u003c/span\u003e минимум \u003cspan class=f-o\u003eравным\u003c/span\u003e \u003cspan class=f-k\u003eголова\u003c/span\u003e \u003cspan class=f-k\u003eи\u003c/span\u003e прибыль \u003cspan class=f-o\u003eравным\u003c/span\u003e \u003cspan class=f-n\u003e0\u003c/span\u003e\n      \u003cspan class=f-k\u003eпусть\u003c/span\u003e итог \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-k\u003eсвёртка\u003c/span\u003e \u003cspan class=f-k\u003eхвост\u003c/span\u003e \u003cspan class=f-k\u003eначиная с\u003c/span\u003e начальное \u003cspan class=f-k\u003eкак\u003c/span\u003e акк \u003cspan class=f-k\u003eи\u003c/span\u003e цена\n        \u003cspan class=f-k\u003eпусть\u003c/span\u003e минимум \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-k\u003eесли\u003c/span\u003e цена \u003cspan class=f-o\u003eменьше\u003c/span\u003e акк.минимум \u003cspan class=f-k\u003eто\u003c/span\u003e цена \u003cspan class=f-k\u003eиначе\u003c/span\u003e акк.минимум\n        \u003cspan class=f-k\u003eпусть\u003c/span\u003e сегодня \u003cspan class=f-o\u003eравно\u003c/span\u003e цена \u003cspan class=f-o\u003eминус\u003c/span\u003e акк.минимум\n        \u003cspan class=f-k\u003eпусть\u003c/span\u003e прибыль \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-k\u003eесли\u003c/span\u003e сегодня \u003cspan class=f-o\u003eбольше\u003c/span\u003e акк.прибыль \u003cspan class=f-k\u003eто\u003c/span\u003e сегодня \u003cspan class=f-k\u003eиначе\u003c/span\u003e акк.прибыль\n        \u003cspan class=f-d\u003eзапись\u003c/span\u003e \u003cspan class=f-q\u003e«Сделка»\u003c/span\u003e \u003cspan class=f-k\u003eс\u003c/span\u003e минимум \u003cspan class=f-o\u003eравным\u003c/span\u003e минимум \u003cspan class=f-k\u003eи\u003c/span\u003e прибыль \u003cspan class=f-o\u003eравным\u003c/span\u003e прибыль\n      итог.прибыль\n","leetcode/125-valid-palindrome.flang":"\u003cspan class=f-d\u003eмодуль\u003c/span\u003e \u003cspan class=f-q\u003e«Палиндром»\u003c/span\u003e\n\n\u003cspan class=f-c\u003e// LeetCode 125. Valid Palindrome.\u003c/span\u003e\n\u003cspan class=f-c\u003e// Строка считается палиндромом, если после выбрасывания всего, кроме букв и\u003c/span\u003e\n\u003cspan class=f-c\u003e// цифр, и приведения к нижнему регистру она читается одинаково в обе стороны.\u003c/span\u003e\n\u003cspan class=f-c\u003e//\u003c/span\u003e\n\u003cspan class=f-c\u003e// Обычная. Причина та же, что у остальных строковых задач: чтобы пройти по\u003c/span\u003e\n\u003cspan class=f-c\u003e// символам, нужна рекурсия по строке, а её анализ завершаемости не признаёт.\u003c/span\u003e\n\u003cspan class=f-c\u003e// Заметно и второе ограничение: нижний регистр приходится делать таблицей\u003c/span\u003e\n\u003cspan class=f-c\u003e// из двух алфавитов — встроенной формы «код символа» в языке нет, поэтому\u003c/span\u003e\n\u003cspan class=f-c\u003e// связать «A» и «a» иначе нечем. Кириллица этим решением не покрыта.\u003c/span\u003e\n\n\u003cspan class=f-d\u003eтотальная\u003c/span\u003e \u003cspan class=f-d\u003eфункция\u003c/span\u003e \u003cspan class=f-q\u003e«Приписать строку в начало»\u003c/span\u003e\n  \u003cspan class=f-k\u003eпринимает\u003c/span\u003e первая: \u003cspan class=f-t\u003eстрока\u003c/span\u003e, элементы: \u003cspan class=f-k\u003eсписок\u003c/span\u003e \u003cspan class=f-t\u003eстроки\u003c/span\u003e\n  \u003cspan class=f-k\u003eвозвращает\u003c/span\u003e \u003cspan class=f-k\u003eсписок\u003c/span\u003e \u003cspan class=f-t\u003eстроки\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«В непустой»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e первая \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-s\u003e\"a\"\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e элементы \u003cspan class=f-o\u003eравно\u003c/span\u003e [\u003cspan class=f-s\u003e\"b\"\u003c/span\u003e]\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e [\u003cspan class=f-s\u003e\"a\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"b\"\u003c/span\u003e]\n  \u003cspan class=f-k\u003eсвёртка\u003c/span\u003e элементы \u003cspan class=f-k\u003eначиная с\u003c/span\u003e [первая] \u003cspan class=f-k\u003eкак\u003c/span\u003e акк \u003cspan class=f-k\u003eи\u003c/span\u003e эл \u003cspan class=f-o\u003e→\u003c/span\u003e \u003cspan class=f-k\u003eдобавить\u003c/span\u003e эл \u003cspan class=f-k\u003eк\u003c/span\u003e акк\n\n\u003cspan class=f-d\u003eтотальная\u003c/span\u003e \u003cspan class=f-d\u003eфункция\u003c/span\u003e \u003cspan class=f-q\u003e«Позиция подстроки»\u003c/span\u003e\n  \u003cspan class=f-k\u003eпринимает\u003c/span\u003e текст: \u003cspan class=f-t\u003eстрока\u003c/span\u003e, часть: \u003cspan class=f-t\u003eстрока\u003c/span\u003e\n  \u003cspan class=f-k\u003eвозвращает\u003c/span\u003e \u003cspan class=f-t\u003eчисло\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«В середине»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e текст \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-s\u003e\"abcd\"\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e часть \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-s\u003e\"c\"\u003c/span\u003e\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e \u003cspan class=f-n\u003e3\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Нет вхождения»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e текст \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-s\u003e\"abc\"\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e часть \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-s\u003e\"z\"\u003c/span\u003e\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e \u003cspan class=f-n\u003e0\u003c/span\u003e\n  \u003cspan class=f-k\u003eесли\u003c/span\u003e текст \u003cspan class=f-k\u003eсодержит\u003c/span\u003e часть\n    \u003cspan class=f-k\u003eто\u003c/span\u003e (\u003cspan class=f-k\u003eдлина\u003c/span\u003e (\u003cspan class=f-k\u003eголова\u003c/span\u003e (\u003cspan class=f-k\u003eразделить\u003c/span\u003e текст \u003cspan class=f-k\u003eпо\u003c/span\u003e часть))) \u003cspan class=f-o\u003eплюс\u003c/span\u003e \u003cspan class=f-n\u003e1\u003c/span\u003e\n    \u003cspan class=f-k\u003eиначе\u003c/span\u003e \u003cspan class=f-n\u003e0\u003c/span\u003e\n\n\u003cspan class=f-d\u003eтотальная\u003c/span\u003e \u003cspan class=f-d\u003eфункция\u003c/span\u003e \u003cspan class=f-q\u003e«Значащий символ»\u003c/span\u003e\n  \u003cspan class=f-k\u003eпринимает\u003c/span\u003e буква: \u003cspan class=f-t\u003eстрока\u003c/span\u003e\n  \u003cspan class=f-k\u003eвозвращает\u003c/span\u003e \u003cspan class=f-t\u003eстрока\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Заглавная становится строчной»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e буква \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-s\u003e\"P\"\u003c/span\u003e\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e \u003cspan class=f-s\u003e\"p\"\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Цифра остаётся»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e буква \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-s\u003e\"7\"\u003c/span\u003e\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e \u003cspan class=f-s\u003e\"7\"\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Знак препинания выбрасывается»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e буква \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-s\u003e\",\"\u003c/span\u003e\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e \u003cspan class=f-s\u003e\"\"\u003c/span\u003e\n  \u003cspan class=f-k\u003eпусть\u003c/span\u003e позиция \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-q\u003e«Позиция подстроки»\u003c/span\u003e \u003cspan class=f-k\u003eот\u003c/span\u003e \u003cspan class=f-s\u003e\"ABCDEFGHIJKLMNOPQRSTUVWXYZ\"\u003c/span\u003e \u003cspan class=f-k\u003eи\u003c/span\u003e буква\n  \u003cspan class=f-k\u003eесли\u003c/span\u003e позиция \u003cspan class=f-o\u003eбольше\u003c/span\u003e \u003cspan class=f-n\u003e0\u003c/span\u003e\n    \u003cspan class=f-k\u003eто\u003c/span\u003e \u003cspan class=f-k\u003eподстрока\u003c/span\u003e \u003cspan class=f-s\u003e\"abcdefghijklmnopqrstuvwxyz\"\u003c/span\u003e \u003cspan class=f-k\u003eс\u003c/span\u003e позиция \u003cspan class=f-k\u003eпо\u003c/span\u003e позиция\n    \u003cspan class=f-k\u003eиначе\u003c/span\u003e\n      \u003cspan class=f-k\u003eесли\u003c/span\u003e \u003cspan class=f-s\u003e\"abcdefghijklmnopqrstuvwxyz0123456789\"\u003c/span\u003e \u003cspan class=f-k\u003eсодержит\u003c/span\u003e буква \u003cspan class=f-k\u003eто\u003c/span\u003e буква \u003cspan class=f-k\u003eиначе\u003c/span\u003e \u003cspan class=f-s\u003e\"\"\u003c/span\u003e\n\n\u003cspan class=f-d\u003eфункция\u003c/span\u003e \u003cspan class=f-q\u003e«Символы с позиции»\u003c/span\u003e\n  \u003cspan class=f-k\u003eпринимает\u003c/span\u003e текст: \u003cspan class=f-t\u003eстрока\u003c/span\u003e, позиция: \u003cspan class=f-t\u003eчисло\u003c/span\u003e\n  \u003cspan class=f-k\u003eвозвращает\u003c/span\u003e \u003cspan class=f-k\u003eсписок\u003c/span\u003e \u003cspan class=f-t\u003eстроки\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«С последнего символа»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e текст \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-s\u003e\"ab\"\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e позиция \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-n\u003e2\u003c/span\u003e\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e [\u003cspan class=f-s\u003e\"b\"\u003c/span\u003e]\n  \u003cspan class=f-k\u003eесли\u003c/span\u003e позиция \u003cspan class=f-o\u003eбольше\u003c/span\u003e (\u003cspan class=f-k\u003eдлина\u003c/span\u003e текст)\n    \u003cspan class=f-k\u003eто\u003c/span\u003e \u003cspan class=f-k\u003eпустой список\u003c/span\u003e\n    \u003cspan class=f-k\u003eиначе\u003c/span\u003e\n      \u003cspan class=f-k\u003eпусть\u003c/span\u003e буква \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-k\u003eподстрока\u003c/span\u003e текст \u003cspan class=f-k\u003eс\u003c/span\u003e позиция \u003cspan class=f-k\u003eпо\u003c/span\u003e позиция\n      \u003cspan class=f-q\u003e«Приписать строку в начало»\u003c/span\u003e \u003cspan class=f-k\u003eот\u003c/span\u003e буква \u003cspan class=f-k\u003eи\u003c/span\u003e (\u003cspan class=f-q\u003e«Символы с позиции»\u003c/span\u003e \u003cspan class=f-k\u003eот\u003c/span\u003e текст \u003cspan class=f-k\u003eи\u003c/span\u003e (позиция \u003cspan class=f-o\u003eплюс\u003c/span\u003e \u003cspan class=f-n\u003e1\u003c/span\u003e))\n\n\u003cspan class=f-d\u003eфункция\u003c/span\u003e \u003cspan class=f-q\u003e«Очистить»\u003c/span\u003e\n  \u003cspan class=f-k\u003eпринимает\u003c/span\u003e текст: \u003cspan class=f-t\u003eстрока\u003c/span\u003e\n  \u003cspan class=f-k\u003eвозвращает\u003c/span\u003e \u003cspan class=f-t\u003eстрока\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Знаки и регистр»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e текст \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-s\u003e\"A man, a plan\"\u003c/span\u003e\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e \u003cspan class=f-s\u003e\"amanaplan\"\u003c/span\u003e\n  \u003cspan class=f-k\u003eсвёртка\u003c/span\u003e (\u003cspan class=f-q\u003e«Символы с позиции»\u003c/span\u003e \u003cspan class=f-k\u003eот\u003c/span\u003e текст \u003cspan class=f-k\u003eи\u003c/span\u003e \u003cspan class=f-n\u003e1\u003c/span\u003e) \u003cspan class=f-k\u003eначиная с\u003c/span\u003e \u003cspan class=f-s\u003e\"\"\u003c/span\u003e \u003cspan class=f-k\u003eкак\u003c/span\u003e акк \u003cspan class=f-k\u003eи\u003c/span\u003e буква\n    \u003cspan class=f-k\u003eсоединить\u003c/span\u003e акк \u003cspan class=f-k\u003eс\u003c/span\u003e (\u003cspan class=f-q\u003e«Значащий символ»\u003c/span\u003e \u003cspan class=f-k\u003eот\u003c/span\u003e буква)\n\n\u003cspan class=f-d\u003eфункция\u003c/span\u003e \u003cspan class=f-q\u003e«Обратить строку»\u003c/span\u003e\n  \u003cspan class=f-k\u003eпринимает\u003c/span\u003e текст: \u003cspan class=f-t\u003eстрока\u003c/span\u003e\n  \u003cspan class=f-k\u003eвозвращает\u003c/span\u003e \u003cspan class=f-t\u003eстрока\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Слово»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e текст \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-s\u003e\"abc\"\u003c/span\u003e\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e \u003cspan class=f-s\u003e\"cba\"\u003c/span\u003e\n  \u003cspan class=f-k\u003eсвёртка\u003c/span\u003e (\u003cspan class=f-q\u003e«Символы с позиции»\u003c/span\u003e \u003cspan class=f-k\u003eот\u003c/span\u003e текст \u003cspan class=f-k\u003eи\u003c/span\u003e \u003cspan class=f-n\u003e1\u003c/span\u003e) \u003cspan class=f-k\u003eначиная с\u003c/span\u003e \u003cspan class=f-s\u003e\"\"\u003c/span\u003e \u003cspan class=f-k\u003eкак\u003c/span\u003e акк \u003cspan class=f-k\u003eи\u003c/span\u003e буква \u003cspan class=f-o\u003e→\u003c/span\u003e \u003cspan class=f-k\u003eсоединить\u003c/span\u003e буква \u003cspan class=f-k\u003eс\u003c/span\u003e акк\n\n\u003cspan class=f-d\u003eфункция\u003c/span\u003e \u003cspan class=f-q\u003e«Палиндром»\u003c/span\u003e\n  \u003cspan class=f-k\u003eпринимает\u003c/span\u003e текст: \u003cspan class=f-t\u003eстрока\u003c/span\u003e\n  \u003cspan class=f-k\u003eвозвращает\u003c/span\u003e \u003cspan class=f-t\u003eпризнак\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Пример 1 из условия»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e текст \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-s\u003e\"A man, a plan, a canal: Panama\"\u003c/span\u003e\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e \u003cspan class=f-i\u003eда\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Пример 2 из условия»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e текст \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-s\u003e\"race a car\"\u003c/span\u003e\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e \u003cspan class=f-i\u003eнет\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Пример 3 из условия»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e текст \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-s\u003e\" \"\u003c/span\u003e\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e \u003cspan class=f-i\u003eда\u003c/span\u003e\n  \u003cspan class=f-k\u003eпусть\u003c/span\u003e чистое \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-q\u003e«Очистить»\u003c/span\u003e \u003cspan class=f-k\u003eот\u003c/span\u003e текст\n  чистое \u003cspan class=f-o\u003eравен\u003c/span\u003e (\u003cspan class=f-q\u003e«Обратить строку»\u003c/span\u003e \u003cspan class=f-k\u003eот\u003c/span\u003e чистое)\n","leetcode/136-single-number.flang":"\u003cspan class=f-d\u003eмодуль\u003c/span\u003e \u003cspan class=f-q\u003e«Одиночное число»\u003c/span\u003e\n\n\u003cspan class=f-c\u003e// LeetCode 136. Single Number.\u003c/span\u003e\n\u003cspan class=f-c\u003e// В списке каждое число встречается дважды, кроме одного. Найти его.\u003c/span\u003e\n\u003cspan class=f-c\u003e//\u003c/span\u003e\n\u003cspan class=f-c\u003e// Тотальная. Канонического решения «сложить всё исключающим ИЛИ» здесь нет:\u003c/span\u003e\n\u003cspan class=f-c\u003e// побитовых операций в языке нет вообще (SPEC, раздел 4 перечисляет только\u003c/span\u003e\n\u003cspan class=f-c\u003e// арифметику и сравнения). Поэтому — подсчёт вхождений, O(n²) вместо O(n).\u003c/span\u003e\n\n\u003cspan class=f-d\u003eтотальная\u003c/span\u003e \u003cspan class=f-d\u003eфункция\u003c/span\u003e \u003cspan class=f-q\u003e«Считать вхождения»\u003c/span\u003e\n  \u003cspan class=f-k\u003eпринимает\u003c/span\u003e элементы: \u003cspan class=f-k\u003eсписок\u003c/span\u003e \u003cspan class=f-t\u003eчисла\u003c/span\u003e, значение: \u003cspan class=f-t\u003eчисло\u003c/span\u003e\n  \u003cspan class=f-k\u003eвозвращает\u003c/span\u003e \u003cspan class=f-t\u003eчисло\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Два вхождения»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e элементы \u003cspan class=f-o\u003eравно\u003c/span\u003e [\u003cspan class=f-n\u003e4\u003c/span\u003e, \u003cspan class=f-n\u003e1\u003c/span\u003e, \u003cspan class=f-n\u003e4\u003c/span\u003e]\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e значение \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-n\u003e4\u003c/span\u003e\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e \u003cspan class=f-n\u003e2\u003c/span\u003e\n  \u003cspan class=f-k\u003eсвёртка\u003c/span\u003e элементы \u003cspan class=f-k\u003eначиная с\u003c/span\u003e \u003cspan class=f-n\u003e0\u003c/span\u003e \u003cspan class=f-k\u003eкак\u003c/span\u003e акк \u003cspan class=f-k\u003eи\u003c/span\u003e эл \u003cspan class=f-o\u003e→\u003c/span\u003e \u003cspan class=f-k\u003eесли\u003c/span\u003e эл \u003cspan class=f-o\u003eравен\u003c/span\u003e значение \u003cspan class=f-k\u003eто\u003c/span\u003e акк \u003cspan class=f-o\u003eплюс\u003c/span\u003e \u003cspan class=f-n\u003e1\u003c/span\u003e \u003cspan class=f-k\u003eиначе\u003c/span\u003e акк\n\n\u003cspan class=f-d\u003eтотальная\u003c/span\u003e \u003cspan class=f-d\u003eфункция\u003c/span\u003e \u003cspan class=f-q\u003e«Одиночное число»\u003c/span\u003e\n  \u003cspan class=f-k\u003eпринимает\u003c/span\u003e элементы: \u003cspan class=f-k\u003eсписок\u003c/span\u003e \u003cspan class=f-t\u003eчисла\u003c/span\u003e\n  \u003cspan class=f-k\u003eвозвращает\u003c/span\u003e \u003cspan class=f-t\u003eчисло\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Пример 1 из условия»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e элементы \u003cspan class=f-o\u003eравно\u003c/span\u003e [\u003cspan class=f-n\u003e2\u003c/span\u003e, \u003cspan class=f-n\u003e2\u003c/span\u003e, \u003cspan class=f-n\u003e1\u003c/span\u003e]\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e \u003cspan class=f-n\u003e1\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Пример 2 из условия»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e элементы \u003cspan class=f-o\u003eравно\u003c/span\u003e [\u003cspan class=f-n\u003e4\u003c/span\u003e, \u003cspan class=f-n\u003e1\u003c/span\u003e, \u003cspan class=f-n\u003e2\u003c/span\u003e, \u003cspan class=f-n\u003e1\u003c/span\u003e, \u003cspan class=f-n\u003e2\u003c/span\u003e]\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e \u003cspan class=f-n\u003e4\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Пример 3 из условия»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e элементы \u003cspan class=f-o\u003eравно\u003c/span\u003e [\u003cspan class=f-n\u003e1\u003c/span\u003e]\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e \u003cspan class=f-n\u003e1\u003c/span\u003e\n  \u003cspan class=f-k\u003eпусть\u003c/span\u003e одиночные \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-k\u003eотфильтровать\u003c/span\u003e элементы \u003cspan class=f-k\u003eгде\u003c/span\u003e эл \u003cspan class=f-o\u003e→\u003c/span\u003e (\u003cspan class=f-q\u003e«Считать вхождения»\u003c/span\u003e \u003cspan class=f-k\u003eот\u003c/span\u003e элементы \u003cspan class=f-k\u003eи\u003c/span\u003e эл) \u003cspan class=f-o\u003eравен\u003c/span\u003e \u003cspan class=f-n\u003e1\u003c/span\u003e\n  \u003cspan class=f-k\u003eразбор\u003c/span\u003e одиночные\n    \u003cspan class=f-k\u003eслучай\u003c/span\u003e \u003cspan class=f-k\u003eпусто\u003c/span\u003e\n      \u003cspan class=f-k\u003eто\u003c/span\u003e \u003cspan class=f-n\u003e0\u003c/span\u003e\n    \u003cspan class=f-k\u003eслучай\u003c/span\u003e \u003cspan class=f-k\u003eголова и хвост\u003c/span\u003e\n      \u003cspan class=f-k\u003eголова\u003c/span\u003e\n","leetcode/169-majority-element.flang":"\u003cspan class=f-d\u003eмодуль\u003c/span\u003e \u003cspan class=f-q\u003e«Мажоритарный элемент»\u003c/span\u003e\n\n\u003cspan class=f-c\u003e// LeetCode 169. Majority Element.\u003c/span\u003e\n\u003cspan class=f-c\u003e// Найти элемент, встречающийся более чем в половине позиций списка.\u003c/span\u003e\n\u003cspan class=f-c\u003e//\u003c/span\u003e\n\u003cspan class=f-c\u003e// Тотальная. Алгоритм Бойера — Мура здесь не нужен: без изменяемых счётчиков\u003c/span\u003e\n\u003cspan class=f-c\u003e// он всё равно свёлся бы к свёртке с записью-состоянием, а прямой подсчёт\u003c/span\u003e\n\u003cspan class=f-c\u003e// вхождений короче и очевидно верен. Цена — O(n²).\u003c/span\u003e\n\n\u003cspan class=f-d\u003eтотальная\u003c/span\u003e \u003cspan class=f-d\u003eфункция\u003c/span\u003e \u003cspan class=f-q\u003e«Считать вхождения»\u003c/span\u003e\n  \u003cspan class=f-k\u003eпринимает\u003c/span\u003e элементы: \u003cspan class=f-k\u003eсписок\u003c/span\u003e \u003cspan class=f-t\u003eчисла\u003c/span\u003e, значение: \u003cspan class=f-t\u003eчисло\u003c/span\u003e\n  \u003cspan class=f-k\u003eвозвращает\u003c/span\u003e \u003cspan class=f-t\u003eчисло\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Три тройки»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e элементы \u003cspan class=f-o\u003eравно\u003c/span\u003e [\u003cspan class=f-n\u003e3\u003c/span\u003e, \u003cspan class=f-n\u003e3\u003c/span\u003e, \u003cspan class=f-n\u003e3\u003c/span\u003e, \u003cspan class=f-n\u003e1\u003c/span\u003e]\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e значение \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-n\u003e3\u003c/span\u003e\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e \u003cspan class=f-n\u003e3\u003c/span\u003e\n  \u003cspan class=f-k\u003eсвёртка\u003c/span\u003e элементы \u003cspan class=f-k\u003eначиная с\u003c/span\u003e \u003cspan class=f-n\u003e0\u003c/span\u003e \u003cspan class=f-k\u003eкак\u003c/span\u003e акк \u003cspan class=f-k\u003eи\u003c/span\u003e эл \u003cspan class=f-o\u003e→\u003c/span\u003e \u003cspan class=f-k\u003eесли\u003c/span\u003e эл \u003cspan class=f-o\u003eравен\u003c/span\u003e значение \u003cspan class=f-k\u003eто\u003c/span\u003e акк \u003cspan class=f-o\u003eплюс\u003c/span\u003e \u003cspan class=f-n\u003e1\u003c/span\u003e \u003cspan class=f-k\u003eиначе\u003c/span\u003e акк\n\n\u003cspan class=f-d\u003eтотальная\u003c/span\u003e \u003cspan class=f-d\u003eфункция\u003c/span\u003e \u003cspan class=f-q\u003e«Мажоритарный элемент»\u003c/span\u003e\n  \u003cspan class=f-k\u003eпринимает\u003c/span\u003e элементы: \u003cspan class=f-k\u003eсписок\u003c/span\u003e \u003cspan class=f-t\u003eчисла\u003c/span\u003e\n  \u003cspan class=f-k\u003eвозвращает\u003c/span\u003e \u003cspan class=f-t\u003eчисло\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Пример 1 из условия»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e элементы \u003cspan class=f-o\u003eравно\u003c/span\u003e [\u003cspan class=f-n\u003e3\u003c/span\u003e, \u003cspan class=f-n\u003e2\u003c/span\u003e, \u003cspan class=f-n\u003e3\u003c/span\u003e]\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e \u003cspan class=f-n\u003e3\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Пример 2 из условия»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e элементы \u003cspan class=f-o\u003eравно\u003c/span\u003e [\u003cspan class=f-n\u003e2\u003c/span\u003e, \u003cspan class=f-n\u003e2\u003c/span\u003e, \u003cspan class=f-n\u003e1\u003c/span\u003e, \u003cspan class=f-n\u003e1\u003c/span\u003e, \u003cspan class=f-n\u003e1\u003c/span\u003e, \u003cspan class=f-n\u003e2\u003c/span\u003e, \u003cspan class=f-n\u003e2\u003c/span\u003e]\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e \u003cspan class=f-n\u003e2\u003c/span\u003e\n  \u003cspan class=f-k\u003eпусть\u003c/span\u003e половина \u003cspan class=f-o\u003eравно\u003c/span\u003e (\u003cspan class=f-k\u003eдлина\u003c/span\u003e элементы) \u003cspan class=f-o\u003eделить на\u003c/span\u003e \u003cspan class=f-n\u003e2\u003c/span\u003e\n  \u003cspan class=f-k\u003eпусть\u003c/span\u003e частые \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-k\u003eотфильтровать\u003c/span\u003e элементы \u003cspan class=f-k\u003eгде\u003c/span\u003e эл \u003cspan class=f-o\u003e→\u003c/span\u003e (\u003cspan class=f-q\u003e«Считать вхождения»\u003c/span\u003e \u003cspan class=f-k\u003eот\u003c/span\u003e элементы \u003cspan class=f-k\u003eи\u003c/span\u003e эл) \u003cspan class=f-o\u003eбольше\u003c/span\u003e половина\n  \u003cspan class=f-k\u003eразбор\u003c/span\u003e частые\n    \u003cspan class=f-k\u003eслучай\u003c/span\u003e \u003cspan class=f-k\u003eпусто\u003c/span\u003e\n      \u003cspan class=f-k\u003eто\u003c/span\u003e \u003cspan class=f-n\u003e0\u003c/span\u003e\n    \u003cspan class=f-k\u003eслучай\u003c/span\u003e \u003cspan class=f-k\u003eголова и хвост\u003c/span\u003e\n      \u003cspan class=f-k\u003eголова\u003c/span\u003e\n","leetcode/217-contains-duplicate.flang":"\u003cspan class=f-d\u003eмодуль\u003c/span\u003e \u003cspan class=f-q\u003e«Есть повторы»\u003c/span\u003e\n\n\u003cspan class=f-c\u003e// LeetCode 217. Contains Duplicate.\u003c/span\u003e\n\u003cspan class=f-c\u003e// Есть ли в списке хотя бы одно значение, встречающееся дважды.\u003c/span\u003e\n\u003cspan class=f-c\u003e//\u003c/span\u003e\n\u003cspan class=f-c\u003e// Тотальная: рекурсия строго по хвосту списка. Множества в языке нет,\u003c/span\u003e\n\u003cspan class=f-c\u003e// поэтому проверка «голова встречается дальше» — линейный поиск,\u003c/span\u003e\n\u003cspan class=f-c\u003e// и всё решение получается O(n²).\u003c/span\u003e\n\n\u003cspan class=f-d\u003eтотальная\u003c/span\u003e \u003cspan class=f-d\u003eфункция\u003c/span\u003e \u003cspan class=f-q\u003e«Есть повторы»\u003c/span\u003e\n  \u003cspan class=f-k\u003eпринимает\u003c/span\u003e элементы: \u003cspan class=f-k\u003eсписок\u003c/span\u003e \u003cspan class=f-t\u003eчисла\u003c/span\u003e\n  \u003cspan class=f-k\u003eвозвращает\u003c/span\u003e \u003cspan class=f-t\u003eпризнак\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Пример 1 из условия»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e элементы \u003cspan class=f-o\u003eравно\u003c/span\u003e [\u003cspan class=f-n\u003e1\u003c/span\u003e, \u003cspan class=f-n\u003e2\u003c/span\u003e, \u003cspan class=f-n\u003e3\u003c/span\u003e, \u003cspan class=f-n\u003e1\u003c/span\u003e]\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e \u003cspan class=f-i\u003eда\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Пример 2 из условия»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e элементы \u003cspan class=f-o\u003eравно\u003c/span\u003e [\u003cspan class=f-n\u003e1\u003c/span\u003e, \u003cspan class=f-n\u003e2\u003c/span\u003e, \u003cspan class=f-n\u003e3\u003c/span\u003e, \u003cspan class=f-n\u003e4\u003c/span\u003e]\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e \u003cspan class=f-i\u003eнет\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Пример 3 из условия»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e элементы \u003cspan class=f-o\u003eравно\u003c/span\u003e [\u003cspan class=f-n\u003e1\u003c/span\u003e, \u003cspan class=f-n\u003e1\u003c/span\u003e, \u003cspan class=f-n\u003e1\u003c/span\u003e, \u003cspan class=f-n\u003e3\u003c/span\u003e, \u003cspan class=f-n\u003e3\u003c/span\u003e, \u003cspan class=f-n\u003e4\u003c/span\u003e, \u003cspan class=f-n\u003e3\u003c/span\u003e, \u003cspan class=f-n\u003e2\u003c/span\u003e, \u003cspan class=f-n\u003e4\u003c/span\u003e, \u003cspan class=f-n\u003e2\u003c/span\u003e]\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e \u003cspan class=f-i\u003eда\u003c/span\u003e\n  \u003cspan class=f-k\u003eразбор\u003c/span\u003e элементов\n    \u003cspan class=f-k\u003eслучай\u003c/span\u003e \u003cspan class=f-k\u003eпусто\u003c/span\u003e\n      \u003cspan class=f-k\u003eто\u003c/span\u003e \u003cspan class=f-i\u003eнет\u003c/span\u003e\n    \u003cspan class=f-k\u003eслучай\u003c/span\u003e \u003cspan class=f-k\u003eголова и хвост\u003c/span\u003e\n      \u003cspan class=f-k\u003eесли\u003c/span\u003e \u003cspan class=f-k\u003eхвост\u003c/span\u003e \u003cspan class=f-k\u003eсодержит\u003c/span\u003e \u003cspan class=f-k\u003eголова\u003c/span\u003e \u003cspan class=f-k\u003eто\u003c/span\u003e \u003cspan class=f-i\u003eда\u003c/span\u003e \u003cspan class=f-k\u003eиначе\u003c/span\u003e \u003cspan class=f-q\u003e«Есть повторы»\u003c/span\u003e \u003cspan class=f-k\u003eот\u003c/span\u003e хвоста\n","leetcode/226-invert-binary-tree.flang":"\u003cspan class=f-d\u003eмодуль\u003c/span\u003e \u003cspan class=f-q\u003e«Развернуть дерево»\u003c/span\u003e\n\n\u003cspan class=f-c\u003e// LeetCode 226. Invert Binary Tree.\u003c/span\u003e\n\u003cspan class=f-c\u003e// Поменять местами левое и правое поддерево у каждого узла.\u003c/span\u003e\n\u003cspan class=f-c\u003e//\u003c/span\u003e\n\u003cspan class=f-c\u003e// Тотальная. Само «Развернуть» примера иметь не может: оно возвращает\u003c/span\u003e\n\u003cspan class=f-c\u003e// вариант, а значение варианта в «ожидается» не записывается — парсер\u003c/span\u003e\n\u003cspan class=f-c\u003e// разворачивает конструктор в запись из его полей и теряет имя варианта.\u003c/span\u003e\n\u003cspan class=f-c\u003e// Поэтому проверяется наблюдаемое следствие: обход по возрастанию до и после\u003c/span\u003e\n\u003cspan class=f-c\u003e// разворота. У дерева поиска обход по порядку отсортирован, у развёрнутого —\u003c/span\u003e\n\u003cspan class=f-c\u003e// отсортирован в обратную сторону.\u003c/span\u003e\n\n\u003cspan class=f-d\u003eтип\u003c/span\u003e \u003cspan class=f-q\u003e«Дерево»\u003c/span\u003e\n  \u003cspan class=f-d\u003eвариант\u003c/span\u003e Лист\n  \u003cspan class=f-d\u003eвариант\u003c/span\u003e Узел \u003cspan class=f-k\u003eсодержит\u003c/span\u003e значение: \u003cspan class=f-t\u003eчисло\u003c/span\u003e, левое: \u003cspan class=f-q\u003e«Дерево»\u003c/span\u003e, правое: \u003cspan class=f-q\u003e«Дерево»\u003c/span\u003e\n\n\u003cspan class=f-d\u003eтотальная\u003c/span\u003e \u003cspan class=f-d\u003eфункция\u003c/span\u003e \u003cspan class=f-q\u003e«Соединить списки»\u003c/span\u003e\n  \u003cspan class=f-k\u003eпринимает\u003c/span\u003e первый: \u003cspan class=f-k\u003eсписок\u003c/span\u003e \u003cspan class=f-t\u003eчисла\u003c/span\u003e, второй: \u003cspan class=f-k\u003eсписок\u003c/span\u003e \u003cspan class=f-t\u003eчисла\u003c/span\u003e\n  \u003cspan class=f-k\u003eвозвращает\u003c/span\u003e \u003cspan class=f-k\u003eсписок\u003c/span\u003e \u003cspan class=f-t\u003eчисла\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Склейка»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e первый \u003cspan class=f-o\u003eравно\u003c/span\u003e [\u003cspan class=f-n\u003e1\u003c/span\u003e]\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e второй \u003cspan class=f-o\u003eравно\u003c/span\u003e [\u003cspan class=f-n\u003e2\u003c/span\u003e, \u003cspan class=f-n\u003e3\u003c/span\u003e]\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e [\u003cspan class=f-n\u003e1\u003c/span\u003e, \u003cspan class=f-n\u003e2\u003c/span\u003e, \u003cspan class=f-n\u003e3\u003c/span\u003e]\n  \u003cspan class=f-k\u003eсвёртка\u003c/span\u003e второй \u003cspan class=f-k\u003eначиная с\u003c/span\u003e первый \u003cspan class=f-k\u003eкак\u003c/span\u003e акк \u003cspan class=f-k\u003eи\u003c/span\u003e эл \u003cspan class=f-o\u003e→\u003c/span\u003e \u003cspan class=f-k\u003eдобавить\u003c/span\u003e эл \u003cspan class=f-k\u003eк\u003c/span\u003e акк\n\n\u003cspan class=f-d\u003eтотальная\u003c/span\u003e \u003cspan class=f-d\u003eфункция\u003c/span\u003e \u003cspan class=f-q\u003e«Вставить в дерево»\u003c/span\u003e\n  \u003cspan class=f-k\u003eпринимает\u003c/span\u003e дерево: \u003cspan class=f-q\u003e«Дерево»\u003c/span\u003e, \u003cspan class=f-t\u003eчисло\u003c/span\u003e: \u003cspan class=f-t\u003eчисло\u003c/span\u003e\n  \u003cspan class=f-k\u003eвозвращает\u003c/span\u003e \u003cspan class=f-q\u003e«Дерево»\u003c/span\u003e\n  \u003cspan class=f-k\u003eразбор\u003c/span\u003e дерева\n    \u003cspan class=f-k\u003eслучай\u003c/span\u003e Лист\n      \u003cspan class=f-k\u003eто\u003c/span\u003e Узел \u003cspan class=f-k\u003eс\u003c/span\u003e значение \u003cspan class=f-o\u003eравным\u003c/span\u003e \u003cspan class=f-t\u003eчисло\u003c/span\u003e \u003cspan class=f-k\u003eи\u003c/span\u003e левое \u003cspan class=f-o\u003eравным\u003c/span\u003e \u003cspan class=f-d\u003eвариант\u003c/span\u003e Лист \u003cspan class=f-k\u003eи\u003c/span\u003e правое \u003cspan class=f-o\u003eравным\u003c/span\u003e \u003cspan class=f-d\u003eвариант\u003c/span\u003e Лист\n    \u003cspan class=f-k\u003eслучай\u003c/span\u003e \u003cspan class=f-d\u003eвариант\u003c/span\u003e Узел \u003cspan class=f-k\u003eс\u003c/span\u003e значение \u003cspan class=f-k\u003eкак\u003c/span\u003e зн \u003cspan class=f-k\u003eи\u003c/span\u003e левое \u003cspan class=f-k\u003eкак\u003c/span\u003e л \u003cspan class=f-k\u003eи\u003c/span\u003e правое \u003cspan class=f-k\u003eкак\u003c/span\u003e п\n      \u003cspan class=f-k\u003eесли\u003c/span\u003e \u003cspan class=f-t\u003eчисло\u003c/span\u003e \u003cspan class=f-o\u003eменьше\u003c/span\u003e зн\n        \u003cspan class=f-k\u003eто\u003c/span\u003e\n          \u003cspan class=f-k\u003eпусть\u003c/span\u003e новое \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-q\u003e«Вставить в дерево»\u003c/span\u003e \u003cspan class=f-k\u003eот\u003c/span\u003e л \u003cspan class=f-k\u003eи\u003c/span\u003e \u003cspan class=f-t\u003eчисло\u003c/span\u003e\n          Узел \u003cspan class=f-k\u003eс\u003c/span\u003e значение \u003cspan class=f-o\u003eравным\u003c/span\u003e зн \u003cspan class=f-k\u003eи\u003c/span\u003e левое \u003cspan class=f-o\u003eравным\u003c/span\u003e новое \u003cspan class=f-k\u003eи\u003c/span\u003e правое \u003cspan class=f-o\u003eравным\u003c/span\u003e п\n        \u003cspan class=f-k\u003eиначе\u003c/span\u003e\n          \u003cspan class=f-k\u003eпусть\u003c/span\u003e новое \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-q\u003e«Вставить в дерево»\u003c/span\u003e \u003cspan class=f-k\u003eот\u003c/span\u003e п \u003cspan class=f-k\u003eи\u003c/span\u003e \u003cspan class=f-t\u003eчисло\u003c/span\u003e\n          Узел \u003cspan class=f-k\u003eс\u003c/span\u003e значение \u003cspan class=f-o\u003eравным\u003c/span\u003e зн \u003cspan class=f-k\u003eи\u003c/span\u003e левое \u003cspan class=f-o\u003eравным\u003c/span\u003e л \u003cspan class=f-k\u003eи\u003c/span\u003e правое \u003cspan class=f-o\u003eравным\u003c/span\u003e новое\n\n\u003cspan class=f-d\u003eтотальная\u003c/span\u003e \u003cspan class=f-d\u003eфункция\u003c/span\u003e \u003cspan class=f-q\u003e«Дерево из списка»\u003c/span\u003e\n  \u003cspan class=f-k\u003eпринимает\u003c/span\u003e элементы: \u003cspan class=f-k\u003eсписок\u003c/span\u003e \u003cspan class=f-t\u003eчисла\u003c/span\u003e\n  \u003cspan class=f-k\u003eвозвращает\u003c/span\u003e \u003cspan class=f-q\u003e«Дерево»\u003c/span\u003e\n  \u003cspan class=f-k\u003eсвёртка\u003c/span\u003e элементы \u003cspan class=f-k\u003eначиная с\u003c/span\u003e \u003cspan class=f-d\u003eвариант\u003c/span\u003e Лист \u003cspan class=f-k\u003eкак\u003c/span\u003e акк \u003cspan class=f-k\u003eи\u003c/span\u003e эл \u003cspan class=f-o\u003e→\u003c/span\u003e \u003cspan class=f-q\u003e«Вставить в дерево»\u003c/span\u003e \u003cspan class=f-k\u003eот\u003c/span\u003e акк \u003cspan class=f-k\u003eи\u003c/span\u003e эл\n\n\u003cspan class=f-d\u003eтотальная\u003c/span\u003e \u003cspan class=f-d\u003eфункция\u003c/span\u003e \u003cspan class=f-q\u003e«Развернуть»\u003c/span\u003e\n  \u003cspan class=f-k\u003eпринимает\u003c/span\u003e дерево: \u003cspan class=f-q\u003e«Дерево»\u003c/span\u003e\n  \u003cspan class=f-k\u003eвозвращает\u003c/span\u003e \u003cspan class=f-q\u003e«Дерево»\u003c/span\u003e\n  \u003cspan class=f-k\u003eразбор\u003c/span\u003e дерева\n    \u003cspan class=f-k\u003eслучай\u003c/span\u003e Лист\n      \u003cspan class=f-k\u003eто\u003c/span\u003e \u003cspan class=f-d\u003eвариант\u003c/span\u003e Лист\n    \u003cspan class=f-k\u003eслучай\u003c/span\u003e \u003cspan class=f-d\u003eвариант\u003c/span\u003e Узел \u003cspan class=f-k\u003eс\u003c/span\u003e значение \u003cspan class=f-k\u003eкак\u003c/span\u003e зн \u003cspan class=f-k\u003eи\u003c/span\u003e левое \u003cspan class=f-k\u003eкак\u003c/span\u003e л \u003cspan class=f-k\u003eи\u003c/span\u003e правое \u003cspan class=f-k\u003eкак\u003c/span\u003e п\n      \u003cspan class=f-k\u003eпусть\u003c/span\u003e слева \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-q\u003e«Развернуть»\u003c/span\u003e \u003cspan class=f-k\u003eот\u003c/span\u003e п\n      \u003cspan class=f-k\u003eпусть\u003c/span\u003e справа \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-q\u003e«Развернуть»\u003c/span\u003e \u003cspan class=f-k\u003eот\u003c/span\u003e л\n      Узел \u003cspan class=f-k\u003eс\u003c/span\u003e значение \u003cspan class=f-o\u003eравным\u003c/span\u003e зн \u003cspan class=f-k\u003eи\u003c/span\u003e левое \u003cspan class=f-o\u003eравным\u003c/span\u003e слева \u003cspan class=f-k\u003eи\u003c/span\u003e правое \u003cspan class=f-o\u003eравным\u003c/span\u003e справа\n\n\u003cspan class=f-d\u003eтотальная\u003c/span\u003e \u003cspan class=f-d\u003eфункция\u003c/span\u003e \u003cspan class=f-q\u003e«Обход по порядку»\u003c/span\u003e\n  \u003cspan class=f-k\u003eпринимает\u003c/span\u003e дерево: \u003cspan class=f-q\u003e«Дерево»\u003c/span\u003e\n  \u003cspan class=f-k\u003eвозвращает\u003c/span\u003e \u003cspan class=f-k\u003eсписок\u003c/span\u003e \u003cspan class=f-t\u003eчисла\u003c/span\u003e\n  \u003cspan class=f-k\u003eразбор\u003c/span\u003e дерева\n    \u003cspan class=f-k\u003eслучай\u003c/span\u003e Лист\n      \u003cspan class=f-k\u003eто\u003c/span\u003e \u003cspan class=f-k\u003eпустой список\u003c/span\u003e\n    \u003cspan class=f-k\u003eслучай\u003c/span\u003e \u003cspan class=f-d\u003eвариант\u003c/span\u003e Узел \u003cspan class=f-k\u003eс\u003c/span\u003e значение \u003cspan class=f-k\u003eкак\u003c/span\u003e зн \u003cspan class=f-k\u003eи\u003c/span\u003e левое \u003cspan class=f-k\u003eкак\u003c/span\u003e л \u003cspan class=f-k\u003eи\u003c/span\u003e правое \u003cspan class=f-k\u003eкак\u003c/span\u003e п\n      \u003cspan class=f-k\u003eпусть\u003c/span\u003e слева \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-q\u003e«Обход по порядку»\u003c/span\u003e \u003cspan class=f-k\u003eот\u003c/span\u003e л\n      \u003cspan class=f-k\u003eпусть\u003c/span\u003e справа \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-q\u003e«Обход по порядку»\u003c/span\u003e \u003cspan class=f-k\u003eот\u003c/span\u003e п\n      \u003cspan class=f-q\u003e«Соединить списки»\u003c/span\u003e \u003cspan class=f-k\u003eот\u003c/span\u003e (\u003cspan class=f-k\u003eдобавить\u003c/span\u003e зн \u003cspan class=f-k\u003eк\u003c/span\u003e слева) \u003cspan class=f-k\u003eи\u003c/span\u003e справа\n\n\u003cspan class=f-d\u003eтотальная\u003c/span\u003e \u003cspan class=f-d\u003eфункция\u003c/span\u003e \u003cspan class=f-q\u003e«Обход дерева из списка»\u003c/span\u003e\n  \u003cspan class=f-k\u003eпринимает\u003c/span\u003e элементы: \u003cspan class=f-k\u003eсписок\u003c/span\u003e \u003cspan class=f-t\u003eчисла\u003c/span\u003e\n  \u003cspan class=f-k\u003eвозвращает\u003c/span\u003e \u003cspan class=f-k\u003eсписок\u003c/span\u003e \u003cspan class=f-t\u003eчисла\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Дерево поиска обходится по возрастанию»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e элементы \u003cspan class=f-o\u003eравно\u003c/span\u003e [\u003cspan class=f-n\u003e4\u003c/span\u003e, \u003cspan class=f-n\u003e2\u003c/span\u003e, \u003cspan class=f-n\u003e7\u003c/span\u003e, \u003cspan class=f-n\u003e1\u003c/span\u003e, \u003cspan class=f-n\u003e3\u003c/span\u003e, \u003cspan class=f-n\u003e6\u003c/span\u003e, \u003cspan class=f-n\u003e9\u003c/span\u003e]\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e [\u003cspan class=f-n\u003e1\u003c/span\u003e, \u003cspan class=f-n\u003e2\u003c/span\u003e, \u003cspan class=f-n\u003e3\u003c/span\u003e, \u003cspan class=f-n\u003e4\u003c/span\u003e, \u003cspan class=f-n\u003e6\u003c/span\u003e, \u003cspan class=f-n\u003e7\u003c/span\u003e, \u003cspan class=f-n\u003e9\u003c/span\u003e]\n  \u003cspan class=f-q\u003e«Обход по порядку»\u003c/span\u003e \u003cspan class=f-k\u003eот\u003c/span\u003e (\u003cspan class=f-q\u003e«Дерево из списка»\u003c/span\u003e \u003cspan class=f-k\u003eот\u003c/span\u003e элементы)\n\n\u003cspan class=f-d\u003eтотальная\u003c/span\u003e \u003cspan class=f-d\u003eфункция\u003c/span\u003e \u003cspan class=f-q\u003e«Обход после разворота»\u003c/span\u003e\n  \u003cspan class=f-k\u003eпринимает\u003c/span\u003e элементы: \u003cspan class=f-k\u003eсписок\u003c/span\u003e \u003cspan class=f-t\u003eчисла\u003c/span\u003e\n  \u003cspan class=f-k\u003eвозвращает\u003c/span\u003e \u003cspan class=f-k\u003eсписок\u003c/span\u003e \u003cspan class=f-t\u003eчисла\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Пример 1 из условия»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e элементы \u003cspan class=f-o\u003eравно\u003c/span\u003e [\u003cspan class=f-n\u003e4\u003c/span\u003e, \u003cspan class=f-n\u003e2\u003c/span\u003e, \u003cspan class=f-n\u003e7\u003c/span\u003e, \u003cspan class=f-n\u003e1\u003c/span\u003e, \u003cspan class=f-n\u003e3\u003c/span\u003e, \u003cspan class=f-n\u003e6\u003c/span\u003e, \u003cspan class=f-n\u003e9\u003c/span\u003e]\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e [\u003cspan class=f-n\u003e9\u003c/span\u003e, \u003cspan class=f-n\u003e7\u003c/span\u003e, \u003cspan class=f-n\u003e6\u003c/span\u003e, \u003cspan class=f-n\u003e4\u003c/span\u003e, \u003cspan class=f-n\u003e3\u003c/span\u003e, \u003cspan class=f-n\u003e2\u003c/span\u003e, \u003cspan class=f-n\u003e1\u003c/span\u003e]\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Пример 2 из условия»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e элементы \u003cspan class=f-o\u003eравно\u003c/span\u003e [\u003cspan class=f-n\u003e2\u003c/span\u003e, \u003cspan class=f-n\u003e1\u003c/span\u003e, \u003cspan class=f-n\u003e3\u003c/span\u003e]\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e [\u003cspan class=f-n\u003e3\u003c/span\u003e, \u003cspan class=f-n\u003e2\u003c/span\u003e, \u003cspan class=f-n\u003e1\u003c/span\u003e]\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Пустое дерево»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e элементы \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-k\u003eпустой список\u003c/span\u003e\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e \u003cspan class=f-k\u003eпустой список\u003c/span\u003e\n  \u003cspan class=f-q\u003e«Обход по порядку»\u003c/span\u003e \u003cspan class=f-k\u003eот\u003c/span\u003e (\u003cspan class=f-q\u003e«Развернуть»\u003c/span\u003e \u003cspan class=f-k\u003eот\u003c/span\u003e (\u003cspan class=f-q\u003e«Дерево из списка»\u003c/span\u003e \u003cspan class=f-k\u003eот\u003c/span\u003e элементы))\n","leetcode/242-valid-anagram.flang":"\u003cspan class=f-d\u003eмодуль\u003c/span\u003e \u003cspan class=f-q\u003e«Анаграмма»\u003c/span\u003e\n\n\u003cspan class=f-c\u003e// LeetCode 242. Valid Anagram.\u003c/span\u003e\n\u003cspan class=f-c\u003e// Проверить, что второе слово — перестановка первого. По условию буквы\u003c/span\u003e\n\u003cspan class=f-c\u003e// только строчные латинские.\u003c/span\u003e\n\u003cspan class=f-c\u003e//\u003c/span\u003e\n\u003cspan class=f-c\u003e// Тотальная — и это неожиданно, потому что задача про строки. Приём:\u003c/span\u003e\n\u003cspan class=f-c\u003e// считать буквы не обходом строки, а встроенной «разделить». Число вхождений\u003c/span\u003e\n\u003cspan class=f-c\u003e// буквы равно числу частей минус один, а перебирать надо не символы слова,\u003c/span\u003e\n\u003cspan class=f-c\u003e// а заранее известный алфавит из 26 букв — конечный список, записанный\u003c/span\u003e\n\u003cspan class=f-c\u003e// литералом. Свёртка по литеральному списку тотальна всегда.\u003c/span\u003e\n\n\u003cspan class=f-d\u003eтотальная\u003c/span\u003e \u003cspan class=f-d\u003eфункция\u003c/span\u003e \u003cspan class=f-q\u003e«Счёт буквы»\u003c/span\u003e\n  \u003cspan class=f-k\u003eпринимает\u003c/span\u003e текст: \u003cspan class=f-t\u003eстрока\u003c/span\u003e, буква: \u003cspan class=f-t\u003eстрока\u003c/span\u003e\n  \u003cspan class=f-k\u003eвозвращает\u003c/span\u003e \u003cspan class=f-t\u003eчисло\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Две буквы a»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e текст \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-s\u003e\"abac\"\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e буква \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-s\u003e\"a\"\u003c/span\u003e\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e \u003cspan class=f-n\u003e2\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Буквы нет»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e текст \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-s\u003e\"bbb\"\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e буква \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-s\u003e\"a\"\u003c/span\u003e\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e \u003cspan class=f-n\u003e0\u003c/span\u003e\n  (\u003cspan class=f-k\u003eдлина\u003c/span\u003e (\u003cspan class=f-k\u003eразделить\u003c/span\u003e текст \u003cspan class=f-k\u003eпо\u003c/span\u003e буква)) \u003cspan class=f-o\u003eминус\u003c/span\u003e \u003cspan class=f-n\u003e1\u003c/span\u003e\n\n\u003cspan class=f-d\u003eтотальная\u003c/span\u003e \u003cspan class=f-d\u003eфункция\u003c/span\u003e \u003cspan class=f-q\u003e«Анаграмма»\u003c/span\u003e\n  \u003cspan class=f-k\u003eпринимает\u003c/span\u003e первое: \u003cspan class=f-t\u003eстрока\u003c/span\u003e, второе: \u003cspan class=f-t\u003eстрока\u003c/span\u003e\n  \u003cspan class=f-k\u003eвозвращает\u003c/span\u003e \u003cspan class=f-t\u003eпризнак\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Пример 1 из условия»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e первое \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-s\u003e\"anagram\"\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e второе \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-s\u003e\"nagaram\"\u003c/span\u003e\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e \u003cspan class=f-i\u003eда\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Пример 2 из условия»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e первое \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-s\u003e\"rat\"\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e второе \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-s\u003e\"car\"\u003c/span\u003e\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e \u003cspan class=f-i\u003eнет\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Разная длина»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e первое \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-s\u003e\"a\"\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e второе \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-s\u003e\"ab\"\u003c/span\u003e\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e \u003cspan class=f-i\u003eнет\u003c/span\u003e\n  \u003cspan class=f-k\u003eесли\u003c/span\u003e (\u003cspan class=f-k\u003eдлина\u003c/span\u003e первое) \u003cspan class=f-o\u003eне равен\u003c/span\u003e (\u003cspan class=f-k\u003eдлина\u003c/span\u003e второе)\n    \u003cspan class=f-k\u003eто\u003c/span\u003e \u003cspan class=f-i\u003eнет\u003c/span\u003e\n    \u003cspan class=f-k\u003eиначе\u003c/span\u003e\n      \u003cspan class=f-k\u003eсвёртка\u003c/span\u003e [\u003cspan class=f-s\u003e\"a\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"b\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"c\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"d\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"e\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"f\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"g\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"h\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"i\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"j\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"k\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"l\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"m\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"n\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"o\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"p\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"q\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"r\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"s\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"t\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"u\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"v\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"w\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"x\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"y\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"z\"\u003c/span\u003e] \u003cspan class=f-k\u003eначиная с\u003c/span\u003e \u003cspan class=f-i\u003eда\u003c/span\u003e \u003cspan class=f-k\u003eкак\u003c/span\u003e акк \u003cspan class=f-k\u003eи\u003c/span\u003e буква\n        \u003cspan class=f-k\u003eесли\u003c/span\u003e акк \u003cspan class=f-o\u003eравен\u003c/span\u003e \u003cspan class=f-i\u003eнет\u003c/span\u003e\n          \u003cspan class=f-k\u003eто\u003c/span\u003e \u003cspan class=f-i\u003eнет\u003c/span\u003e\n          \u003cspan class=f-k\u003eиначе\u003c/span\u003e (\u003cspan class=f-q\u003e«Счёт буквы»\u003c/span\u003e \u003cspan class=f-k\u003eот\u003c/span\u003e первое \u003cspan class=f-k\u003eи\u003c/span\u003e буква) \u003cspan class=f-o\u003eравен\u003c/span\u003e (\u003cspan class=f-q\u003e«Счёт буквы»\u003c/span\u003e \u003cspan class=f-k\u003eот\u003c/span\u003e второе \u003cspan class=f-k\u003eи\u003c/span\u003e буква)\n","leetcode/268-missing-number.flang":"\u003cspan class=f-d\u003eмодуль\u003c/span\u003e \u003cspan class=f-q\u003e«Пропущенное число»\u003c/span\u003e\n\n\u003cspan class=f-c\u003e// LeetCode 268. Missing Number.\u003c/span\u003e\n\u003cspan class=f-c\u003e// В списке лежат все числа от 0 до n, кроме одного. Найти пропущенное.\u003c/span\u003e\n\u003cspan class=f-c\u003e//\u003c/span\u003e\n\u003cspan class=f-c\u003e// Тотальная и без рекурсии: сумма арифметической прогрессии минус сумма\u003c/span\u003e\n\u003cspan class=f-c\u003e// списка. Здесь язык не мешает вовсе — вся задача выражается двумя свёртками\u003c/span\u003e\n\u003cspan class=f-c\u003e// и арифметикой.\u003c/span\u003e\n\n\u003cspan class=f-d\u003eтотальная\u003c/span\u003e \u003cspan class=f-d\u003eфункция\u003c/span\u003e \u003cspan class=f-q\u003e«Сумма»\u003c/span\u003e\n  \u003cspan class=f-k\u003eпринимает\u003c/span\u003e элементы: \u003cspan class=f-k\u003eсписок\u003c/span\u003e \u003cspan class=f-t\u003eчисла\u003c/span\u003e\n  \u003cspan class=f-k\u003eвозвращает\u003c/span\u003e \u003cspan class=f-t\u003eчисло\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Сумма трёх»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e элементы \u003cspan class=f-o\u003eравно\u003c/span\u003e [\u003cspan class=f-n\u003e1\u003c/span\u003e, \u003cspan class=f-n\u003e2\u003c/span\u003e, \u003cspan class=f-n\u003e3\u003c/span\u003e]\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e \u003cspan class=f-n\u003e6\u003c/span\u003e\n  \u003cspan class=f-k\u003eсвёртка\u003c/span\u003e элементы \u003cspan class=f-k\u003eначиная с\u003c/span\u003e \u003cspan class=f-n\u003e0\u003c/span\u003e \u003cspan class=f-k\u003eкак\u003c/span\u003e акк \u003cspan class=f-k\u003eи\u003c/span\u003e эл \u003cspan class=f-o\u003e→\u003c/span\u003e акк \u003cspan class=f-o\u003eплюс\u003c/span\u003e эл\n\n\u003cspan class=f-d\u003eтотальная\u003c/span\u003e \u003cspan class=f-d\u003eфункция\u003c/span\u003e \u003cspan class=f-q\u003e«Пропущенное число»\u003c/span\u003e\n  \u003cspan class=f-k\u003eпринимает\u003c/span\u003e элементы: \u003cspan class=f-k\u003eсписок\u003c/span\u003e \u003cspan class=f-t\u003eчисла\u003c/span\u003e\n  \u003cspan class=f-k\u003eвозвращает\u003c/span\u003e \u003cspan class=f-t\u003eчисло\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Пример 1 из условия»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e элементы \u003cspan class=f-o\u003eравно\u003c/span\u003e [\u003cspan class=f-n\u003e3\u003c/span\u003e, \u003cspan class=f-n\u003e0\u003c/span\u003e, \u003cspan class=f-n\u003e1\u003c/span\u003e]\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e \u003cspan class=f-n\u003e2\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Пример 2 из условия»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e элементы \u003cspan class=f-o\u003eравно\u003c/span\u003e [\u003cspan class=f-n\u003e0\u003c/span\u003e, \u003cspan class=f-n\u003e1\u003c/span\u003e]\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e \u003cspan class=f-n\u003e2\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Пример 3 из условия»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e элементы \u003cspan class=f-o\u003eравно\u003c/span\u003e [\u003cspan class=f-n\u003e9\u003c/span\u003e, \u003cspan class=f-n\u003e6\u003c/span\u003e, \u003cspan class=f-n\u003e4\u003c/span\u003e, \u003cspan class=f-n\u003e2\u003c/span\u003e, \u003cspan class=f-n\u003e3\u003c/span\u003e, \u003cspan class=f-n\u003e5\u003c/span\u003e, \u003cspan class=f-n\u003e7\u003c/span\u003e, \u003cspan class=f-n\u003e0\u003c/span\u003e, \u003cspan class=f-n\u003e1\u003c/span\u003e]\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e \u003cspan class=f-n\u003e8\u003c/span\u003e\n  \u003cspan class=f-k\u003eпусть\u003c/span\u003e предел \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-k\u003eдлина\u003c/span\u003e элементы\n  \u003cspan class=f-k\u003eпусть\u003c/span\u003e полная \u003cspan class=f-o\u003eравно\u003c/span\u003e (предел \u003cspan class=f-o\u003eумножить на\u003c/span\u003e (предел \u003cspan class=f-o\u003eплюс\u003c/span\u003e \u003cspan class=f-n\u003e1\u003c/span\u003e)) \u003cspan class=f-o\u003eделить на\u003c/span\u003e \u003cspan class=f-n\u003e2\u003c/span\u003e\n  полная \u003cspan class=f-o\u003eминус\u003c/span\u003e (\u003cspan class=f-q\u003e«Сумма»\u003c/span\u003e \u003cspan class=f-k\u003eот\u003c/span\u003e элементы)\n","leetcode/283-move-zeroes.flang":"\u003cspan class=f-d\u003eмодуль\u003c/span\u003e \u003cspan class=f-q\u003e«Сдвинуть нули»\u003c/span\u003e\n\n\u003cspan class=f-c\u003e// LeetCode 283. Move Zeroes.\u003c/span\u003e\n\u003cspan class=f-c\u003e// Перенести все нули в конец, сохранив порядок остальных.\u003c/span\u003e\n\u003cspan class=f-c\u003e//\u003c/span\u003e\n\u003cspan class=f-c\u003e// Тотальная и без единой рекурсии: два фильтра и склейка. В условии просят\u003c/span\u003e\n\u003cspan class=f-c\u003e// работать «на месте», но изменяемых массивов в языке нет — возвращается\u003c/span\u003e\n\u003cspan class=f-c\u003e// новый список того же содержания.\u003c/span\u003e\n\n\u003cspan class=f-d\u003eтотальная\u003c/span\u003e \u003cspan class=f-d\u003eфункция\u003c/span\u003e \u003cspan class=f-q\u003e«Соединить списки»\u003c/span\u003e\n  \u003cspan class=f-k\u003eпринимает\u003c/span\u003e первый: \u003cspan class=f-k\u003eсписок\u003c/span\u003e \u003cspan class=f-t\u003eчисла\u003c/span\u003e, второй: \u003cspan class=f-k\u003eсписок\u003c/span\u003e \u003cspan class=f-t\u003eчисла\u003c/span\u003e\n  \u003cspan class=f-k\u003eвозвращает\u003c/span\u003e \u003cspan class=f-k\u003eсписок\u003c/span\u003e \u003cspan class=f-t\u003eчисла\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Склейка»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e первый \u003cspan class=f-o\u003eравно\u003c/span\u003e [\u003cspan class=f-n\u003e1\u003c/span\u003e]\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e второй \u003cspan class=f-o\u003eравно\u003c/span\u003e [\u003cspan class=f-n\u003e0\u003c/span\u003e, \u003cspan class=f-n\u003e0\u003c/span\u003e]\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e [\u003cspan class=f-n\u003e1\u003c/span\u003e, \u003cspan class=f-n\u003e0\u003c/span\u003e, \u003cspan class=f-n\u003e0\u003c/span\u003e]\n  \u003cspan class=f-k\u003eсвёртка\u003c/span\u003e второй \u003cspan class=f-k\u003eначиная с\u003c/span\u003e первый \u003cspan class=f-k\u003eкак\u003c/span\u003e акк \u003cspan class=f-k\u003eи\u003c/span\u003e эл \u003cspan class=f-o\u003e→\u003c/span\u003e \u003cspan class=f-k\u003eдобавить\u003c/span\u003e эл \u003cspan class=f-k\u003eк\u003c/span\u003e акк\n\n\u003cspan class=f-d\u003eтотальная\u003c/span\u003e \u003cspan class=f-d\u003eфункция\u003c/span\u003e \u003cspan class=f-q\u003e«Сдвинуть нули»\u003c/span\u003e\n  \u003cspan class=f-k\u003eпринимает\u003c/span\u003e элементы: \u003cspan class=f-k\u003eсписок\u003c/span\u003e \u003cspan class=f-t\u003eчисла\u003c/span\u003e\n  \u003cspan class=f-k\u003eвозвращает\u003c/span\u003e \u003cspan class=f-k\u003eсписок\u003c/span\u003e \u003cspan class=f-t\u003eчисла\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Пример 1 из условия»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e элементы \u003cspan class=f-o\u003eравно\u003c/span\u003e [\u003cspan class=f-n\u003e0\u003c/span\u003e, \u003cspan class=f-n\u003e1\u003c/span\u003e, \u003cspan class=f-n\u003e0\u003c/span\u003e, \u003cspan class=f-n\u003e3\u003c/span\u003e, \u003cspan class=f-n\u003e12\u003c/span\u003e]\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e [\u003cspan class=f-n\u003e1\u003c/span\u003e, \u003cspan class=f-n\u003e3\u003c/span\u003e, \u003cspan class=f-n\u003e12\u003c/span\u003e, \u003cspan class=f-n\u003e0\u003c/span\u003e, \u003cspan class=f-n\u003e0\u003c/span\u003e]\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Пример 2 из условия»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e элементы \u003cspan class=f-o\u003eравно\u003c/span\u003e [\u003cspan class=f-n\u003e0\u003c/span\u003e]\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e [\u003cspan class=f-n\u003e0\u003c/span\u003e]\n  \u003cspan class=f-k\u003eпусть\u003c/span\u003e ненулевые \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-k\u003eотфильтровать\u003c/span\u003e элементы \u003cspan class=f-k\u003eгде\u003c/span\u003e эл \u003cspan class=f-o\u003e→\u003c/span\u003e эл \u003cspan class=f-o\u003eне равен\u003c/span\u003e \u003cspan class=f-n\u003e0\u003c/span\u003e\n  \u003cspan class=f-k\u003eпусть\u003c/span\u003e нули \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-k\u003eотфильтровать\u003c/span\u003e элементы \u003cspan class=f-k\u003eгде\u003c/span\u003e эл \u003cspan class=f-o\u003e→\u003c/span\u003e эл \u003cspan class=f-o\u003eравен\u003c/span\u003e \u003cspan class=f-n\u003e0\u003c/span\u003e\n  \u003cspan class=f-q\u003e«Соединить списки»\u003c/span\u003e \u003cspan class=f-k\u003eот\u003c/span\u003e ненулевые \u003cspan class=f-k\u003eи\u003c/span\u003e нули\n","leetcode/344-reverse-string.flang":"\u003cspan class=f-d\u003eмодуль\u003c/span\u003e \u003cspan class=f-q\u003e«Обратить строку»\u003c/span\u003e\n\n\u003cspan class=f-c\u003e// LeetCode 344. Reverse String.\u003c/span\u003e\n\u003cspan class=f-c\u003e// Условие даёт массив символов и просит обратить его на месте. Массив\u003c/span\u003e\n\u003cspan class=f-c\u003e// символов — это список строки, и здесь это удача: список flang разбирается\u003c/span\u003e\n\u003cspan class=f-c\u003e// структурно, а строка нет. Поэтому задача остаётся тотальной, тогда как\u003c/span\u003e\n\u003cspan class=f-c\u003e// та же операция над строкой (модуль stdlib/strings.flang) тотальной быть\u003c/span\u003e\n\u003cspan class=f-c\u003e// не может — по строке нельзя рекурсировать с доказательством убывания.\u003c/span\u003e\n\u003cspan class=f-c\u003e//\u003c/span\u003e\n\u003cspan class=f-c\u003e// Изменения на месте нет и не будет: значения flang неизменяемы.\u003c/span\u003e\n\n\u003cspan class=f-d\u003eтотальная\u003c/span\u003e \u003cspan class=f-d\u003eфункция\u003c/span\u003e \u003cspan class=f-q\u003e«Приписать строку в начало»\u003c/span\u003e\n  \u003cspan class=f-k\u003eпринимает\u003c/span\u003e первая: \u003cspan class=f-t\u003eстрока\u003c/span\u003e, элементы: \u003cspan class=f-k\u003eсписок\u003c/span\u003e \u003cspan class=f-t\u003eстроки\u003c/span\u003e\n  \u003cspan class=f-k\u003eвозвращает\u003c/span\u003e \u003cspan class=f-k\u003eсписок\u003c/span\u003e \u003cspan class=f-t\u003eстроки\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«В непустой»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e первая \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-s\u003e\"а\"\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e элементы \u003cspan class=f-o\u003eравно\u003c/span\u003e [\u003cspan class=f-s\u003e\"б\"\u003c/span\u003e]\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e [\u003cspan class=f-s\u003e\"а\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"б\"\u003c/span\u003e]\n  \u003cspan class=f-k\u003eсвёртка\u003c/span\u003e элементы \u003cspan class=f-k\u003eначиная с\u003c/span\u003e [первая] \u003cspan class=f-k\u003eкак\u003c/span\u003e акк \u003cspan class=f-k\u003eи\u003c/span\u003e эл \u003cspan class=f-o\u003e→\u003c/span\u003e \u003cspan class=f-k\u003eдобавить\u003c/span\u003e эл \u003cspan class=f-k\u003eк\u003c/span\u003e акк\n\n\u003cspan class=f-d\u003eтотальная\u003c/span\u003e \u003cspan class=f-d\u003eфункция\u003c/span\u003e \u003cspan class=f-q\u003e«Обратить символы»\u003c/span\u003e\n  \u003cspan class=f-k\u003eпринимает\u003c/span\u003e символы: \u003cspan class=f-k\u003eсписок\u003c/span\u003e \u003cspan class=f-t\u003eстроки\u003c/span\u003e\n  \u003cspan class=f-k\u003eвозвращает\u003c/span\u003e \u003cspan class=f-k\u003eсписок\u003c/span\u003e \u003cspan class=f-t\u003eстроки\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Пример 1 из условия»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e символы \u003cspan class=f-o\u003eравно\u003c/span\u003e [\u003cspan class=f-s\u003e\"h\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"e\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"l\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"l\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"o\"\u003c/span\u003e]\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e [\u003cspan class=f-s\u003e\"o\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"l\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"l\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"e\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"h\"\u003c/span\u003e]\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Пример 2 из условия»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e символы \u003cspan class=f-o\u003eравно\u003c/span\u003e [\u003cspan class=f-s\u003e\"H\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"a\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"n\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"n\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"a\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"h\"\u003c/span\u003e]\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e [\u003cspan class=f-s\u003e\"h\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"a\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"n\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"n\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"a\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"H\"\u003c/span\u003e]\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Пустой список»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e символы \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-k\u003eпустой список\u003c/span\u003e\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e \u003cspan class=f-k\u003eпустой список\u003c/span\u003e\n  \u003cspan class=f-k\u003eсвёртка\u003c/span\u003e символы \u003cspan class=f-k\u003eначиная с\u003c/span\u003e \u003cspan class=f-k\u003eпустой список\u003c/span\u003e \u003cspan class=f-k\u003eкак\u003c/span\u003e акк \u003cspan class=f-k\u003eи\u003c/span\u003e буква \u003cspan class=f-o\u003e→\u003c/span\u003e \u003cspan class=f-q\u003e«Приписать строку в начало»\u003c/span\u003e \u003cspan class=f-k\u003eот\u003c/span\u003e буква \u003cspan class=f-k\u003eи\u003c/span\u003e акк\n\n\u003cspan class=f-d\u003eтотальная\u003c/span\u003e \u003cspan class=f-d\u003eфункция\u003c/span\u003e \u003cspan class=f-q\u003e«Строка из символов»\u003c/span\u003e\n  \u003cspan class=f-k\u003eпринимает\u003c/span\u003e символы: \u003cspan class=f-k\u003eсписок\u003c/span\u003e \u003cspan class=f-t\u003eстроки\u003c/span\u003e\n  \u003cspan class=f-k\u003eвозвращает\u003c/span\u003e \u003cspan class=f-t\u003eстрока\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Склейка»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e символы \u003cspan class=f-o\u003eравно\u003c/span\u003e [\u003cspan class=f-s\u003e\"o\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"l\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"l\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"e\"\u003c/span\u003e, \u003cspan class=f-s\u003e\"h\"\u003c/span\u003e]\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e \u003cspan class=f-s\u003e\"olleh\"\u003c/span\u003e\n  \u003cspan class=f-k\u003eсвёртка\u003c/span\u003e символы \u003cspan class=f-k\u003eначиная с\u003c/span\u003e \u003cspan class=f-s\u003e\"\"\u003c/span\u003e \u003cspan class=f-k\u003eкак\u003c/span\u003e акк \u003cspan class=f-k\u003eи\u003c/span\u003e буква \u003cspan class=f-o\u003e→\u003c/span\u003e \u003cspan class=f-k\u003eсоединить\u003c/span\u003e акк \u003cspan class=f-k\u003eс\u003c/span\u003e буква\n","leetcode/349-intersection-of-two-arrays.flang":"\u003cspan class=f-d\u003eмодуль\u003c/span\u003e \u003cspan class=f-q\u003e«Пересечение списков»\u003c/span\u003e\n\n\u003cspan class=f-c\u003e// LeetCode 349. Intersection of Two Arrays.\u003c/span\u003e\n\u003cspan class=f-c\u003e// Вернуть уникальные значения, встречающиеся в обоих списках.\u003c/span\u003e\n\u003cspan class=f-c\u003e//\u003c/span\u003e\n\u003cspan class=f-c\u003e// Тотальная: два прохода свёрткой и фильтром, рекурсии нет.\u003c/span\u003e\n\u003cspan class=f-c\u003e// Множеств в языке нет, «уникальность» строится вручную через «содержит».\u003c/span\u003e\n\n\u003cspan class=f-d\u003eтотальная\u003c/span\u003e \u003cspan class=f-d\u003eфункция\u003c/span\u003e \u003cspan class=f-q\u003e«Уникальные»\u003c/span\u003e\n  \u003cspan class=f-k\u003eпринимает\u003c/span\u003e элементы: \u003cspan class=f-k\u003eсписок\u003c/span\u003e \u003cspan class=f-t\u003eчисла\u003c/span\u003e\n  \u003cspan class=f-k\u003eвозвращает\u003c/span\u003e \u003cspan class=f-k\u003eсписок\u003c/span\u003e \u003cspan class=f-t\u003eчисла\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«С повторами»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e элементы \u003cspan class=f-o\u003eравно\u003c/span\u003e [\u003cspan class=f-n\u003e1\u003c/span\u003e, \u003cspan class=f-n\u003e1\u003c/span\u003e, \u003cspan class=f-n\u003e2\u003c/span\u003e]\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e [\u003cspan class=f-n\u003e1\u003c/span\u003e, \u003cspan class=f-n\u003e2\u003c/span\u003e]\n  \u003cspan class=f-k\u003eсвёртка\u003c/span\u003e элементы \u003cspan class=f-k\u003eначиная с\u003c/span\u003e \u003cspan class=f-k\u003eпустой список\u003c/span\u003e \u003cspan class=f-k\u003eкак\u003c/span\u003e акк \u003cspan class=f-k\u003eи\u003c/span\u003e эл\n    \u003cspan class=f-k\u003eесли\u003c/span\u003e акк \u003cspan class=f-k\u003eсодержит\u003c/span\u003e эл \u003cspan class=f-k\u003eто\u003c/span\u003e акк \u003cspan class=f-k\u003eиначе\u003c/span\u003e \u003cspan class=f-k\u003eдобавить\u003c/span\u003e эл \u003cspan class=f-k\u003eк\u003c/span\u003e акк\n\n\u003cspan class=f-d\u003eтотальная\u003c/span\u003e \u003cspan class=f-d\u003eфункция\u003c/span\u003e \u003cspan class=f-q\u003e«Пересечение»\u003c/span\u003e\n  \u003cspan class=f-k\u003eпринимает\u003c/span\u003e первый: \u003cspan class=f-k\u003eсписок\u003c/span\u003e \u003cspan class=f-t\u003eчисла\u003c/span\u003e, второй: \u003cspan class=f-k\u003eсписок\u003c/span\u003e \u003cspan class=f-t\u003eчисла\u003c/span\u003e\n  \u003cspan class=f-k\u003eвозвращает\u003c/span\u003e \u003cspan class=f-k\u003eсписок\u003c/span\u003e \u003cspan class=f-t\u003eчисла\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Пример 1 из условия»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e первый \u003cspan class=f-o\u003eравно\u003c/span\u003e [\u003cspan class=f-n\u003e1\u003c/span\u003e, \u003cspan class=f-n\u003e2\u003c/span\u003e, \u003cspan class=f-n\u003e2\u003c/span\u003e, \u003cspan class=f-n\u003e1\u003c/span\u003e]\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e второй \u003cspan class=f-o\u003eравно\u003c/span\u003e [\u003cspan class=f-n\u003e2\u003c/span\u003e, \u003cspan class=f-n\u003e2\u003c/span\u003e]\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e [\u003cspan class=f-n\u003e2\u003c/span\u003e]\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Пример 2 из условия»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e первый \u003cspan class=f-o\u003eравно\u003c/span\u003e [\u003cspan class=f-n\u003e4\u003c/span\u003e, \u003cspan class=f-n\u003e9\u003c/span\u003e, \u003cspan class=f-n\u003e5\u003c/span\u003e]\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e второй \u003cspan class=f-o\u003eравно\u003c/span\u003e [\u003cspan class=f-n\u003e9\u003c/span\u003e, \u003cspan class=f-n\u003e4\u003c/span\u003e, \u003cspan class=f-n\u003e9\u003c/span\u003e, \u003cspan class=f-n\u003e8\u003c/span\u003e, \u003cspan class=f-n\u003e4\u003c/span\u003e]\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e [\u003cspan class=f-n\u003e4\u003c/span\u003e, \u003cspan class=f-n\u003e9\u003c/span\u003e]\n  \u003cspan class=f-k\u003eотфильтровать\u003c/span\u003e (\u003cspan class=f-q\u003e«Уникальные»\u003c/span\u003e \u003cspan class=f-k\u003eот\u003c/span\u003e первый) \u003cspan class=f-k\u003eгде\u003c/span\u003e эл \u003cspan class=f-o\u003e→\u003c/span\u003e второй \u003cspan class=f-k\u003eсодержит\u003c/span\u003e эл\n","leetcode/704-binary-search.flang":"\u003cspan class=f-d\u003eмодуль\u003c/span\u003e \u003cspan class=f-q\u003e«Двоичный поиск»\u003c/span\u003e\n\n\u003cspan class=f-c\u003e// LeetCode 704. Binary Search.\u003c/span\u003e\n\u003cspan class=f-c\u003e// В отсортированном списке найти номер цели (с нуля) или −1.\u003c/span\u003e\n\u003cspan class=f-c\u003e//\u003c/span\u003e\n\u003cspan class=f-c\u003e// Тотальная — но приёмом, который стоит запомнить, потому что он показывает\u003c/span\u003e\n\u003cspan class=f-c\u003e// границу анализа завершаемости. Двоичный поиск сужает пару чисел «низ» и\u003c/span\u003e\n\u003cspan class=f-c\u003e// «верх», а убывание по числам totality.mjs не признаёт: «середина плюс 1» —\u003c/span\u003e\n\u003cspan class=f-c\u003e// результат арифметики, а не часть значения. Прямая запись даёт\u003c/span\u003e\n\u003cspan class=f-c\u003e// FLANG_NOT_TOTAL.\u003c/span\u003e\n\u003cspan class=f-c\u003e//\u003c/span\u003e\n\u003cspan class=f-c\u003e// Обход: рядом с настоящими аргументами едет «топливо» — список, у которого\u003c/span\u003e\n\u003cspan class=f-c\u003e// на каждом шаге берётся хвост. Топливо убывает структурно, значит цикл\u003c/span\u003e\n\u003cspan class=f-c\u003e// доказуемо конечен; а поскольку топливом служит сам список, шагов заведомо\u003c/span\u003e\n\u003cspan class=f-c\u003e// хватает (их нужно log₂n, а есть n). Приём честный, но это именно приём:\u003c/span\u003e\n\u003cspan class=f-c\u003e// в языке не хватает убывания по мере.\u003c/span\u003e\n\n\u003cspan class=f-d\u003eтотальная\u003c/span\u003e \u003cspan class=f-d\u003eфункция\u003c/span\u003e \u003cspan class=f-q\u003e«Элемент»\u003c/span\u003e\n  \u003cspan class=f-k\u003eпринимает\u003c/span\u003e элементы: \u003cspan class=f-k\u003eсписок\u003c/span\u003e \u003cspan class=f-t\u003eчисла\u003c/span\u003e, номер: \u003cspan class=f-t\u003eчисло\u003c/span\u003e\n  \u003cspan class=f-k\u003eвозвращает\u003c/span\u003e \u003cspan class=f-t\u003eчисло\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Второй элемент»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e элементы \u003cspan class=f-o\u003eравно\u003c/span\u003e [\u003cspan class=f-n\u003e10\u003c/span\u003e, \u003cspan class=f-n\u003e20\u003c/span\u003e, \u003cspan class=f-n\u003e30\u003c/span\u003e]\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e номер \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-n\u003e2\u003c/span\u003e\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e \u003cspan class=f-n\u003e20\u003c/span\u003e\n  \u003cspan class=f-k\u003eразбор\u003c/span\u003e элементов\n    \u003cspan class=f-k\u003eслучай\u003c/span\u003e \u003cspan class=f-k\u003eпусто\u003c/span\u003e\n      \u003cspan class=f-k\u003eто\u003c/span\u003e \u003cspan class=f-n\u003e0\u003c/span\u003e\n    \u003cspan class=f-k\u003eслучай\u003c/span\u003e \u003cspan class=f-k\u003eголова и хвост\u003c/span\u003e\n      \u003cspan class=f-k\u003eесли\u003c/span\u003e номер \u003cspan class=f-o\u003eне больше\u003c/span\u003e \u003cspan class=f-n\u003e1\u003c/span\u003e\n        \u003cspan class=f-k\u003eто\u003c/span\u003e \u003cspan class=f-k\u003eголова\u003c/span\u003e\n        \u003cspan class=f-k\u003eиначе\u003c/span\u003e \u003cspan class=f-q\u003e«Элемент»\u003c/span\u003e \u003cspan class=f-k\u003eот\u003c/span\u003e \u003cspan class=f-k\u003eхвост\u003c/span\u003e \u003cspan class=f-k\u003eи\u003c/span\u003e (номер \u003cspan class=f-o\u003eминус\u003c/span\u003e \u003cspan class=f-n\u003e1\u003c/span\u003e)\n\n\u003cspan class=f-d\u003eтотальная\u003c/span\u003e \u003cspan class=f-d\u003eфункция\u003c/span\u003e \u003cspan class=f-q\u003e«Поиск в диапазоне»\u003c/span\u003e\n  \u003cspan class=f-k\u003eпринимает\u003c/span\u003e топливо: \u003cspan class=f-k\u003eсписок\u003c/span\u003e \u003cspan class=f-t\u003eчисла\u003c/span\u003e, элементы: \u003cspan class=f-k\u003eсписок\u003c/span\u003e \u003cspan class=f-t\u003eчисла\u003c/span\u003e, цель: \u003cspan class=f-t\u003eчисло\u003c/span\u003e, низ: \u003cspan class=f-t\u003eчисло\u003c/span\u003e, верх: \u003cspan class=f-t\u003eчисло\u003c/span\u003e\n  \u003cspan class=f-k\u003eвозвращает\u003c/span\u003e \u003cspan class=f-t\u003eчисло\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Нашли середину»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e топливо \u003cspan class=f-o\u003eравно\u003c/span\u003e [\u003cspan class=f-n\u003e1\u003c/span\u003e, \u003cspan class=f-n\u003e2\u003c/span\u003e, \u003cspan class=f-n\u003e3\u003c/span\u003e]\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e элементы \u003cspan class=f-o\u003eравно\u003c/span\u003e [\u003cspan class=f-n\u003e1\u003c/span\u003e, \u003cspan class=f-n\u003e2\u003c/span\u003e, \u003cspan class=f-n\u003e3\u003c/span\u003e]\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e цель \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-n\u003e2\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e низ \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-n\u003e1\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e верх \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-n\u003e3\u003c/span\u003e\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e \u003cspan class=f-n\u003e1\u003c/span\u003e\n  \u003cspan class=f-k\u003eразбор\u003c/span\u003e топливо\n    \u003cspan class=f-k\u003eслучай\u003c/span\u003e \u003cspan class=f-k\u003eпусто\u003c/span\u003e\n      \u003cspan class=f-k\u003eто\u003c/span\u003e \u003cspan class=f-n\u003e-1\u003c/span\u003e\n    \u003cspan class=f-k\u003eслучай\u003c/span\u003e \u003cspan class=f-k\u003eголова и хвост\u003c/span\u003e\n      \u003cspan class=f-k\u003eесли\u003c/span\u003e низ \u003cspan class=f-o\u003eбольше\u003c/span\u003e верх\n        \u003cspan class=f-k\u003eто\u003c/span\u003e \u003cspan class=f-n\u003e-1\u003c/span\u003e\n        \u003cspan class=f-k\u003eиначе\u003c/span\u003e\n          \u003cspan class=f-k\u003eпусть\u003c/span\u003e сумма \u003cspan class=f-o\u003eравно\u003c/span\u003e низ \u003cspan class=f-o\u003eплюс\u003c/span\u003e верх\n          \u003cspan class=f-k\u003eпусть\u003c/span\u003e середина \u003cspan class=f-o\u003eравно\u003c/span\u003e (сумма \u003cspan class=f-o\u003eминус\u003c/span\u003e (сумма \u003cspan class=f-o\u003eостаток от\u003c/span\u003e \u003cspan class=f-n\u003e2\u003c/span\u003e)) \u003cspan class=f-o\u003eделить на\u003c/span\u003e \u003cspan class=f-n\u003e2\u003c/span\u003e\n          \u003cspan class=f-k\u003eпусть\u003c/span\u003e значение \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-q\u003e«Элемент»\u003c/span\u003e \u003cspan class=f-k\u003eот\u003c/span\u003e элементы \u003cspan class=f-k\u003eи\u003c/span\u003e середина\n          \u003cspan class=f-k\u003eесли\u003c/span\u003e значение \u003cspan class=f-o\u003eравен\u003c/span\u003e цель\n            \u003cspan class=f-k\u003eто\u003c/span\u003e середина \u003cspan class=f-o\u003eминус\u003c/span\u003e \u003cspan class=f-n\u003e1\u003c/span\u003e\n            \u003cspan class=f-k\u003eиначе\u003c/span\u003e\n              \u003cspan class=f-k\u003eесли\u003c/span\u003e значение \u003cspan class=f-o\u003eменьше\u003c/span\u003e цель\n                \u003cspan class=f-k\u003eто\u003c/span\u003e \u003cspan class=f-q\u003e«Поиск в диапазоне»\u003c/span\u003e \u003cspan class=f-k\u003eот\u003c/span\u003e \u003cspan class=f-k\u003eхвост\u003c/span\u003e \u003cspan class=f-k\u003eи\u003c/span\u003e элементы \u003cspan class=f-k\u003eи\u003c/span\u003e цель \u003cspan class=f-k\u003eи\u003c/span\u003e (середина \u003cspan class=f-o\u003eплюс\u003c/span\u003e \u003cspan class=f-n\u003e1\u003c/span\u003e) \u003cspan class=f-k\u003eи\u003c/span\u003e верх\n                \u003cspan class=f-k\u003eиначе\u003c/span\u003e \u003cspan class=f-q\u003e«Поиск в диапазоне»\u003c/span\u003e \u003cspan class=f-k\u003eот\u003c/span\u003e \u003cspan class=f-k\u003eхвост\u003c/span\u003e \u003cspan class=f-k\u003eи\u003c/span\u003e элементы \u003cspan class=f-k\u003eи\u003c/span\u003e цель \u003cspan class=f-k\u003eи\u003c/span\u003e низ \u003cspan class=f-k\u003eи\u003c/span\u003e (середина \u003cspan class=f-o\u003eминус\u003c/span\u003e \u003cspan class=f-n\u003e1\u003c/span\u003e)\n\n\u003cspan class=f-d\u003eтотальная\u003c/span\u003e \u003cspan class=f-d\u003eфункция\u003c/span\u003e \u003cspan class=f-q\u003e«Двоичный поиск»\u003c/span\u003e\n  \u003cspan class=f-k\u003eпринимает\u003c/span\u003e элементы: \u003cspan class=f-k\u003eсписок\u003c/span\u003e \u003cspan class=f-t\u003eчисла\u003c/span\u003e, цель: \u003cspan class=f-t\u003eчисло\u003c/span\u003e\n  \u003cspan class=f-k\u003eвозвращает\u003c/span\u003e \u003cspan class=f-t\u003eчисло\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Пример 1 из условия»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e элементы \u003cspan class=f-o\u003eравно\u003c/span\u003e [\u003cspan class=f-n\u003e-1\u003c/span\u003e, \u003cspan class=f-n\u003e0\u003c/span\u003e, \u003cspan class=f-n\u003e3\u003c/span\u003e, \u003cspan class=f-n\u003e5\u003c/span\u003e, \u003cspan class=f-n\u003e9\u003c/span\u003e, \u003cspan class=f-n\u003e12\u003c/span\u003e]\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e цель \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-n\u003e9\u003c/span\u003e\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e \u003cspan class=f-n\u003e4\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Пример 2 из условия»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e элементы \u003cspan class=f-o\u003eравно\u003c/span\u003e [\u003cspan class=f-n\u003e-1\u003c/span\u003e, \u003cspan class=f-n\u003e0\u003c/span\u003e, \u003cspan class=f-n\u003e3\u003c/span\u003e, \u003cspan class=f-n\u003e5\u003c/span\u003e, \u003cspan class=f-n\u003e9\u003c/span\u003e, \u003cspan class=f-n\u003e12\u003c/span\u003e]\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e цель \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-n\u003e2\u003c/span\u003e\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e \u003cspan class=f-n\u003e-1\u003c/span\u003e\n  \u003cspan class=f-d\u003eпример\u003c/span\u003e \u003cspan class=f-q\u003e«Один элемент»\u003c/span\u003e\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e элементы \u003cspan class=f-o\u003eравно\u003c/span\u003e [\u003cspan class=f-n\u003e5\u003c/span\u003e]\n    \u003cspan class=f-k\u003eдано\u003c/span\u003e цель \u003cspan class=f-o\u003eравно\u003c/span\u003e \u003cspan class=f-n\u003e5\u003c/span\u003e\n    \u003cspan class=f-k\u003eожидается\u003c/span\u003e \u003cspan class=f-n\u003e0\u003c/span\u003e\n  \u003cspan class=f-q\u003e«Поиск в диапазоне»\u003c/span\u003e \u003cspan class=f-k\u003eот\u003c/span\u003e элементы \u003cspan class=f-k\u003eи\u003c/span\u003e элементы \u003cspan class=f-k\u003eи\u003c/span\u003e цель \u003cspan class=f-k\u003eи\u003c/span\u003e \u003cspan class=f-n\u003e1\u003c/span\u003e \u003cspan class=f-k\u003eи\u003c/span\u003e (\u003cspan class=f-k\u003eдлина\u003c/span\u003e элементы)\n","project/api":"\u003cspan class=\"cm\"\u003e/**\n\u003c/span\u003e\u003cspan class=\"cm\"\u003e * HTTP-сервис расчёта скидки поверх FTS.\n\u003c/span\u003e\u003cspan class=\"cm\"\u003e *\n\u003c/span\u003e\u003cspan class=\"cm\"\u003e * Разделение ответственности, ради которого всё и затевалось:\n\u003c/span\u003e\u003cspan class=\"cm\"\u003e *   — FTS отвечает за бизнес-правило (какая скидка положена);\n\u003c/span\u003e\u003cspan class=\"cm\"\u003e *   — Node.js отвечает за эффекты (сокет, маршруты, коды ответа, лимит тела).\n\u003c/span\u003e\u003cspan class=\"cm\"\u003e *\n\u003c/span\u003e\u003cspan class=\"cm\"\u003e * Примеры из модели выполняются на старте: если предметный тест не проходит,\n\u003c/span\u003e\u003cspan class=\"cm\"\u003e * сервис не поднимается вообще. Правило, которое не проходит собственные\n\u003c/span\u003e\u003cspan class=\"cm\"\u003e * примеры, до продакшена не доезжает.\n\u003c/span\u003e\u003cspan class=\"cm\"\u003e *\n\u003c/span\u003e\u003cspan class=\"cm\"\u003e * Запуск:  node examples/fts/discount-api/server.mjs\n\u003c/span\u003e\u003cspan class=\"cm\"\u003e * Проверка: curl -s localhost:8788/discount -d \u0026#39;{\u0026#34;сумма\u0026#34;:20000,\u0026#34;постоянный клиент\u0026#34;:true}\u0026#39;\n\u003c/span\u003e\u003cspan class=\"cm\"\u003e */\u003c/span\u003e\n\u003cspan class=\"kr\"\u003eimport\u003c/span\u003e { createServer } from \u003cspan class=\"s1\"\u003e\u0026#39;node:http\u0026#39;\u003c/span\u003e;\n\u003cspan class=\"kr\"\u003eimport\u003c/span\u003e { readFile } from \u003cspan class=\"s1\"\u003e\u0026#39;node:fs/promises\u0026#39;\u003c/span\u003e;\n\u003cspan class=\"kr\"\u003eimport\u003c/span\u003e { fileURLToPath, pathToFileURL } from \u003cspan class=\"s1\"\u003e\u0026#39;node:url\u0026#39;\u003c/span\u003e;\n\u003cspan class=\"kr\"\u003eimport\u003c/span\u003e { resolve } from \u003cspan class=\"s1\"\u003e\u0026#39;node:path\u0026#39;\u003c/span\u003e;\n\n\u003cspan class=\"kr\"\u003eimport\u003c/span\u003e { assertValid, compile, executeUtility, testUtilities } from \u003cspan class=\"s1\"\u003e\u0026#39;../../../static/js/vendor/fts/browser.js\u0026#39;\u003c/span\u003e;\n\n\u003cspan class=\"kr\"\u003econst\u003c/span\u003e here \u003cspan class=\"o\"\u003e=\u003c/span\u003e fileURLToPath(\u003cspan class=\"k\"\u003enew\u003c/span\u003e URL(\u003cspan class=\"s1\"\u003e\u0026#39;.\u0026#39;\u003c/span\u003e, \u003cspan class=\"kr\"\u003eimport\u003c/span\u003e.meta.url));\n\u003cspan class=\"kr\"\u003eexport\u003c/span\u003e \u003cspan class=\"kr\"\u003econst\u003c/span\u003e MODEL_FILE \u003cspan class=\"o\"\u003e=\u003c/span\u003e resolve(here, \u003cspan class=\"s1\"\u003e\u0026#39;../../../static/fts/models/order-discount.fts\u0026#39;\u003c/span\u003e);\n\u003cspan class=\"kr\"\u003econst\u003c/span\u003e UTILITY \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;Рассчитать скидку\u0026#39;\u003c/span\u003e;\n\u003cspan class=\"kr\"\u003econst\u003c/span\u003e MAX_BODY \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"mi\"\u003e64\u003c/span\u003e \u003cspan class=\"o\"\u003e*\u003c/span\u003e \u003cspan class=\"mi\"\u003e1024\u003c/span\u003e;\n\n\u003cspan class=\"kr\"\u003eexport\u003c/span\u003e \u003cspan class=\"kr\"\u003easync\u003c/span\u003e \u003cspan class=\"kd\"\u003efunction\u003c/span\u003e createCalculator(modelFile \u003cspan class=\"o\"\u003e=\u003c/span\u003e MODEL_FILE) {\n  \u003cspan class=\"kr\"\u003econst\u003c/span\u003e \u003cspan class=\"nb\"\u003edocument\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e assertValid(compile(\u003cspan class=\"kr\"\u003eawait\u003c/span\u003e readFile(modelFile, \u003cspan class=\"s1\"\u003e\u0026#39;utf8\u0026#39;\u003c/span\u003e)));\n  \u003cspan class=\"kr\"\u003econst\u003c/span\u003e tests \u003cspan class=\"o\"\u003e=\u003c/span\u003e testUtilities(\u003cspan class=\"nb\"\u003edocument\u003c/span\u003e);\n  \u003cspan class=\"k\"\u003eif\u003c/span\u003e (\u003cspan class=\"o\"\u003e!\u003c/span\u003etests.valid) {\n    \u003cspan class=\"kr\"\u003econst\u003c/span\u003e failed \u003cspan class=\"o\"\u003e=\u003c/span\u003e tests.results.filter((result) =\u0026gt; \u003cspan class=\"o\"\u003e!\u003c/span\u003eresult.passed);\n    \u003cspan class=\"k\"\u003ethrow\u003c/span\u003e \u003cspan class=\"k\"\u003enew\u003c/span\u003e \u003cspan class=\"nb\"\u003eError\u003c/span\u003e(\n      \u003cspan class=\"sb\"\u003e`FTS-примеры не прошли (\u003c/span\u003e\u003cspan class=\"si\"\u003e${\u003c/span\u003efailed.length\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"sb\"\u003e из \u003c/span\u003e\u003cspan class=\"si\"\u003e${\u003c/span\u003etests.total\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"sb\"\u003e): `\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e\n        failed.map((result) =\u0026gt; \u003cspan class=\"sb\"\u003e`«\u003c/span\u003e\u003cspan class=\"si\"\u003e${\u003c/span\u003eresult.example\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"sb\"\u003e» ожидалось \u003c/span\u003e\u003cspan class=\"si\"\u003e${\u003c/span\u003eresult.expected\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"sb\"\u003e, получено \u003c/span\u003e\u003cspan class=\"si\"\u003e${\u003c/span\u003eresult.actual\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"sb\"\u003e`\u003c/span\u003e).join(\u003cspan class=\"s1\"\u003e\u0026#39;; \u0026#39;\u003c/span\u003e),\n    );\n  }\n  \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e { \u003cspan class=\"nb\"\u003edocument\u003c/span\u003e, tests, calculate\u003cspan class=\"o\"\u003e:\u003c/span\u003e (purchase) =\u0026gt; executeUtility(\u003cspan class=\"nb\"\u003edocument\u003c/span\u003e, UTILITY, purchase) };\n}\n\n\u003cspan class=\"kr\"\u003eexport\u003c/span\u003e \u003cspan class=\"kr\"\u003easync\u003c/span\u003e \u003cspan class=\"kd\"\u003efunction\u003c/span\u003e createDiscountServer(modelFile \u003cspan class=\"o\"\u003e=\u003c/span\u003e MODEL_FILE) {\n  \u003cspan class=\"kr\"\u003econst\u003c/span\u003e { calculate, tests, \u003cspan class=\"nb\"\u003edocument\u003c/span\u003e } \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kr\"\u003eawait\u003c/span\u003e createCalculator(modelFile);\n  \u003cspan class=\"kr\"\u003econst\u003c/span\u003e fields \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nb\"\u003edocument\u003c/span\u003e.structures.find((structure) =\u0026gt; structure.name \u003cspan class=\"o\"\u003e===\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;Покупка\u0026#39;\u003c/span\u003e).fields;\n\n  \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e createServer(\u003cspan class=\"kr\"\u003easync\u003c/span\u003e (request, response) =\u0026gt; {\n    \u003cspan class=\"k\"\u003etry\u003c/span\u003e {\n      \u003cspan class=\"k\"\u003eif\u003c/span\u003e (request.method \u003cspan class=\"o\"\u003e===\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;GET\u0026#39;\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e request.url \u003cspan class=\"o\"\u003e===\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;/health\u0026#39;\u003c/span\u003e) {\n        \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e send(response, \u003cspan class=\"mi\"\u003e200\u003c/span\u003e, { ok\u003cspan class=\"o\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003etrue\u003c/span\u003e, model\u003cspan class=\"o\"\u003e:\u003c/span\u003e \u003cspan class=\"nb\"\u003edocument\u003c/span\u003e.category, examples\u003cspan class=\"o\"\u003e:\u003c/span\u003e \u003cspan class=\"sb\"\u003e`\u003c/span\u003e\u003cspan class=\"si\"\u003e${\u003c/span\u003etests.passed\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"sb\"\u003e/\u003c/span\u003e\u003cspan class=\"si\"\u003e${\u003c/span\u003etests.total\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"sb\"\u003e`\u003c/span\u003e });\n      }\n      \u003cspan class=\"k\"\u003eif\u003c/span\u003e (request.method \u003cspan class=\"o\"\u003e===\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;GET\u0026#39;\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e request.url \u003cspan class=\"o\"\u003e===\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;/contract\u0026#39;\u003c/span\u003e) {\n        \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e send(response, \u003cspan class=\"mi\"\u003e200\u003c/span\u003e, { utility\u003cspan class=\"o\"\u003e:\u003c/span\u003e UTILITY, input\u003cspan class=\"o\"\u003e:\u003c/span\u003e fields, output\u003cspan class=\"o\"\u003e:\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;Деньги\u0026#39;\u003c/span\u003e });\n      }\n      \u003cspan class=\"k\"\u003eif\u003c/span\u003e (request.method \u003cspan class=\"o\"\u003e!==\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;POST\u0026#39;\u003c/span\u003e \u003cspan class=\"o\"\u003e||\u003c/span\u003e request.url \u003cspan class=\"o\"\u003e!==\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;/discount\u0026#39;\u003c/span\u003e) {\n        \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e send(response, \u003cspan class=\"mi\"\u003e404\u003c/span\u003e, { error\u003cspan class=\"o\"\u003e:\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;используйте POST /discount\u0026#39;\u003c/span\u003e });\n      }\n      \u003cspan class=\"kr\"\u003econst\u003c/span\u003e purchase \u003cspan class=\"o\"\u003e=\u003c/span\u003e JSON.parse(\u003cspan class=\"kr\"\u003eawait\u003c/span\u003e readBody(request));\n      \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e send(response, \u003cspan class=\"mi\"\u003e200\u003c/span\u003e, { discount\u003cspan class=\"o\"\u003e:\u003c/span\u003e calculate(purchase) });\n    } \u003cspan class=\"k\"\u003ecatch\u003c/span\u003e (error) {\n      \u003cspan class=\"cm\"\u003e/* Нарушенное свойство и неизвестное поле — это ошибка запроса, а не сбой\n\u003c/span\u003e\u003cspan class=\"cm\"\u003e         сервиса: клиенту возвращается причина, диагностика FTS не теряется. */\u003c/span\u003e\n      \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e send(response, \u003cspan class=\"mi\"\u003e400\u003c/span\u003e, {\n        error\u003cspan class=\"o\"\u003e:\u003c/span\u003e error \u003cspan class=\"k\"\u003einstanceof\u003c/span\u003e \u003cspan class=\"nb\"\u003eError\u003c/span\u003e \u003cspan class=\"o\"\u003e?\u003c/span\u003e error.message \u003cspan class=\"o\"\u003e:\u003c/span\u003e \u003cspan class=\"nb\"\u003eString\u003c/span\u003e(error),\n        diagnostics\u003cspan class=\"o\"\u003e:\u003c/span\u003e error\u003cspan class=\"o\"\u003e?\u003c/span\u003e.diagnostics \u003cspan class=\"o\"\u003e??\u003c/span\u003e [],\n      });\n    }\n  });\n}\n\n\u003cspan class=\"kr\"\u003easync\u003c/span\u003e \u003cspan class=\"kd\"\u003efunction\u003c/span\u003e readBody(request) {\n  \u003cspan class=\"kr\"\u003econst\u003c/span\u003e chunks \u003cspan class=\"o\"\u003e=\u003c/span\u003e [];\n  \u003cspan class=\"kd\"\u003elet\u003c/span\u003e size \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e;\n  \u003cspan class=\"k\"\u003efor\u003c/span\u003e \u003cspan class=\"kr\"\u003eawait\u003c/span\u003e (\u003cspan class=\"kr\"\u003econst\u003c/span\u003e chunk \u003cspan class=\"k\"\u003eof\u003c/span\u003e request) {\n    size \u003cspan class=\"o\"\u003e+=\u003c/span\u003e chunk.length;\n    \u003cspan class=\"k\"\u003eif\u003c/span\u003e (size \u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e MAX_BODY) \u003cspan class=\"k\"\u003ethrow\u003c/span\u003e \u003cspan class=\"k\"\u003enew\u003c/span\u003e \u003cspan class=\"nb\"\u003eError\u003c/span\u003e(\u003cspan class=\"s1\"\u003e\u0026#39;тело запроса больше 64 КБ\u0026#39;\u003c/span\u003e);\n    chunks.push(chunk);\n  }\n  \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e Buffer.concat(chunks).toString(\u003cspan class=\"s1\"\u003e\u0026#39;utf8\u0026#39;\u003c/span\u003e);\n}\n\n\u003cspan class=\"kd\"\u003efunction\u003c/span\u003e send(response, status, body) {\n  response.writeHead(status, { \u003cspan class=\"s1\"\u003e\u0026#39;content-type\u0026#39;\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;application/json; charset=utf-8\u0026#39;\u003c/span\u003e });\n  response.end(\u003cspan class=\"sb\"\u003e`\u003c/span\u003e\u003cspan class=\"si\"\u003e${\u003c/span\u003eJSON.stringify(body, \u003cspan class=\"kc\"\u003enull\u003c/span\u003e, \u003cspan class=\"mi\"\u003e2\u003c/span\u003e)\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"sb\"\u003e\\n`\u003c/span\u003e);\n}\n\n\u003cspan class=\"k\"\u003eif\u003c/span\u003e (process.argv[\u003cspan class=\"mi\"\u003e1\u003c/span\u003e] \u003cspan class=\"o\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e \u003cspan class=\"kr\"\u003eimport\u003c/span\u003e.meta.url \u003cspan class=\"o\"\u003e===\u003c/span\u003e pathToFileURL(process.argv[\u003cspan class=\"mi\"\u003e1\u003c/span\u003e]).href) {\n  \u003cspan class=\"kr\"\u003econst\u003c/span\u003e port \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nb\"\u003eNumber\u003c/span\u003e.\u003cspan class=\"nb\"\u003eparseInt\u003c/span\u003e(process.env.FTS_HTTP_PORT \u003cspan class=\"o\"\u003e??\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;8788\u0026#39;\u003c/span\u003e, \u003cspan class=\"mi\"\u003e10\u003c/span\u003e);\n  \u003cspan class=\"kr\"\u003econst\u003c/span\u003e server \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kr\"\u003eawait\u003c/span\u003e createDiscountServer();\n  server.listen(port, \u003cspan class=\"s1\"\u003e\u0026#39;127.0.0.1\u0026#39;\u003c/span\u003e, () =\u0026gt; {\n    process.stdout.write(\u003cspan class=\"sb\"\u003e`Discount API: http://127.0.0.1:\u003c/span\u003e\u003cspan class=\"si\"\u003e${\u003c/span\u003eport\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"sb\"\u003e (POST /discount, GET /contract, GET /health)\\n`\u003c/span\u003e);\n  });\n}\n","project/ci":"\u003cspan class=\"c\"\u003e# Предметные правила как обычный шаг CI.\u003c/span\u003e\n\u003cspan class=\"c\"\u003e#\u003c/span\u003e\n\u003cspan class=\"c\"\u003e# Смысл шага не в «ещё одном линтере»: примеры внутри .fts — это тесты,\u003c/span\u003e\n\u003cspan class=\"c\"\u003e# написанные на языке предметной области, а сгенерированный TypeScript\u003c/span\u003e\n\u003cspan class=\"c\"\u003e# сверяется с моделью. Правило, изменённое в коде мимо модели, ломает сборку.\u003c/span\u003e\n\u003cspan class=\"c\"\u003e#\u003c/span\u003e\n\u003cspan class=\"c\"\u003e# Файл кладётся в .github/workflows/fts-check.yml\u003c/span\u003e\n\u003cspan class=\"nt\"\u003ename\u003c/span\u003e: fts\n\n\u003cspan class=\"nt\"\u003eon\u003c/span\u003e:\n  \u003cspan class=\"nt\"\u003epush\u003c/span\u003e:\n    \u003cspan class=\"nt\"\u003ebranches\u003c/span\u003e: [master]\n  \u003cspan class=\"nt\"\u003epull_request\u003c/span\u003e:\n\n\u003cspan class=\"nt\"\u003ejobs\u003c/span\u003e:\n  \u003cspan class=\"nt\"\u003erules\u003c/span\u003e:\n    \u003cspan class=\"nt\"\u003eruns-on\u003c/span\u003e: ubuntu-latest\n    \u003cspan class=\"nt\"\u003esteps\u003c/span\u003e:\n      - \u003cspan class=\"nt\"\u003euses\u003c/span\u003e: actions/checkout@v4\n\n      - \u003cspan class=\"nt\"\u003euses\u003c/span\u003e: actions/setup-node@v4\n        \u003cspan class=\"nt\"\u003ewith\u003c/span\u003e:\n          \u003cspan class=\"nt\"\u003enode-version\u003c/span\u003e: \u003cspan class=\"m\"\u003e24\u003c/span\u003e\n          \u003cspan class=\"nt\"\u003ecache\u003c/span\u003e: npm\n\n      - \u003cspan class=\"nt\"\u003erun\u003c/span\u003e: npm ci\n\n      \u003cspan class=\"c\"\u003e# Модель разобралась, типы сошлись, ссылки на объекты и поля существуют.\u003c/span\u003e\n      - \u003cspan class=\"nt\"\u003ename\u003c/span\u003e: Проверить модели\n        \u003cspan class=\"nt\"\u003erun\u003c/span\u003e: npx fts check static/fts/models/order-discount.fts\n\n      \u003cspan class=\"c\"\u003e# Примеры из .fts выполняются как предметные unit-тесты.\u003c/span\u003e\n      - \u003cspan class=\"nt\"\u003ename\u003c/span\u003e: Выполнить предметные примеры\n        \u003cspan class=\"nt\"\u003erun\u003c/span\u003e: npx fts test static/fts/models/order-discount.fts --pretty\n\n      \u003cspan class=\"c\"\u003e# Сгенерированный TypeScript обязан совпадать с закоммиченным.\u003c/span\u003e\n      - \u003cspan class=\"nt\"\u003ename\u003c/span\u003e: Сверить сгенерированный код\n        \u003cspan class=\"nt\"\u003erun\u003c/span\u003e: node examples/fts/typescript-codegen/generate.mjs --check\n\n      \u003cspan class=\"c\"\u003e# Интеграции: HTTP-сервис, guard допуска команды, схема формы.\u003c/span\u003e\n      - \u003cspan class=\"nt\"\u003ename\u003c/span\u003e: Тесты интеграций\n        \u003cspan class=\"nt\"\u003erun\u003c/span\u003e: node --test \u0026#34;examples/fts/**/*.test.mjs\u0026#34;\n","project/codegen":"\u003cspan class=\"c1\"\u003e// Generated by FTS. Do not edit by hand.\n\u003c/span\u003e\u003cspan class=\"c1\"\u003e\u003c/span\u003e\n\u003cspan class=\"kr\"\u003eexport\u003c/span\u003e \u003cspan class=\"kr\"\u003einterface\u003c/span\u003e FtsInput0 {\n  \u003cspan class=\"s2\"\u003e\u0026#34;сумма\u0026#34;\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e \u003cspan class=\"kt\"\u003enumber\u003c/span\u003e\n  \u003cspan class=\"s2\"\u003e\u0026#34;постоянный клиент\u0026#34;\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e \u003cspan class=\"kr\"\u003eboolean\u003c/span\u003e\n}\n\n\u003cspan class=\"kr\"\u003eexport\u003c/span\u003e \u003cspan class=\"kr\"\u003econst\u003c/span\u003e ftsUtilities \u003cspan class=\"o\"\u003e=\u003c/span\u003e {\n  \u003cspan class=\"s2\"\u003e\u0026#34;Рассчитать скидку\u0026#34;\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e (input: \u003cspan class=\"kt\"\u003eFtsInput0\u003c/span\u003e)\u003cspan class=\"o\"\u003e:\u003c/span\u003e \u003cspan class=\"kt\"\u003enumber\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u0026gt;\u003c/span\u003e {\n    \u003cspan class=\"kd\"\u003elet\u003c/span\u003e result: \u003cspan class=\"kt\"\u003enumber\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\n    \u003cspan class=\"k\"\u003eif\u003c/span\u003e (input[\u003cspan class=\"s2\"\u003e\u0026#34;сумма\u0026#34;\u003c/span\u003e] \u003cspan class=\"o\"\u003e\u0026gt;=\u003c/span\u003e \u003cspan class=\"mi\"\u003e10000\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e input[\u003cspan class=\"s2\"\u003e\u0026#34;сумма\u0026#34;\u003c/span\u003e] \u003cspan class=\"o\"\u003e\u0026lt;=\u003c/span\u003e \u003cspan class=\"mi\"\u003e100000\u003c/span\u003e) {\n      result \u003cspan class=\"o\"\u003e+=\u003c/span\u003e (\u003cspan class=\"mi\"\u003e10\u003c/span\u003e \u003cspan class=\"o\"\u003e/\u003c/span\u003e \u003cspan class=\"mi\"\u003e100\u003c/span\u003e) \u003cspan class=\"o\"\u003e*\u003c/span\u003e input[\u003cspan class=\"s2\"\u003e\u0026#34;сумма\u0026#34;\u003c/span\u003e]\n    }\n    \u003cspan class=\"k\"\u003eif\u003c/span\u003e (input[\u003cspan class=\"s2\"\u003e\u0026#34;постоянный клиент\u0026#34;\u003c/span\u003e] \u003cspan class=\"o\"\u003e===\u003c/span\u003e \u003cspan class=\"kc\"\u003etrue\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e input[\u003cspan class=\"s2\"\u003e\u0026#34;сумма\u0026#34;\u003c/span\u003e] \u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e input[\u003cspan class=\"s2\"\u003e\u0026#34;сумма\u0026#34;\u003c/span\u003e] \u003cspan class=\"o\"\u003e\u0026lt;=\u003c/span\u003e \u003cspan class=\"mi\"\u003e100000\u003c/span\u003e) {\n      result \u003cspan class=\"o\"\u003e+=\u003c/span\u003e (\u003cspan class=\"mi\"\u003e5\u003c/span\u003e \u003cspan class=\"o\"\u003e/\u003c/span\u003e \u003cspan class=\"mi\"\u003e100\u003c/span\u003e) \u003cspan class=\"o\"\u003e*\u003c/span\u003e input[\u003cspan class=\"s2\"\u003e\u0026#34;сумма\u0026#34;\u003c/span\u003e]\n    }\n    \u003cspan class=\"k\"\u003eif\u003c/span\u003e (input[\u003cspan class=\"s2\"\u003e\u0026#34;сумма\u0026#34;\u003c/span\u003e] \u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"mi\"\u003e100000\u003c/span\u003e) {\n      result \u003cspan class=\"o\"\u003e+=\u003c/span\u003e \u003cspan class=\"mi\"\u003e15000\u003c/span\u003e\n    }\n    \u003cspan class=\"k\"\u003eif\u003c/span\u003e (\u003cspan class=\"o\"\u003e!\u003c/span\u003e(result \u003cspan class=\"o\"\u003e\u0026lt;=\u003c/span\u003e \u003cspan class=\"mi\"\u003e15000\u003c/span\u003e)) \u003cspan class=\"k\"\u003ethrow\u003c/span\u003e \u003cspan class=\"k\"\u003enew\u003c/span\u003e \u003cspan class=\"nb\"\u003eError\u003c/span\u003e(\u003cspan class=\"s2\"\u003e\u0026#34;Нарушено свойство «Скидка ограничена»\u0026#34;\u003c/span\u003e)\n    \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e result\n  },\n} \u003cspan class=\"kr\"\u003eas\u003c/span\u003e \u003cspan class=\"kr\"\u003econst\u003c/span\u003e\n","project/form":"\u003cspan class=\"cm\"\u003e/**\n\u003c/span\u003e\u003cspan class=\"cm\"\u003e * Форма скидки на React.\n\u003c/span\u003e\u003cspan class=\"cm\"\u003e *\n\u003c/span\u003e\u003cspan class=\"cm\"\u003e * Компонент не знает, что покупка состоит из суммы и признака постоянного\n\u003c/span\u003e\u003cspan class=\"cm\"\u003e * клиента: поля приходят из той же FTS-модели, которую проверяет бэкенд.\n\u003c/span\u003e\u003cspan class=\"cm\"\u003e * Добавили в модель поле — форма получила контрол без правки JSX.\n\u003c/span\u003e\u003cspan class=\"cm\"\u003e *\n\u003c/span\u003e\u003cspan class=\"cm\"\u003e * Предпросчёт скидки выполняется прямо в браузере тем же компилятором, поэтому\n\u003c/span\u003e\u003cspan class=\"cm\"\u003e * пользователь видит результат без сетевого запроса. Сервер всё равно считает\n\u003c/span\u003e\u003cspan class=\"cm\"\u003e * заново: браузеру доверять нельзя, но и ждать его не нужно.\n\u003c/span\u003e\u003cspan class=\"cm\"\u003e */\u003c/span\u003e\n\u003cspan class=\"kr\"\u003eimport\u003c/span\u003e { useMemo, useState } from \u003cspan class=\"s1\"\u003e\u0026#39;react\u0026#39;\u003c/span\u003e;\n\u003cspan class=\"kr\"\u003eimport\u003c/span\u003e { compile, executeUtility } from \u003cspan class=\"s1\"\u003e\u0026#39;@digitable-lol/fts/browser\u0026#39;\u003c/span\u003e;\n\n\u003cspan class=\"kr\"\u003eimport\u003c/span\u003e { ftsFormSchema } from \u003cspan class=\"s1\"\u003e\u0026#39;../form-schema/schema.mjs\u0026#39;\u003c/span\u003e;\n\n\u003cspan class=\"kr\"\u003eexport\u003c/span\u003e \u003cspan class=\"kd\"\u003efunction\u003c/span\u003e DiscountForm({ source, objectName \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;Покупка\u0026#39;\u003c/span\u003e, utility \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;Рассчитать скидку\u0026#39;\u003c/span\u003e, onSubmit }) {\n  \u003cspan class=\"kr\"\u003econst\u003c/span\u003e \u003cspan class=\"nb\"\u003edocument\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e useMemo(() =\u0026gt; compile(source), [source]);\n  \u003cspan class=\"kr\"\u003econst\u003c/span\u003e schema \u003cspan class=\"o\"\u003e=\u003c/span\u003e useMemo(() =\u0026gt; ftsFormSchema(\u003cspan class=\"nb\"\u003edocument\u003c/span\u003e, objectName), [\u003cspan class=\"nb\"\u003edocument\u003c/span\u003e, objectName]);\n  \u003cspan class=\"kr\"\u003econst\u003c/span\u003e [value, setValue] \u003cspan class=\"o\"\u003e=\u003c/span\u003e useState(() =\u0026gt;\n    \u003cspan class=\"nb\"\u003eObject\u003c/span\u003e.fromEntries(schema.fields.map((field) =\u0026gt; [field.name, field.control \u003cspan class=\"o\"\u003e===\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;checkbox\u0026#39;\u003c/span\u003e \u003cspan class=\"o\"\u003e?\u003c/span\u003e \u003cspan class=\"kc\"\u003efalse\u003c/span\u003e \u003cspan class=\"o\"\u003e:\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;\u0026#39;\u003c/span\u003e])),\n  );\n\n  \u003cspan class=\"kr\"\u003econst\u003c/span\u003e preview \u003cspan class=\"o\"\u003e=\u003c/span\u003e useMemo(() =\u0026gt; {\n    \u003cspan class=\"k\"\u003etry\u003c/span\u003e {\n      \u003cspan class=\"kr\"\u003econst\u003c/span\u003e input \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nb\"\u003eObject\u003c/span\u003e.fromEntries(\n        schema.fields.map((field) =\u0026gt; [\n          field.name,\n          field.control \u003cspan class=\"o\"\u003e===\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;checkbox\u0026#39;\u003c/span\u003e \u003cspan class=\"o\"\u003e?\u003c/span\u003e \u003cspan class=\"nb\"\u003eBoolean\u003c/span\u003e(value[field.name]) \u003cspan class=\"o\"\u003e:\u003c/span\u003e \u003cspan class=\"nb\"\u003eNumber\u003c/span\u003e(value[field.name] \u003cspan class=\"o\"\u003e||\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e),\n        ]),\n      );\n      \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e { ok\u003cspan class=\"o\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003etrue\u003c/span\u003e, amount\u003cspan class=\"o\"\u003e:\u003c/span\u003e executeUtility(\u003cspan class=\"nb\"\u003edocument\u003c/span\u003e, utility, input) };\n    } \u003cspan class=\"k\"\u003ecatch\u003c/span\u003e (error) {\n      \u003cspan class=\"cm\"\u003e/* Нарушенное свойство модели — это нормальный ответ формы, а не падение UI. */\u003c/span\u003e\n      \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e { ok\u003cspan class=\"o\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003efalse\u003c/span\u003e, reason\u003cspan class=\"o\"\u003e:\u003c/span\u003e error.message };\n    }\n  }, [\u003cspan class=\"nb\"\u003edocument\u003c/span\u003e, schema, utility, value]);\n\n  \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e (\n    \u0026lt;\u003cspan class=\"nt\"\u003eform\u003c/span\u003e\n      \u003cspan class=\"na\"\u003eonSubmit\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e{(event) =\u0026gt; {\n        event.preventDefault();\n        onSubmit\u003cspan class=\"o\"\u003e?\u003c/span\u003e.(value);\n      }}\n    \u0026gt;\n      \u0026lt;\u003cspan class=\"nt\"\u003eh2\u003c/span\u003e\u0026gt;{schema.title}\u0026lt;/\u003cspan class=\"nt\"\u003eh2\u003c/span\u003e\u0026gt;\n\n      {schema.fields.map((field) =\u0026gt; (\n        \u0026lt;\u003cspan class=\"nt\"\u003elabel\u003c/span\u003e \u003cspan class=\"na\"\u003ekey\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e{field.name}\u0026gt;\n          \u0026lt;\u003cspan class=\"nt\"\u003espan\u003c/span\u003e\u0026gt;{field.label}\u0026lt;/\u003cspan class=\"nt\"\u003espan\u003c/span\u003e\u0026gt;\n          \u0026lt;\u003cspan class=\"nt\"\u003einput\u003c/span\u003e\n            \u003cspan class=\"na\"\u003etype\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e{field.control \u003cspan class=\"o\"\u003e===\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;checkbox\u0026#39;\u003c/span\u003e \u003cspan class=\"o\"\u003e?\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;checkbox\u0026#39;\u003c/span\u003e \u003cspan class=\"o\"\u003e:\u003c/span\u003e field.control \u003cspan class=\"o\"\u003e===\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;text\u0026#39;\u003c/span\u003e \u003cspan class=\"o\"\u003e?\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;text\u0026#39;\u003c/span\u003e \u003cspan class=\"o\"\u003e:\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;number\u0026#39;\u003c/span\u003e}\n            \u003cspan class=\"na\"\u003erequired\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e{field.required}\n            \u003cspan class=\"na\"\u003echecked\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e{field.control \u003cspan class=\"o\"\u003e===\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;checkbox\u0026#39;\u003c/span\u003e \u003cspan class=\"o\"\u003e?\u003c/span\u003e \u003cspan class=\"nb\"\u003eBoolean\u003c/span\u003e(value[field.name]) \u003cspan class=\"o\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003eundefined\u003c/span\u003e}\n            \u003cspan class=\"na\"\u003evalue\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e{field.control \u003cspan class=\"o\"\u003e===\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;checkbox\u0026#39;\u003c/span\u003e \u003cspan class=\"o\"\u003e?\u003c/span\u003e \u003cspan class=\"kc\"\u003eundefined\u003c/span\u003e \u003cspan class=\"o\"\u003e:\u003c/span\u003e value[field.name]}\n            \u003cspan class=\"na\"\u003eonChange\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e{(event) =\u0026gt;\n              setValue((current) =\u0026gt; ({\n                ...current,\n                [field.name]\u003cspan class=\"o\"\u003e:\u003c/span\u003e field.control \u003cspan class=\"o\"\u003e===\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;checkbox\u0026#39;\u003c/span\u003e \u003cspan class=\"o\"\u003e?\u003c/span\u003e event.target.checked \u003cspan class=\"o\"\u003e:\u003c/span\u003e event.target.value,\n              }))\n            }\n          /\u0026gt;\n        \u0026lt;/\u003cspan class=\"nt\"\u003elabel\u003c/span\u003e\u0026gt;\n      ))}\n\n      \u0026lt;\u003cspan class=\"nt\"\u003eoutput\u003c/span\u003e\u0026gt;\n        {preview.ok \u003cspan class=\"o\"\u003e?\u003c/span\u003e \u003cspan class=\"sb\"\u003e`Скидка: \u003c/span\u003e\u003cspan class=\"si\"\u003e${\u003c/span\u003epreview.amount\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"sb\"\u003e ₽`\u003c/span\u003e \u003cspan class=\"o\"\u003e:\u003c/span\u003e \u003cspan class=\"sb\"\u003e`Правило не выполняется: \u003c/span\u003e\u003cspan class=\"si\"\u003e${\u003c/span\u003epreview.reason\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"sb\"\u003e`\u003c/span\u003e}\n      \u0026lt;/\u003cspan class=\"nt\"\u003eoutput\u003c/span\u003e\u0026gt;\n\n      \u0026lt;\u003cspan class=\"nt\"\u003ebutton\u003c/span\u003e \u003cspan class=\"na\"\u003etype\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;submit\u0026#34;\u003c/span\u003e \u003cspan class=\"na\"\u003edisabled\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e{\u003cspan class=\"o\"\u003e!\u003c/span\u003epreview.ok}\u0026gt;\n        Оформить\n      \u0026lt;/\u003cspan class=\"nt\"\u003ebutton\u003c/span\u003e\u0026gt;\n    \u0026lt;/\u003cspan class=\"nt\"\u003eform\u003c/span\u003e\u0026gt;\n  );\n}\n","project/guard":"\u003cspan class=\"cm\"\u003e/**\n\u003c/span\u003e\u003cspan class=\"cm\"\u003e * Допуск команды «отгрузить заказ» через доказательство на реальных данных.\n\u003c/span\u003e\u003cspan class=\"cm\"\u003e *\n\u003c/span\u003e\u003cspan class=\"cm\"\u003e * Это шаблон для агентских сценариев: модель (или человек) формулирует\n\u003c/span\u003e\u003cspan class=\"cm\"\u003e * утверждение на FTS, а решение принимает не текст ответа, а движок. Если факт\n\u003c/span\u003e\u003cspan class=\"cm\"\u003e * в данных не подтверждается, prove() отклоняет теорему и команда не выполняется.\n\u003c/span\u003e\u003cspan class=\"cm\"\u003e * Эффект (реальная отгрузка) живёт снаружи и вызывается только после allow.\n\u003c/span\u003e\u003cspan class=\"cm\"\u003e *\n\u003c/span\u003e\u003cspan class=\"cm\"\u003e * Запуск: node examples/fts/shipment-guard/guard.mjs ЗК-7781\n\u003c/span\u003e\u003cspan class=\"cm\"\u003e *         node examples/fts/shipment-guard/guard.mjs ЗК-7781 --blocked\n\u003c/span\u003e\u003cspan class=\"cm\"\u003e */\u003c/span\u003e\n\u003cspan class=\"kr\"\u003eimport\u003c/span\u003e { readFile } from \u003cspan class=\"s1\"\u003e\u0026#39;node:fs/promises\u0026#39;\u003c/span\u003e;\n\u003cspan class=\"kr\"\u003eimport\u003c/span\u003e { fileURLToPath, pathToFileURL } from \u003cspan class=\"s1\"\u003e\u0026#39;node:url\u0026#39;\u003c/span\u003e;\n\u003cspan class=\"kr\"\u003eimport\u003c/span\u003e { resolve } from \u003cspan class=\"s1\"\u003e\u0026#39;node:path\u0026#39;\u003c/span\u003e;\n\n\u003cspan class=\"kr\"\u003eimport\u003c/span\u003e { compile, prove } from \u003cspan class=\"s1\"\u003e\u0026#39;../../../static/js/vendor/fts/browser.js\u0026#39;\u003c/span\u003e;\n\n\u003cspan class=\"kr\"\u003econst\u003c/span\u003e here \u003cspan class=\"o\"\u003e=\u003c/span\u003e fileURLToPath(\u003cspan class=\"k\"\u003enew\u003c/span\u003e URL(\u003cspan class=\"s1\"\u003e\u0026#39;.\u0026#39;\u003c/span\u003e, \u003cspan class=\"kr\"\u003eimport\u003c/span\u003e.meta.url));\n\u003cspan class=\"kr\"\u003econst\u003c/span\u003e models \u003cspan class=\"o\"\u003e=\u003c/span\u003e resolve(here, \u003cspan class=\"s1\"\u003e\u0026#39;../../../static/fts/models\u0026#39;\u003c/span\u003e);\n\n\u003cspan class=\"cm\"\u003e/* Кавычки внутри имени сломали бы разбор, поэтому номер заказа проверяется\n\u003c/span\u003e\u003cspan class=\"cm\"\u003e   до подстановки: в теорему попадают только допустимые идентификаторы. */\u003c/span\u003e\n\u003cspan class=\"kr\"\u003econst\u003c/span\u003e ORDER_NUMBER \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"sr\"\u003e/^[\\p{L}\\p{N}-]{1,32}$/u\u003c/span\u003e;\n\n\u003cspan class=\"kr\"\u003eexport\u003c/span\u003e \u003cspan class=\"kd\"\u003efunction\u003c/span\u003e shipmentTheorem(orderNumber) {\n  \u003cspan class=\"k\"\u003eif\u003c/span\u003e (\u003cspan class=\"o\"\u003e!\u003c/span\u003eORDER_NUMBER.test(orderNumber)) \u003cspan class=\"k\"\u003ethrow\u003c/span\u003e \u003cspan class=\"k\"\u003enew\u003c/span\u003e \u003cspan class=\"nb\"\u003eError\u003c/span\u003e(\u003cspan class=\"sb\"\u003e`недопустимый номер заказа: \u003c/span\u003e\u003cspan class=\"si\"\u003e${\u003c/span\u003eorderNumber\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"sb\"\u003e`\u003c/span\u003e);\n  \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"sb\"\u003e`категория «Исполнение заказа»\n\u003c/span\u003e\u003cspan class=\"sb\"\u003e\n\u003c/span\u003e\u003cspan class=\"sb\"\u003e  объект Заказ\n\u003c/span\u003e\u003cspan class=\"sb\"\u003e    номер является строкой\n\u003c/span\u003e\u003cspan class=\"sb\"\u003e    клиент является строкой\n\u003c/span\u003e\u003cspan class=\"sb\"\u003e    оплачен является признаком\n\u003c/span\u003e\u003cspan class=\"sb\"\u003e    «склад подтвердил» является признаком\n\u003c/span\u003e\u003cspan class=\"sb\"\u003e    «готов к отгрузке» является состоянием «Готов к отгрузке»\n\u003c/span\u003e\u003cspan class=\"sb\"\u003e\n\u003c/span\u003e\u003cspan class=\"sb\"\u003e  морфизм «Готовый заказ можно отгрузить»\n\u003c/span\u003e\u003cspan class=\"sb\"\u003e    если «Готов к отгрузке»\n\u003c/span\u003e\u003cspan class=\"sb\"\u003e    то «Отгрузить заказ разрешено»\n\u003c/span\u003e\u003cspan class=\"sb\"\u003e\n\u003c/span\u003e\u003cspan class=\"sb\"\u003e  теорема «Заказ \u003c/span\u003e\u003cspan class=\"si\"\u003e${\u003c/span\u003eorderNumber\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"sb\"\u003e можно отгрузить»\n\u003c/span\u003e\u003cspan class=\"sb\"\u003e    дано Заказ имеет «готов к отгрузке» равное да\n\u003c/span\u003e\u003cspan class=\"sb\"\u003e    в данных заказы найти где номер равен «\u003c/span\u003e\u003cspan class=\"si\"\u003e${\u003c/span\u003eorderNumber\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"sb\"\u003e»\n\u003c/span\u003e\u003cspan class=\"sb\"\u003e    по морфизму «Готовый заказ можно отгрузить»\n\u003c/span\u003e\u003cspan class=\"sb\"\u003e    следовательно «Отгрузить заказ разрешено»\n\u003c/span\u003e\u003cspan class=\"sb\"\u003e`\u003c/span\u003e;\n}\n\n\u003cspan class=\"kr\"\u003eexport\u003c/span\u003e \u003cspan class=\"kd\"\u003efunction\u003c/span\u003e decideShipment(orderNumber, context) {\n  \u003cspan class=\"kr\"\u003econst\u003c/span\u003e source \u003cspan class=\"o\"\u003e=\u003c/span\u003e shipmentTheorem(orderNumber);\n  \u003cspan class=\"k\"\u003etry\u003c/span\u003e {\n    \u003cspan class=\"kr\"\u003econst\u003c/span\u003e proof \u003cspan class=\"o\"\u003e=\u003c/span\u003e prove(compile(source), context);\n    \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e { allowed\u003cspan class=\"o\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003etrue\u003c/span\u003e, source, proof };\n  } \u003cspan class=\"k\"\u003ecatch\u003c/span\u003e (error) {\n    \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e {\n      allowed\u003cspan class=\"o\"\u003e:\u003c/span\u003e \u003cspan class=\"kc\"\u003efalse\u003c/span\u003e,\n      source,\n      reason\u003cspan class=\"o\"\u003e:\u003c/span\u003e error \u003cspan class=\"k\"\u003einstanceof\u003c/span\u003e \u003cspan class=\"nb\"\u003eError\u003c/span\u003e \u003cspan class=\"o\"\u003e?\u003c/span\u003e error.message \u003cspan class=\"o\"\u003e:\u003c/span\u003e \u003cspan class=\"nb\"\u003eString\u003c/span\u003e(error),\n      diagnostics\u003cspan class=\"o\"\u003e:\u003c/span\u003e error\u003cspan class=\"o\"\u003e?\u003c/span\u003e.diagnostics \u003cspan class=\"o\"\u003e??\u003c/span\u003e [],\n    };\n  }\n}\n\n\u003cspan class=\"kr\"\u003eexport\u003c/span\u003e \u003cspan class=\"kr\"\u003easync\u003c/span\u003e \u003cspan class=\"kd\"\u003efunction\u003c/span\u003e loadContext(blocked \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003efalse\u003c/span\u003e) {\n  \u003cspan class=\"kr\"\u003econst\u003c/span\u003e file \u003cspan class=\"o\"\u003e=\u003c/span\u003e resolve(models, blocked \u003cspan class=\"o\"\u003e?\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;order-shipment.blocked.context.json\u0026#39;\u003c/span\u003e \u003cspan class=\"o\"\u003e:\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;order-shipment.context.json\u0026#39;\u003c/span\u003e);\n  \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e JSON.parse(\u003cspan class=\"kr\"\u003eawait\u003c/span\u003e readFile(file, \u003cspan class=\"s1\"\u003e\u0026#39;utf8\u0026#39;\u003c/span\u003e));\n}\n\n\u003cspan class=\"k\"\u003eif\u003c/span\u003e (process.argv[\u003cspan class=\"mi\"\u003e1\u003c/span\u003e] \u003cspan class=\"o\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e \u003cspan class=\"kr\"\u003eimport\u003c/span\u003e.meta.url \u003cspan class=\"o\"\u003e===\u003c/span\u003e pathToFileURL(process.argv[\u003cspan class=\"mi\"\u003e1\u003c/span\u003e]).href) {\n  \u003cspan class=\"kr\"\u003econst\u003c/span\u003e orderNumber \u003cspan class=\"o\"\u003e=\u003c/span\u003e process.argv[\u003cspan class=\"mi\"\u003e2\u003c/span\u003e] \u003cspan class=\"o\"\u003e??\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;ЗК-7781\u0026#39;\u003c/span\u003e;\n  \u003cspan class=\"kr\"\u003econst\u003c/span\u003e decision \u003cspan class=\"o\"\u003e=\u003c/span\u003e decideShipment(orderNumber, \u003cspan class=\"kr\"\u003eawait\u003c/span\u003e loadContext(process.argv.includes(\u003cspan class=\"s1\"\u003e\u0026#39;--blocked\u0026#39;\u003c/span\u003e)));\n  process.stdout.write(\u003cspan class=\"sb\"\u003e`\u003c/span\u003e\u003cspan class=\"si\"\u003e${\u003c/span\u003eJSON.stringify(decision, \u003cspan class=\"kc\"\u003enull\u003c/span\u003e, \u003cspan class=\"mi\"\u003e2\u003c/span\u003e)\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"sb\"\u003e\\n`\u003c/span\u003e);\n  \u003cspan class=\"cm\"\u003e/* Ненулевой код возврата делает guard пригодным для shell и CI. */\u003c/span\u003e\n  process.exit(decision.allowed \u003cspan class=\"o\"\u003e?\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e \u003cspan class=\"o\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e1\u003c/span\u003e);\n}\n"}