<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3877567</guid>
        <pubDate>Sat, 01 Oct 2022 10:48:17 +0000</pubDate>
        <title>Сохранение и восстановление состояния обработки</title>
        <link>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3877567</link>
        <description><![CDATA[Qraizer: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3877525'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2022-10-01T00:04:52+03:00">30.09.22, 21:04</time></span><div class='quote '>Если это единственное оправданное применение goto - то как то не убедительно выглядит.</div></div>Оправданием служит то, что командный язык CMD ...как бы так помягче... эзотерический.]]></description>
        <author>Qraizer</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3877525</guid>
        <pubDate>Fri, 30 Sep 2022 21:04:52 +0000</pubDate>
        <title>Сохранение и восстановление состояния обработки</title>
        <link>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3877525</link>
        <description><![CDATA[Wound: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3877073'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2022-09-25T13:05:12+00:00">25.09.22, 13:05</time></span><div class='quote '>Вот для примера определение номера партиции (некоторые тесты из-за размера приходилось бить на части) теста в его ID.</div></div><br>
Тут, на сколько я понимаю, с помощью оператора goto - сделан искуственный цикл(попадаем в ветку else - и переходим к началу for, с обновленным начальным массивом). С тем же успехом можно написать вложенный цикл, либо проходить массив не итерированием, а по индексам, и не юзать goto. Если это единственное оправданное применение goto - то как то не убедительно выглядит.<br>
<br>
Давайте приводите что то более существенное.]]></description>
        <author>Wound</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3877517</guid>
        <pubDate>Fri, 30 Sep 2022 19:53:24 +0000</pubDate>
        <title>Сохранение и восстановление состояния обработки</title>
        <link>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3877517</link>
        <description><![CDATA[Wound: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3877063'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Majestio &#064; <time class="tag-quote__quoted-time" datetime="2022-09-25T10:29:41+00:00">25.09.22, 10:29</time></span><div class='quote '>Вот ты и попался, который кусался&#33; :lool: Запомни, с твоим таким подходом - нельзя полноценно остановить, запомнить состояние. А потом возобновить. Любые процессы длинною в жысть нужно дробить на мелкие. Вот тогда и только тогда у тебя появится возможность приостановления и сохранения состояния оперативно. Ну и возобновления. Андестенд?</div></div><br>
Если честно - ничего не понял  :-? <br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3877063'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Majestio &#064; <time class="tag-quote__quoted-time" datetime="2022-09-25T10:29:41+00:00">25.09.22, 10:29</time></span><div class='quote '>Просто в твоем коде овер дохера букв, а у него нет. Ну х3, но если оно так - ну чо, респект ему и тебе. А мне нет. </div></div><br>
А ты не на буквы смотри, а на контекст(суть программы, а не строчки считай).]]></description>
        <author>Wound</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3877077</guid>
        <pubDate>Sun, 25 Sep 2022 14:53:29 +0000</pubDate>
        <title>Сохранение и восстановление состояния обработки</title>
        <link>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3877077</link>
        <description><![CDATA[Majestio: Кстати ... для оформления комментов в CMD-скриптах рекомендую использовать вместо REM пару двоеточий, смотрится красивше. <br>
<br>
Вот пример:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">::</div><div class="code_line">:: ┌───────────────────────────────────────────────────────────────────────────┐</div><div class="code_line">:: │ &nbsp; &nbsp; &nbsp; Получить номер парта из ID теста, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; │</div><div class="code_line">:: │ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;если он есть &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; │░░</div><div class="code_line">:: └───────────────────────────────────────────────────────────────────────────┘░░</div><div class="code_line">:: &nbsp; ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░</div><div class="code_line">&nbsp;</div><div class="code_line">:getPartNumber</div><div class="code_line">setlocal</div><div class="code_line">set testName=%1</div><div class="code_line">rem проверить наличие деления теста на парты</div><div class="code_line">if &quot;%testName%&quot; EQU &quot;%testName:_PART_=%&quot; (endlocal &amp; set result= &amp; exit /b)</div><div class="code_line">set res=</div><div class="code_line">rem найти номер парта в ID теста</div><div class="code_line">:scanPart</div><div class="code_line">rem разделители частей _ и .</div><div class="code_line">for /f &quot;tokens=1,* delims=_.&quot; %%x in (&quot;%testName%&quot;) do (</div><div class="code_line">&nbsp;rem отсеять предшествующие части ID</div><div class="code_line">&nbsp;if &quot;%%x&quot; == &quot;PART&quot; (</div><div class="code_line">&nbsp;&nbsp; rem номер парта будет следующей частью</div><div class="code_line">&nbsp;&nbsp; for /f &quot;tokens=1,2 delims=_.&quot; %%y in (&quot;%testName%&quot;) do set res=%%z</div><div class="code_line">&nbsp;&nbsp;) else (</div><div class="code_line">&nbsp;&nbsp; rem удалить начало ID из него</div><div class="code_line">&nbsp;&nbsp; set testName=%%y</div><div class="code_line">&nbsp;&nbsp; &nbsp;goto scanPart</div><div class="code_line">&nbsp;&nbsp;)</div><div class="code_line">)</div><div class="code_line">rem номер найден</div><div class="code_line">endlocal &amp; set result=_PART_%res%</div><div class="code_line">exit /b</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script>]]></description>
        <author>Majestio</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3877075</guid>
        <pubDate>Sun, 25 Sep 2022 14:11:14 +0000</pubDate>
        <title>Сохранение и восстановление состояния обработки</title>
        <link>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3877075</link>
        <description><![CDATA[Majestio: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3877073'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2022-09-25T13:05:12+00:00">25.09.22, 13:05</time></span><div class='quote '>Вот где goto во всей красе, без него даже циклы нормально написать зачастую невозможно.</div></div><br>
По красоте. Да здравствует прекрасный оператор GOTO&#33;&#33;&#33; :victory:]]></description>
        <author>Majestio</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3877073</guid>
        <pubDate>Sun, 25 Sep 2022 13:05:12 +0000</pubDate>
        <title>Сохранение и восстановление состояния обработки</title>
        <link>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3877073</link>
        <description><![CDATA[Qraizer: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3877045'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Majestio &#064; <time class="tag-quote__quoted-time" datetime="2022-09-25T03:58:36+00:00">25.09.22, 03:58</time></span><div class='quote '>Кстати, стадию отрицания оператора GOTO можно быстрее и успешнее пережить - посетив всего пару курсов экстремального быдлокодинга на бейсеке</div></div>Ну... зачем так сурово-то. Гораздо интереснее скриптовать на CMD. Самый мощный мой скрипт размером 64К был. Там сборка в трёх конфигурациях, две из которых инструментирующие, модульных тестов для 47 различных функциональностей и их прогон с генерированием отчётов под 8-ю разными (не x86 даже близко) процессорами на стендах с использованием 8-и же разных сред разработки. Параметры сборки в частности определялись ещё и парсингом текста тестов, исполнительное тестовое окружение могло быть тоже 3-х разных версий и до кучи есть несколько исключений и правил, прописанных опять же в стороннем файле, который тоже нужно было парсить. И всё это в параллель, но одновременно не более чем количество ядер у процессора + количество подключённых стендов. Как я семафор для ограничения параллельных сборок писал, это отдельный экзерсис. Вот где goto во всей красе, без него даже циклы нормально написать зачастую невозможно. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2022-09-25T13:13:30+00:00">25.09.22, 13:13</time></span></span><br>
Вот для примера определение номера партиции (некоторые тесты из-за размера приходилось бить на части) теста в его ID.<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">rem /**************************************************\</div><div class="code_line">rem | &nbsp; &nbsp; &nbsp; &nbsp;Получить номер парта из ID теста, &nbsp; &nbsp; &nbsp; &nbsp; |</div><div class="code_line">rem | &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; если он есть &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |</div><div class="code_line">rem \**************************************************/</div><div class="code_line">:getPartNumber</div><div class="code_line">setlocal</div><div class="code_line">set testName=%1</div><div class="code_line">rem проверить наличие деления теста на парты</div><div class="code_line">if &quot;%testName%&quot; EQU &quot;%testName:_PART_=%&quot; (endlocal &amp; set result= &amp; exit /b)</div><div class="code_line">set res=</div><div class="code_line">rem найти номер парта в ID теста</div><div class="code_line">:scanPart</div><div class="code_line">rem разделители частей _ и .</div><div class="code_line">for /f &quot;tokens=1,* delims=_.&quot; %%x in (&quot;%testName%&quot;) do (</div><div class="code_line">&nbsp;&nbsp;rem отсеять предшествующие части ID</div><div class="code_line">&nbsp;&nbsp;if &quot;%%x&quot; == &quot;PART&quot; (</div><div class="code_line">&nbsp;&nbsp; &nbsp;rem номер парта будет следующей частью</div><div class="code_line">&nbsp;&nbsp; &nbsp;for /f &quot;tokens=1,2 delims=_.&quot; %%y in (&quot;%testName%&quot;) do set res=%%z</div><div class="code_line">&nbsp;&nbsp;) else (</div><div class="code_line">&nbsp;&nbsp; &nbsp;rem удалить начало ID из него</div><div class="code_line">&nbsp;&nbsp; &nbsp;set testName=%%y</div><div class="code_line">&nbsp;&nbsp; &nbsp;goto scanPart</div><div class="code_line">&nbsp;&nbsp;)</div><div class="code_line">)</div><div class="code_line">rem номер найден</div><div class="code_line">endlocal &amp; set result=_PART_%res%</div><div class="code_line">exit /b</div></ol></div></div></div></div>]]></description>
        <author>Qraizer</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3877063</guid>
        <pubDate>Sun, 25 Sep 2022 10:29:41 +0000</pubDate>
        <title>Сохранение и восстановление состояния обработки</title>
        <link>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3877063</link>
        <description><![CDATA[Majestio: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3877059'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2022-09-25T08:54:38+00:00">25.09.22, 08:54</time></span><div class='quote '>Нет. Я тебе пытаюсь донести что в твоем случае - сам процесс какая то высосаная из пальца однострочная фиговина. Представь что процесс - это целая программа.<br>
</div></div><br>
Вот ты и попался, который кусался&#33; :lool: Запомни, с твоим таким подходом - нельзя полноценно остановить, запомнить состояние. А потом возобновить. Любые процессы длинною в жысть нужно дробить на мелкие. Вот тогда и только тогда у тебя появится возможность приостановления и сохранения состояния оперативно. Ну и возобновления. Андестенд?<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3877059'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2022-09-25T08:54:38+00:00">25.09.22, 08:54</time></span><div class='quote '>Если ты внимательно посмотришь на его пример, и в мой код Handler&#39;ов, и там где они вызываются, то возможно увидишь схожесть...</div></div><br>
Просто в твоем коде овер дохера букв, а у него нет. Ну х3, но если оно так - ну чо, респект ему и тебе. А мне нет.]]></description>
        <author>Majestio</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3877059</guid>
        <pubDate>Sun, 25 Sep 2022 08:54:38 +0000</pubDate>
        <title>Сохранение и восстановление состояния обработки</title>
        <link>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3877059</link>
        <description><![CDATA[Wound: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3877045'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Majestio &#064; <time class="tag-quote__quoted-time" datetime="2022-09-25T03:58:36+00:00">25.09.22, 03:58</time></span><div class='quote '>Чтобы он в отдельном процессе вывел окошко с кнопкой Акей? Это верх программной логики :lol: А то, что существуют программы именно математических пересчетов, тебе точно не ведомо? Да, там отдельные операции чисто математические, ну что тут поделаешь.</div></div><br>
Нет. Я тебе пытаюсь донести что в твоем случае - сам процесс какая то высосаная из пальца однострочная фиговина. Представь что процесс - это целая программа.<br>
<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3877045'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Majestio &#064; <time class="tag-quote__quoted-time" datetime="2022-09-25T03:58:36+00:00">25.09.22, 03:58</time></span><div class='quote '>Похоже на провок. Не понимаешь и пытаешься меня спровоцировать на объяснение. Ну ладно - расскажу, если тебе лениво самому разобраться. В последних обсуждениях я задал вопросы, что делать если в алгоритме появляются безусловные переходы между процессами, или множественные (а-ля) switch-case &quot;решения&quot;. Так вот, в моем случае, когда процессы и решения разделены - это можно решать с помощью &quot;процессов-заглушек&quot;, либо &quot;решений-заглушек&quot;, т.к. у меня идет попарный вызов -&quot;процесс-решение&quot;. В его же предложении есть хорошее зерно - объединить все вызовы в единую таблицу. Где все вызовы делаются вне зависимости от типа вызываемой функции или лямбды. И это сразу же избавляет от необходимости введения этих самых &quot;заглушек&quot;. Код чище и оптимальнее.</div></div><br>
Если ты внимательно посмотришь на его пример, и в мой код Handler&#39;ов, и там где они вызываются, то возможно увидишь схожесть...]]></description>
        <author>Wound</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3877045</guid>
        <pubDate>Sun, 25 Sep 2022 03:58:36 +0000</pubDate>
        <title>Сохранение и восстановление состояния обработки</title>
        <link>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3877045</link>
        <description><![CDATA[Majestio: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3877016'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2022-09-24T22:33:31+00:00">24.09.22, 22:33</time></span><div class='quote '> Только вот эти школьные сложить/умножить/поделить? Возьми реальный процесс, программу, который(процесс) в винде создается функцией CreateProcess например.</div></div><br>
Чтобы он в отдельном процессе вывел окошко с кнопкой Акей? Это верх программной логики :lol: А то, что существуют программы именно математических пересчетов, тебе точно не ведомо? Да, там отдельные операции чисто математические, ну что тут поделаешь.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3877016'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2022-09-24T22:33:31+00:00">24.09.22, 22:33</time></span><div class='quote '>с моей точки зрения - нет нарушения SOLID</div></div><br>
В том то и дело, что это с твоей точки зрения. Нарушаешь и не сознаешься в грехе&#33; Не солидно получается :(<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3877016'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2022-09-24T22:33:31+00:00">24.09.22, 22:33</time></span><div class='quote '>Это то что ниже твоего поста - он примером показал? Рили? Ну нихера себе оптимизация... Ты сам то понимаешь что он предлагает? Или просто поддакиваешь?</div></div><br>
Похоже на провок. Не понимаешь и пытаешься меня спровоцировать на объяснение. Ну ладно - расскажу, если тебе лениво самому разобраться. В последних обсуждениях я задал вопросы, что делать если в алгоритме появляются безусловные переходы между процессами, или множественные (а-ля) switch-case &quot;решения&quot;. Так вот, в моем случае, когда процессы и решения разделены - это можно решать с помощью &quot;процессов-заглушек&quot;, либо &quot;решений-заглушек&quot;, т.к. у меня идет попарный вызов -&quot;процесс-решение&quot;. В его же предложении есть хорошее зерно - объединить все вызовы в единую таблицу. Где все вызовы делаются вне зависимости от типа вызываемой функции или лямбды. И это сразу же избавляет от необходимости введения этих самых &quot;заглушек&quot;. Код чище и оптимальнее.<br>
<br>
Кстати, когда будешь использовать GOTO из главной функции main прямо в тело другой функции - не забудь поправить стек&#33; Иначе по выходу из функции полетит память, и не сможешь вывести кнопку Акей&#33; :whistle: Хотя ... ты же на сишарпе кодишь - вам там вообще нельзя с железными регистрами проца и памятью работать напрямую. Или можно?<br>
<br>
Кстати, стадию отрицания оператора GOTO можно быстрее и успешнее пережить - посетив всего пару курсов экстремального быдлокодинга на бейсеке 8-)]]></description>
        <author>Majestio</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3877016</guid>
        <pubDate>Sat, 24 Sep 2022 22:33:31 +0000</pubDate>
        <title>Сохранение и восстановление состояния обработки</title>
        <link>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3877016</link>
        <description><![CDATA[Wound: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3877003'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Majestio &#064; <time class="tag-quote__quoted-time" datetime="2022-09-24T21:57:06+00:00">24.09.22, 21:57</time></span><div class='quote '>А что в этом плохого, если ты реально хорошо пишешь? Можно же и на С# наговнокодить на четыре сортира. Что плохого в большом и качественном коде в функции main? </div></div><br>
Гхм, ну судя по всему, с твоей точки зрения ничего плохого в этом нет...<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3877015'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2022-09-24T22:28:51+00:00">24.09.22, 22:28</time></span><div class='quote '>Зачем писать 100 000 строк в main? </div></div><br>
Как выше спросил <strong class='tag-b'>Majestio</strong>, а что в этом плохого? Адресуй этот вопрос ему, потому что у меня нет ответа на этот вопрос, и я тоже задавал адептам такого подхода - похожий вопрос. Уж не помню суть ответов, давно это было.  :-? <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2022-09-24T23:01:07+00:00">24.09.22, 23:01</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876895'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Majestio &#064; <time class="tag-quote__quoted-time" datetime="2022-09-24T15:43:47+00:00">24.09.22, 15:43</time></span><div class='quote '>Ну и? Не соглашусь, его over дохуя получается, ну просто over&#33; Цени дальше ...</div></div><br>
Что в твоей задаче подразумевалось под процессами? Только вот эти школьные сложить/умножить/поделить? Возьми реальный процесс, программу, который(процесс) в винде создается функцией CreateProcess например. Как ты это на свои лямбды переведешь, монолитом в функции main, расскажешь? (не, я абсолюнто уверен что это сделать не проблема, если что, не надо мне доказывать что это якобы реально)<br>
<br>
Или у тебя все задачи такого уровня, что ты привел? <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2022-09-24T23:04:45+00:00">24.09.22, 23:04</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876895'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Majestio &#064; <time class="tag-quote__quoted-time" datetime="2022-09-24T15:43:47+00:00">24.09.22, 15:43</time></span><div class='quote '>Никто ничего не менял существенно - изменили алгоритм путем вставки процесса. Што не таг? :blink:</div></div><br>
Все так. Просто я не знаю как там <strong class='tag-b'>korvin</strong>, лично я доказывал что тебе/ему/мне - надо сделать одно и тоже. Только выглядеть это будет по разному. Тебе условия поменять, ему соплю поправить, мне реализацию метода в классе изменить.<br>
Речь шла не об этом. Он до<span class="tag-color tag-color-named" data-value="red" style="color: red">копался</span> до SOLID, якобы при изменении реализации метода класса я его нарушаю, но на самом деле - в этом конкретном случае, с моей точки зрения - нет нарушения SOLID. Но откуда тебе про это знать то, если ты оперируешь goto и пишешь проги в main ?<br>
Ты просто не понял о чем мы спорили. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2022-09-24T23:08:15+00:00">24.09.22, 23:08</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876895'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Majestio &#064; <time class="tag-quote__quoted-time" datetime="2022-09-24T15:43:47+00:00">24.09.22, 15:43</time></span><div class='quote '>korvin предложил оптимизацию - не разделять &quot;процессы&quot; и &quot;решения&quot;.</div></div><br>
Да ладно? А что он предложил, ты сам то понял? Это то что ниже твоего поста - он примером показал? Рили? Ну нихера себе оптимизация... Ты сам то понимаешь что он предлагает? Или просто поддакиваешь?]]></description>
        <author>Wound</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3877015</guid>
        <pubDate>Sat, 24 Sep 2022 22:28:51 +0000</pubDate>
        <title>Сохранение и восстановление состояния обработки</title>
        <link>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3877015</link>
        <description><![CDATA[korvin: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876991'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2022-09-24T21:31:16+00:00">24.09.22, 21:31</time></span><div class='quote '>писать 100 000 строк кода в функции main - в этом ничего плохого нет.</div></div><br>
Зачем писать 100 000 строк в main?]]></description>
        <author>korvin</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3877003</guid>
        <pubDate>Sat, 24 Sep 2022 21:57:06 +0000</pubDate>
        <title>Сохранение и восстановление состояния обработки</title>
        <link>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3877003</link>
        <description><![CDATA[Majestio: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876991'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2022-09-24T21:31:16+00:00">24.09.22, 21:31</time></span><div class='quote '>и что вообще писать 100 000 строк кода в функции main - в этом ничего плохого нет.</div></div><br>
А что в этом плохого, если ты реально хорошо пишешь? Можно же и на С# наговнокодить на четыре сортира. Что плохого в большом и качественном коде в функции main?]]></description>
        <author>Majestio</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876991</guid>
        <pubDate>Sat, 24 Sep 2022 21:31:16 +0000</pubDate>
        <title>Сохранение и восстановление состояния обработки</title>
        <link>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876991</link>
        <description><![CDATA[Wound: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876895'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Majestio &#064; <time class="tag-quote__quoted-time" datetime="2022-09-24T15:43:47+00:00">24.09.22, 15:43</time></span><div class='quote '>Вангую ... наберешься злости и давай спорить. </div></div><br>
Мне вообще по<span class="tag-color tag-color-named" data-value="red" style="color: red">фик</span>. Я уже встречал таких, которые втирали что монолит это клево, и что вообще писать 100 000 строк кода в функции main - в этом ничего плохого нет. И не раз с ними спорил. И сейчас в очередной раз убедился, что до сих пор такие существуют. Ну ок. Пиши как хочешь. Хоть 300 лямбд создай. Вообще пофигу. Эту задачу, что ты предложил - много ума не надо, чтоб решить с помощью If/else, если бы так стоял вопрос - я бы даже не стал участвовать в этом говно-ивенте. Как то так.<br>
<br>
Дальше уж без меня тут сритесь, мне пока не интересно дальше рассуждать. Т.к. по делу претензий не было, от слова совсем. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2022-09-24T21:32:37+00:00">24.09.22, 21:32</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876895'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Majestio &#064; <time class="tag-quote__quoted-time" datetime="2022-09-24T15:43:47+00:00">24.09.22, 15:43</time></span><div class='quote '>Если ты все же желаешь продвигать свою ООП-шнягу - давай строками кода схлестнемся&#33;&#33;&#33; &gt;:(</div></div><br>
Она не моя. Она общаяя.  :-? <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2022-09-24T21:34:15+00:00">24.09.22, 21:34</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876895'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Majestio &#064; <time class="tag-quote__quoted-time" datetime="2022-09-24T15:43:47+00:00">24.09.22, 15:43</time></span><div class='quote '>Начинали со сложных много-вложенных циклов с сохранением и восстановлением вычислений и уместности прекрасного оператора GOTO.</div></div><br>
Да, и тут ты умудрился обосраться. Сначало заливал про свой goto, а на деле - даже не понял как его применять лол. Это как знаешь, поговорка есть - На словах ты Лев Толстой, а на деле Х<span class="tag-color tag-color-named" data-value="red" style="color: red">рен морской</span>... Вот это как раз про тебя и твой goto  :D <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2022-09-24T21:42:25+00:00">24.09.22, 21:42</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876897'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2022-09-24T16:28:46+00:00">24.09.22, 16:28</time></span><div class='quote '>Можно сделать ещё один шаг: вместо индекса сразу возвращать указатель на следующую процедуру/функцию.</div></div><br>
Это прям прогресс...<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876897'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2022-09-24T16:28:46+00:00">24.09.22, 16:28</time></span><div class='quote '>Так немного теряется наглядность переходов от процесса к процессу, но тем не менее.</div></div><br>
Что то мне это напомнило... А да, ты же и задизил мое решение, которое выглядит именно так. Единственное что вместо указателя на следующую процедуру/функцию -  у меня возвращается название класса. <br>
Ну ниче, еще немного глядишь на ООП перепишешь, получится нечто похожее на то, что я предложил.]]></description>
        <author>Wound</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876897</guid>
        <pubDate>Sat, 24 Sep 2022 16:28:46 +0000</pubDate>
        <title>Сохранение и восстановление состояния обработки</title>
        <link>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876897</link>
        <description><![CDATA[korvin: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876895'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Majestio &#064; <time class="tag-quote__quoted-time" datetime="2022-09-24T15:43:47+00:00">24.09.22, 15:43</time></span><div class='quote '> korvin предложил оптимизацию - не разделять &quot;процессы&quot; и &quot;решения&quot;. И это, ящетаю, качественная модернизация подхода&#33;</div></div><br>
Это даже оптимизацией-то не назвать. Ты же сам в своём первом примере объединил processN и decisionN в одну процедуру(функцию). Вот следующий шаг — вместо true/false возвращать сразу индекс процесса, который нужно запустить следующим. Можно сделать ещё один шаг: вместо индекса сразу возвращать указатель на следующую процедуру/функцию.<br>
<br>
Т.е. вместо, например,<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">func block1() State {</div><div class="code_line">&nbsp;&nbsp; &nbsp;process1()</div><div class="code_line">&nbsp;&nbsp; &nbsp;if decision1() {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return Proc4</div><div class="code_line">&nbsp;&nbsp; &nbsp;} else {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return Proc3</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">for {</div><div class="code_line">&nbsp;&nbsp; &nbsp;switch state {</div><div class="code_line">&nbsp;&nbsp; &nbsp;case Proc1:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;state = block1()</div><div class="code_line">&nbsp;&nbsp; &nbsp;case Proc2:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;...</div><div class="code_line">&nbsp;&nbsp; &nbsp;...</div><div class="code_line">&nbsp;&nbsp; &nbsp;case Proc5:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">}</div></ol></div></div></div></div><br>
сделать так, избавившись от switch/case:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">type Block func() Block</div><div class="code_line">&nbsp;</div><div class="code_line">func block1() Block {</div><div class="code_line">&nbsp;&nbsp; &nbsp;process1()</div><div class="code_line">&nbsp;&nbsp; &nbsp;if decision1() {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return block4</div><div class="code_line">&nbsp;&nbsp; &nbsp;} else {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return block3</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">...</div><div class="code_line">&nbsp;</div><div class="code_line">func block5() Block {</div><div class="code_line">&nbsp;&nbsp; &nbsp;...</div><div class="code_line">&nbsp;&nbsp; &nbsp;return nil</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">...</div><div class="code_line">&nbsp;</div><div class="code_line">var block = block1</div><div class="code_line">&nbsp;</div><div class="code_line">for block != nil {</div><div class="code_line">&nbsp;&nbsp; &nbsp;block = block()</div><div class="code_line">}</div></ol></div></div></div></div><br>
Так немного теряется наглядность переходов от процесса к процессу, но тем не менее.<br>
<br>
Вот пример такого решения: <a class='tag-url' href='https://youtu.be/HxaD_trXwRE?t=738' target='_blank'>https://youtu.be/HxaD_trXwRE?t=738</a>]]></description>
        <author>korvin</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876895</guid>
        <pubDate>Sat, 24 Sep 2022 15:43:47 +0000</pubDate>
        <title>Сохранение и восстановление состояния обработки</title>
        <link>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876895</link>
        <description><![CDATA[Majestio: <strong class='tag-b'>Киля</strong>, я вот тут просто вынужден согласится с <strong class='tag-b'>korvin</strong>. Хотя мы в &quot;Политике&quot; с ним ацки воюем, просто <span class="tag-color tag-color-named" data-value="red" style="color: red"><strong class='tag-b'>моря и окияны крови</strong></span> ... Тут я на его стороне&#33; Твои эти си-шарпповские &quot;прокладки&quot; в программировании недетерминированных алгоритмов (которые решаются автоматной логикой) вообще не упали. Да, ты можешь сказать - у меня прекрасный &quot;программный сахар&quot;. Ну и? Не соглашусь, его over до<span class="tag-color tag-color-named" data-value="red" style="color: red">фика</span> получается, ну просто over&#33; Цени дальше ...<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876507'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2022-09-20T14:32:32+00:00">20.09.22, 14:32</time></span><div class='quote '>Если ты начинаешь менять условия для уже существующих решений - это как не крути, называется изменение уже существующих условий и требований. Не?</div></div><br>
Никто ничего не менял существенно - изменили алгоритм путем вставки процесса. Што не таг? :blink: <br>
<br>
Напомню, если забылось... Начинали со сложных много-вложенных циклов с сохранением и восстановлением вычислений и уместности <strong class='tag-b'>прекрасного оператора <span class="tag-color tag-color-named" data-value="red" style="color: red">GOTO</span></strong>. Как я и ванговал в середине обсуждения - пришли к автоматным вычислениям. Только твоя реализация слишком &quot;сладкая&quot;, до тошноты&#33; Хватит таблицы переходов и обработчиков (ляммб, или функций, пофик). <strong class='tag-b'>korvin</strong> предложил оптимизацию - не разделять &quot;процессы&quot; и &quot;решения&quot;. И это, ящетаю, качественная модернизация подхода&#33; <br>
<br>
Вангую ... наберешься злости и давай  спорить. Только это уже никому не интересно  :lol: А вот если запилишь на шарпах обычный автомат, без ООП и прочей шляпы - тебе не будет цены&#33;&#33;&#33; Вааще цена будет - очень высокая.<br>
<br>
<div class="tag-spoiler spoiler closed"><div class="spoiler_header" onclick="openCloseParent(this)">Скрытый текст</div><div class="body">Если ты все же желаешь продвигать свою ООП-шнягу - давай строками кода схлестнемся&#33;&#33;&#33; &gt;:(</div></div>]]></description>
        <author>Majestio</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876507</guid>
        <pubDate>Tue, 20 Sep 2022 14:32:32 +0000</pubDate>
        <title>Сохранение и восстановление состояния обработки</title>
        <link>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876507</link>
        <description><![CDATA[Wound: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876490'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2022-09-20T11:29:04+00:00">20.09.22, 11:29</time></span><div class='quote '>Какие условия задачи? По-твоему, новый процесс куда добавляется? В вакуум? Чтобы что? Чтобы просто так висел в сторонке?</div></div><br>
ты поменял переходы для двух решений 2 и 4. И спрашиваешь - я ничего не менял. Я просто добавил процесс... Лол.<br>
<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876490'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2022-09-20T11:29:04+00:00">20.09.22, 11:29</time></span><div class='quote '>Что же там отсебятина?</div></div><br>
Переделал сигнатуру метода например.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876490'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2022-09-20T11:29:04+00:00">20.09.22, 11:29</time></span><div class='quote '>Что же, по-твоему, означает «добавление нового процесса»?</div></div><br>
Это значит что ты добавляешь просто новый процесс, с новым решением. И все. Если ты начинаешь менять условия для уже существующих решений - это как не крути, называется изменение уже существующих условий и требований. Не? Ты же написал, что добавишь один процесс, и мне придется менять все свои классы. Так нет же. Если ты добавишь новый процесс, мне абсолютно ничего не придется менять.<br>
Если ты хочешь встроить свой процесс в уже существующую схему - то тебе при любых раскладах придется менять уже существующую схему, и изменения будут что у меня, что у тебя соответствующими, и никакие SOLID тут не причем. <br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876490'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2022-09-20T11:29:04+00:00">20.09.22, 11:29</time></span><div class='quote '>Изменение двух классов по одной причине.</div></div><br>
По какой одной причине? Ты во первых добавляешь 2 сущности(process, decision), во вторых ты сам меняешь уже существующий алгоритм работы схемы внося в него изменения. Еще раз, где тут нарушение SOLID ? Во первых у меня вообще никак не страдает общая архитектура от этих правок. Во вторых - если не хочешь менять то что уже существует, пожалуйста - создавай еще один класс наследник, реализуй его как тебе хочется. Это ты решил изменить условия задачи, и теперь пишешь про нарушения. Чувак я тебя не понимаю, ты несешь лютейшую дичь. А если завтра ты скажешь - а я хочу вообще выкинуть процессы, и решения, и вместо этой схемы просто будет дан массив чисел, и в зависимости от того, какое число в N-ом элементе, надо вызывать соответствующую функцию. Хватит нести херню.<br>
<br>
Мне уже реально надоело обсуждать этот бред. <br>
<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876490'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2022-09-20T11:29:04+00:00">20.09.22, 11:29</time></span><div class='quote '>Я тебе схему привёл, код и diff. Указанные изменения есть? Есть.</div></div><br>
Ты поменял уже существующие условия , а не добавил новый процесс. Алё. Раз ты меняешь уже существующие условия - то ты так и пиши, если я изменю существующие условия, то тебе придется свои классы править. Только тогда это будет не аргумент, потому что тебе так же придется все твои сущности править. Ты же пишешь мне - я добавлю новый процесс и тебе придется классы править, при этом ты меняешь условия, правишь мои классы и правишь тоже самое у себя. Лол  :crazy: <br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876490'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2022-09-20T11:29:04+00:00">20.09.22, 11:29</time></span><div class='quote '>Естественно. Ты не до конца прочитал мой пост, что ли?</div></div><br>
Ну когда ты пишешь скопом очередную херню - конечно не читаю. Суть твего запроса была в том, чтоб добавить новый процесс, а не менять условия для других. Я именно из этого и исхожу.<br>
А если ты пишешь одно, а подразумеваешь другое, так это сугубо твои проблемы.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876490'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2022-09-20T11:29:04+00:00">20.09.22, 11:29</time></span><div class='quote '>Это стрелки диаграммы, как они нарисованы на схеме, так они тут и написаны. Всё наглядно.</div></div><br>
Ничего там не наглядно, вот эта сопля - по факту считай как мой класс Decision. Просто у тебя оно реализовано что то типа тернарного оператора с элементами лямбды, с определенный синтаксисом. Но я твой код - даже и близко не обсуждал. Мне как бы твоя функциональщина нахер не упала. Птичий язык, и разбираться в нем у меня нет ни желания, ни времени. Я глянул твой дифф, что у тебя, что у меня менять будет примерно одинаково. Единственное что синтаксис разный.<br>
<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876490'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2022-09-20T11:29:04+00:00">20.09.22, 11:29</time></span><div class='quote '>Ага. Только не менял какой-то там Process2DecisionHandler, хрен пойми, где находящийся. )</div></div><br>
Это он для тебя хрен пойми, где находящийся, потому что я тупо взял все классы и скинул в общий блокнот, с одной единственной целью - чтоб была возможность закинуть это все в онлайн компилятор. на деле в IDE все эта кухня распологается в идеале в отдельном файле, и расположена в отдельном фильтре. И по факту не нужно ничего искать. <br>
<br>
Конкретно в этом случае - у тебя основной аргумент идет на то, что пример синтетический, и тебя толи напугали, то ли от своей тупости почему то оттолкнули классы. Но если бы вот этот каждый Decision/Process был не просто верни true/false, а что то более громоздкое, например какие то вычисления, занимающие с 10 строк, то я почему то уверен ты бы сам все это разнес бы по функциям/классам, а не лепил бы в одну строку соплей, которую ты выставляешь каким то ахеренным решением.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876490'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2022-09-20T11:29:04+00:00">20.09.22, 11:29</time></span><div class='quote '>Ещё раз перечитай последнее предложение:</div></div><br>
А что мне перечитывать? Ты же несешь очередной бред. У меня это все не запутаннее твоего, я бы даже сказал на порядок проще, потому что глядя на твои портянки на функциональщие, - там на самом деле вообще нихера не понятно. Идеальный спагетти-код какой то.]]></description>
        <author>Wound</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876490</guid>
        <pubDate>Tue, 20 Sep 2022 11:29:04 +0000</pubDate>
        <title>Сохранение и восстановление состояния обработки</title>
        <link>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876490</link>
        <description><![CDATA[korvin: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876477'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2022-09-20T08:57:22+00:00">20.09.22, 08:57</time></span><div class='quote '>Ааа, то есть изначально шла речь про просто добавление нового процесса, а теперь ты решил изменить условия всей задачи и других процессов, браво&#33; </div></div><br>
Какие условия задачи? По-твоему, новый процесс куда добавляется? В вакуум? Чтобы что? Чтобы просто так висел в сторонке?<br>
<br>
Типа такого, да?<br>
<span class="b-attach" data-size="97770" data-hits="229" data-attach-id="63973" data-attach-post-id="3876490">
			<span class="b-attach__title"></span><a class='b-attach-link' href='https://forum.sources.ru/index.php?act=Attach&amp;type=post&amp;id=3876490&amp;attach_id=63973' title='Скачать файл' target='_blank'>Majestio_machine_v2_vacuum.png</a> (, : 229)
		</span><br>
<br>
:facepalm:<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876477'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2022-09-20T08:57:22+00:00">20.09.22, 08:57</time></span><div class='quote '>Во первых ты там половину отсебятины добавил</div></div><br>
Что же там отсебятина?<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876477'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2022-09-20T08:57:22+00:00">20.09.22, 08:57</time></span><div class='quote '>Тогда ты так и пиши - &quot;если я захочу изменить условия перехода для всех уже имеющихся процессов, тогда тебе придется изменять свои классы&quot;, а не &quot;если я захочу добавить новый процесс, то тебе придется изменять уже существующие класса&quot;. Ты разницы не видишь или что?</div></div><br>
Что же, по-твоему, означает «добавление нового процесса»?<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876477'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2022-09-20T08:57:22+00:00">20.09.22, 08:57</time></span><div class='quote '>Где тут нарушение S ?</div></div><br>
Изменение двух классов по одной причине.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876477'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2022-09-20T08:57:22+00:00">20.09.22, 08:57</time></span><div class='quote '>Я же говорю - ты из пальца высосал свои шаги</div></div><br>
Я тебе схему привёл, код и diff. Указанные изменения есть? Есть.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876477'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2022-09-20T08:57:22+00:00">20.09.22, 08:57</time></span><div class='quote '>не не не, ты в свой код внес ровно те же самые изменения что и в мой(ну за исключением константы).</div></div><br>
Естественно. Ты не до конца прочитал мой пост, что ли?<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876477'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2022-09-20T08:57:22+00:00">20.09.22, 08:57</time></span><div class='quote '>Ты добавил процесс, добавил какое то decision5 как ты там выразился,</div></div><br>
Ага, добавил ровно то, что требовалось.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876477'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2022-09-20T08:57:22+00:00">20.09.22, 08:57</time></span><div class='quote '>Ты изменил вот эту соплю или что это(предполагаю это решение процесса2):</div></div><br>
Это стрелки диаграммы, как они нарисованы на схеме, так они тут и написаны. Всё наглядно.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876477'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2022-09-20T08:57:22+00:00">20.09.22, 08:57</time></span><div class='quote '>Опять же изменил константу. Т.е. ты внес плюс минус те же самые изменения. в свой код.</div></div><br>
Ага. Только не менял какой-то там Process2DecisionHandler, хрен пойми, где находящийся. )<br>
<br>
Ещё раз перечитай последнее предложение:<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876476'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2022-09-20T08:35:42+00:00">20.09.22, 08:35</time></span><div class='quote '>Таким образом, твои «независимые классы» независимы лишь иллюзорно, и твой код просто скрывает эти связи, запутывая читателя.</div></div><br>
Как и «масштабируемость» твоя илюзорна.]]></description>
        <author>korvin</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876477</guid>
        <pubDate>Tue, 20 Sep 2022 08:57:22 +0000</pubDate>
        <title>Сохранение и восстановление состояния обработки</title>
        <link>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876477</link>
        <description><![CDATA[Wound: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876476'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2022-09-20T08:35:42+00:00">20.09.22, 08:35</time></span><div class='quote '><br>
<br>
Вот тебе схема с новым процессом:</div></div><br>
Ааа, то есть изначально шла речь про просто добавление нового процесса, а теперь ты решил изменить условия всей задачи и других процессов, браво&#33; Так тогда и тебе и majestio придется менять все условия. В чем вопрос, если ты изменил условия задачи?<br>
<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876476'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2022-09-20T08:35:42+00:00">20.09.22, 08:35</time></span><div class='quote '>Вот diff: <a class='tag-url' href='https://quickdiff.net/?unique_id=C835D453-8...68-DBDE2D1B54C6' target='_blank'>https://quickdiff.net/?unique_id=C835D453-8...68-DBDE2D1B54C6</a><br>
<br>
Что мы видим в данном изменении?</div></div><br>
Во первых ты там половину отсебятины добавил и переписал(зачем то, во вторых ты взял первый пример, в последнем примере там и так уже 5 процессов). Единственное что придется при добавлении нового процесса менять - это константу количества процессов. Мне лень было ее выносить куда то в отдельный базовый класс. И все. В данном случае - я прекрасно понимал что придется ее менять так же, при добавлении, но лень мне уже было ее выносить куда то.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876476'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2022-09-20T08:35:42+00:00">20.09.22, 08:35</time></span><div class='quote '>Есть? Есть: прописали Process 5 в Process2DecisionHandler.</div></div><br>
Тогда ты так и пиши - &quot;если я захочу изменить условия перехода для всех уже имеющихся процессов, тогда тебе придется изменять свои классы&quot;, а не &quot;если я захочу добавить новый процесс, то тебе придется изменять уже существующие класса&quot;. Ты разницы не видишь или что?<br>
<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876476'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2022-09-20T08:35:42+00:00">20.09.22, 08:35</time></span><div class='quote '>Есть? Есть.</div></div><br>
Тебе придется в С++ коде делать ровно тоже самое, только это будет по другому называться. Я же говорю - ты из пальца высосал свои шаги, чтоб их было побольше желательно, причем все они будут так же у тебя.<br>
<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876476'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2022-09-20T08:35:42+00:00">20.09.22, 08:35</time></span><div class='quote '>Итого, в таком простом изменении 2 попадания, из которых одно (пункт 1) — прямое нарушение SOILD.</div></div><br>
Где тут нарушение S ?<br>
<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876476'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2022-09-20T08:35:42+00:00">20.09.22, 08:35</time></span><div class='quote '>Как бонус, ты в своей «классной ООП-архитектуре» забыл абстрагировать ячейки памяти, в результате пришлось в каждом классе процесса править константу MaxSizeValues. Ещё одно нарушение SOILD.<br>
Кстати, почему в методе Execute размер списка проверяется, а в методе Decision — нет?</div></div><br>
А у меня не было написать какое то идеальное решение, я уверен в моем решении еще много косяков, но это решение - прекрасно масштабируется и сопровождается. С минимальными переделками основной логики программы.<br>
<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876476'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2022-09-20T08:35:42+00:00">20.09.22, 08:35</time></span><div class='quote '>Как видно, никаких изменений в реализациях process_2 и decision_2 в модуле Majestio_machine нет. Из дополнительного только 1) изменение размера памяти и 2) изменение самого автомата в соответствие с изменившимися связями на схеме.</div></div><br>
не не не, ты в свой код внес ровно те же самые изменения что и в мой(ну за исключением константы).<br>
Ты добавил процесс, добавил какое то decision5 как ты там выразился, <br>
Ты изменил вот эту соплю или что это(предполагаю это решение процесса2):<br>
    | Proc_2 -&gt; () --&#62; M.process_2 --&#62; M.decision_2 --&#62; yes Proc_3 ~no:Proc_5 --&#62; loop<br>
<br>
Опять же изменил константу. Т.е. ты внес плюс минус те же самые изменения. в свой код.]]></description>
        <author>Wound</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876476</guid>
        <pubDate>Tue, 20 Sep 2022 08:35:42 +0000</pubDate>
        <title>Сохранение и восстановление состояния обработки</title>
        <link>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876476</link>
        <description><![CDATA[korvin: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876460'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2022-09-20T05:59:58+00:00">20.09.22, 05:59</time></span><div class='quote '><span class="tag-color tag-color-named" data-value="red" style="color: red">Фигню</span> не неси, а?</div></div><br>
:facepalm:<br>
<br>
Вот тебе схема с новым процессом:<br>
<span class="b-attach" data-size="102640" data-hits="262" data-attach-id="63972" data-attach-post-id="3876476">
			<span class="b-attach__title"></span><a class='b-attach-link' href='https://forum.sources.ru/index.php?act=Attach&amp;type=post&amp;id=3876476&amp;attach_id=63972' title='Скачать файл' target='_blank'>Majestio_machine_v2.png</a> (, : 262)
		</span><br>
<br>
<div class="tag-spoiler spoiler closed"><div class="spoiler_header" onclick="openCloseParent(this)">Вот ТВОЙ код с добавлением нового процесса</div><div class="body"><div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">using System;</div><div class="code_line">using System.Collections.Generic;</div><div class="code_line">using System.Linq;</div><div class="code_line">using Challenge.Interfaces;</div><div class="code_line">&nbsp;</div><div class="code_line">//! Interfaces</div><div class="code_line">namespace Challenge.Interfaces</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;public interface IDecisionHandler</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;string HandleDecision(bool decision);</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;public interface IProcess</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;void Execute(List&#60;int&#62; values);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;bool Decision(List&#60;int&#62; values);</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">namespace Challenge</div><div class="code_line">{</div><div class="code_line">//! DecisionhandlerContext</div><div class="code_line">&nbsp;&nbsp; &nbsp;public class DecisionHandlerContext</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;private Dictionary&#60;string, IDecisionHandler&#62; _handlers;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;public DecisionHandlerContext()</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_handlers = new Dictionary&#60;string, IDecisionHandler&#62;();</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;public void RegisterHandler(string processName, IDecisionHandler decisionHandler)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (String.IsNullOrEmpty(processName) || decisionHandler == null)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;throw new Exception(&quot;Argument can&#39;t be null&quot;);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_handlers.Add(processName, decisionHandler);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;public string HandleDecisionAndGetNextStep(string processName, bool decision)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (String.IsNullOrEmpty(processName))</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;throw new Exception(&quot;Invalid arguments&quot;);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if(_handlers.TryGetValue(processName, out var handler))</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return handler.HandleDecision(decision);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;throw new Exception(&quot;Handle error&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;public class Process1DecisionHandler : IDecisionHandler</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;public string HandleDecision(bool decision)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if(decision)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return Process4.ProcessName;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return Process3.ProcessName;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;public class Process2DecisionHandler : IDecisionHandler</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;public string HandleDecision(bool decision)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (decision)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return Process3.ProcessName;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return Process5.ProcessName;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;public class Process3DecisionHandler : IDecisionHandler</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;public string HandleDecision(bool decision)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (decision)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return Process2.ProcessName;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return Process1.ProcessName;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;public class Process4DecisionHandler : IDecisionHandler</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;public string HandleDecision(bool decision)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (decision)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return Process6.ProcessName;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return Process2.ProcessName;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;public class Process5DecisionHandler : IDecisionHandler</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;public string HandleDecision(bool decision)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if(decision)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return Process4.ProcessName;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return Process3.ProcessName;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;public class Process6DecisionHandler : IDecisionHandler</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;public string HandleDecision(bool decision)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return String.Empty;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">//! Process1</div><div class="code_line">&nbsp;&nbsp; &nbsp;public class Process1 : IProcess</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;private const int MaxSizeValues = 5;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;public static string ProcessName =&#62; &quot;1&quot;;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;public void Execute(List&#60;int&#62; values)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (values == null || values.Count &#62; MaxSizeValues)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;throw new InvalidOperationException(&quot;List of values is empty...&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;++values[0];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;public bool Decision(List&#60;int&#62; values)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return (values.Sum() % 2) == 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">//! Process2</div><div class="code_line">&nbsp;&nbsp; &nbsp;public class Process2 : IProcess</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;private const int MaxSizeValues = 5;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;public static string ProcessName =&#62; &quot;2&quot;;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;public bool Decision(List&#60;int&#62; values)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return (values.Sum() % 7) &#62; 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;public void Execute(List&#60;int&#62; values)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (values == null || values.Count &#62; MaxSizeValues)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;throw new InvalidOperationException(&quot;List of values is empty...&quot;);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;values[1] += values[3] + 1;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">//! Process3</div><div class="code_line">&nbsp;&nbsp; &nbsp;public class Process3 : IProcess</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;private const int MaxSizeValues = 5;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;public static string ProcessName =&#62; &quot;3&quot;;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;public bool Decision(List&#60;int&#62; values)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;var existOdd = values.Any(e =&#62; e % 2 != 0);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return !existOdd;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;public void Execute(List&#60;int&#62; values)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (values == null || values.Count &#62; MaxSizeValues)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;throw new InvalidOperationException(&quot;List of values is empty...&quot;);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if ( (values[0] + values[1]) % 3 &#62; 0 )</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;values[2] += 7;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">//! Process4</div><div class="code_line">&nbsp;&nbsp; &nbsp;public class Process4 : IProcess</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;private const int MaxSizeValues = 5;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;public static string ProcessName =&#62; &quot;4&quot;;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;public bool Decision(List&#60;int&#62; values)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return values.Sum() &#62; 24;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;public void Execute(List&#60;int&#62; values)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (values == null || values.Count &#62; MaxSizeValues)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;throw new InvalidOperationException(&quot;List of values is empty...&quot;);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if ((values[0] + values[2]) % 5 != 4)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;++values[3];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">//! Process4</div><div class="code_line">&nbsp;&nbsp; &nbsp;public class Process5 : IProcess</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;private const int MaxSizeValues = 5;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;public static string ProcessName =&#62; &quot;5&quot;;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;public bool Decision(List&#60;int&#62; values)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return values[4] &#62; 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;public void Execute(List&#60;int&#62; values)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (values == null || values.Count &#62; MaxSizeValues)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;throw new InvalidOperationException(&quot;List of values is empty...&quot;);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;++values[4];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">//! Process6</div><div class="code_line">&nbsp;&nbsp; &nbsp;public class Process6 : IProcess</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;public static string ProcessName =&#62; &quot;6&quot;;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;public bool Decision(List&#60;int&#62; values)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return true;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;public void Execute(List&#60;int&#62; values)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">//! ProcessContext</div><div class="code_line">&nbsp;&nbsp; &nbsp;public class ProcessContext</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;private Dictionary&#60;string, IProcess&#62; _processes;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;private DecisionHandlerContext _handlerContext;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;public ProcessContext()</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_processes = new Dictionary&#60;string, IProcess&#62;();</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_handlerContext = new DecisionHandlerContext();</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;public ProcessContext AddProcess(string proccesName, IProcess process, IDecisionHandler handler)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (String.IsNullOrEmpty(proccesName) || process == null)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;throw new Exception(&quot;Argument can&#39;t be null&quot;);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_processes.Add(proccesName, process);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_handlerContext.RegisterHandler(proccesName, handler);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return this;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;public bool RunProcessAndCheckDecision(string processName, List&#60;int&#62; values)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if(_processes.TryGetValue(processName, out var proc))</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (proc == null)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;throw new Exception($&quot;Process with name &#39;{processName}&#39; is null.&quot;);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;proc.Execute(values);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return proc.Decision(values);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;throw new Exception($&quot;Process with name &#39;{processName}&#39; not found.&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;public void RunAllProcesses(int step, string startProcessName, List&#60;int&#62; values)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;string currentProcessName = startProcessName;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;while (true)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Console.WriteLine($&quot;Step {step}\t Proc: {currentProcessName}\t {String.Join(&quot; &quot;, values)}&quot;);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;var result = RunProcessAndCheckDecision(currentProcessName, values);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;currentProcessName = _handlerContext.HandleDecisionAndGetNextStep(currentProcessName, result);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (String.IsNullOrEmpty(currentProcessName))</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;break;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;++step;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">//! Programm</div><div class="code_line">&nbsp;&nbsp; &nbsp;public class Program</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;static void Main(string[] args)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;try</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;List&#60;int&#62; values = new List&#60;int&#62; { 0, 0, 0, 0, 0 };</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ProcessContext processContext = new ProcessContext();</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;processContext</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;.AddProcess(Process1.ProcessName, new Process1(), new Process1DecisionHandler())</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;.AddProcess(Process2.ProcessName, new Process2(), new Process2DecisionHandler())</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;.AddProcess(Process3.ProcessName, new Process3(), new Process3DecisionHandler())</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;.AddProcess(Process4.ProcessName, new Process4(), new Process4DecisionHandler())</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;.AddProcess(Process5.ProcessName, new Process5(), new Process5DecisionHandler())</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;.AddProcess(Process6.ProcessName, new Process6(), new Process6DecisionHandler());</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;processContext.RunAllProcesses(1, Process1.ProcessName, values);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Console.WriteLine(&quot;--------------------------&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;List&#60;int&#62; savedValues = new List&#60;int&#62; { 3, 1, 14, 1, 0 };</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;processContext.RunAllProcesses(9, Process2.ProcessName, savedValues);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;catch(Exception error)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Console.WriteLine(error.Message);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">}</div></ol></div></div></div></div></div></div><br>
— <a class='tag-url' href='https://rextester.com/MWCA94654' target='_blank'>https://rextester.com/MWCA94654</a><br>
<br>
Вот diff: <a class='tag-url' href='https://quickdiff.net/?unique_id=C835D453-8C9B-1C97-7268-DBDE2D1B54C6' target='_blank'>https://quickdiff.net/?unique_id=C835D453-8...68-DBDE2D1B54C6</a><br>
<br>
Что мы видим в данном изменении?<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876369'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2022-09-18T04:52:20+00:00">18.09.22, 04:52</time></span><div class='quote '>1) новый процесс прописать в каком-то decision&#39;e (откуда он должен будет запускаться)</div></div><br>
Есть? <span class="tag-color tag-color-named" data-value="blue" style="color: blue">Есть</span>: прописали Process 5 в <strong class='tag-b'>Process2DecisionHandler</strong>.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876369'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2022-09-18T04:52:20+00:00">18.09.22, 04:52</time></span><div class='quote '>2) старый процесс прописать куда-то в новое место</div></div><br>
Есть? <span class="tag-color tag-color-named" data-value="red" style="color: red">Нет</span>: старый процесс 4 теперь вызывается из нового процесса. Если бы старый процесс нужно было бы перепривязать в другой старый процесс, то и тут было бы «Есть».<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876369'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2022-09-18T04:52:20+00:00">18.09.22, 04:52</time></span><div class='quote '>3) зарегистрировать новый процесс и decisionHandler в ProcessContext.</div></div><br>
Есть? <span class="tag-color tag-color-named" data-value="blue" style="color: blue">Есть</span>.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876369'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2022-09-18T04:52:20+00:00">18.09.22, 04:52</time></span><div class='quote '>4) Поправить тесты изменённых decision&#39;ов.</div></div><br>
Есть? Условно говоря, <span class="tag-color tag-color-named" data-value="orange" style="color: orange">возможно</span>. Тестов у тебя нет, если бы были, пришлось бы править тест <strong class='tag-b'>Process2DecisionHandler</strong>, хотя сейчас Handler&#39;ы выглядят тривиальными, не требующими тестирования.<br>
<br>
Итого, в таком простом изменении 2 попадания, из которых одно (пункт 1) — прямое нарушение <strong class='tag-b'>S</strong><span class="tag-color tag-color-named" data-value="gray" style="color: gray">OILD</span>.<br>
<br>
Как бонус, ты в своей «классной ООП-архитектуре» забыл абстрагировать ячейки памяти, в результате пришлось в каждом классе процесса править константу MaxSizeValues. Ещё одно нарушение <strong class='tag-b'>S</strong><span class="tag-color tag-color-named" data-value="gray" style="color: gray">OILD</span>.<br>
Кстати, почему в методе Execute размер списка проверяется, а в методе Decision — нет?<br>
<br>
<div class="tag-spoiler spoiler closed"><div class="spoiler_header" onclick="openCloseParent(this)">Вот, например, изменения в версии на Ocaml, со switch-case-loop</div><div class="body"><div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">module type Machine =</div><div class="code_line">&nbsp;&nbsp;sig</div><div class="code_line">&nbsp;&nbsp; &nbsp;type data = int array</div><div class="code_line">&nbsp;&nbsp; &nbsp;val init : ?data:data -&#62; unit -&#62; unit</div><div class="code_line">&nbsp;&nbsp; &nbsp;val dump : unit -&#62; data</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;type process = unit -&#62; unit</div><div class="code_line">&nbsp;&nbsp; &nbsp;val process_1 : process</div><div class="code_line">&nbsp;&nbsp; &nbsp;val process_2 : process</div><div class="code_line">&nbsp;&nbsp; &nbsp;val process_3 : process</div><div class="code_line">&nbsp;&nbsp; &nbsp;val process_4 : process</div><div class="code_line">&nbsp;&nbsp; &nbsp;val process_5 : process</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;type decision = unit -&#62; bool</div><div class="code_line">&nbsp;&nbsp; &nbsp;val decision_1 : decision</div><div class="code_line">&nbsp;&nbsp; &nbsp;val decision_2 : decision</div><div class="code_line">&nbsp;&nbsp; &nbsp;val decision_3 : decision</div><div class="code_line">&nbsp;&nbsp; &nbsp;val decision_4 : decision</div><div class="code_line">&nbsp;&nbsp; &nbsp;val decision_5 : decision</div><div class="code_line">&nbsp;&nbsp;end</div><div class="code_line">&nbsp;</div><div class="code_line">module Program (M : Machine) =</div><div class="code_line">&nbsp;&nbsp;struct</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;type state =</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;| Proc_1</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;| Proc_2</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;| Proc_3</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;| Proc_4</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;| Proc_5</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;| Stop</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;let ( --&#62; ) = ( |&#62; )</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;let yes y ~no:n decision = if decision then y else n</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;let rec run count state =</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;log_state count state ;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;let loop = run (count + 1) in</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;match state with</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;| Proc_1 -&#62; () --&#62; M.process_1 --&#62; M.decision_1 --&#62; yes Proc_4 ~no:Proc_3 --&#62; loop</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;| Proc_2 -&#62; () --&#62; M.process_2 --&#62; M.decision_2 --&#62; yes Proc_3 ~no:Proc_5 --&#62; loop</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;| Proc_3 -&#62; () --&#62; M.process_3 --&#62; M.decision_3 --&#62; yes Proc_2 ~no:Proc_1 --&#62; loop</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;| Proc_4 -&#62; () --&#62; M.process_4 --&#62; M.decision_4 --&#62; yes Stop &nbsp; ~no:Proc_2 --&#62; loop</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;| Proc_5 -&#62; () --&#62; M.process_5 --&#62; M.decision_5 --&#62; yes Proc_4 ~no:Proc_3 --&#62; loop</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;| Stop &nbsp; -&#62; ()</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;and log_state count state =</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;let data = M.dump () in</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Printf.printf &quot;Step: %2d &nbsp; %s &nbsp; %s\n&quot; count (state_string state) (data_string data)</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;and state_string s =</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;match s with</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;| Proc_1 -&#62; &quot;Process 1&quot;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;| Proc_2 -&#62; &quot;Process 2&quot;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;| Proc_3 -&#62; &quot;Process 3&quot;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;| Proc_4 -&#62; &quot;Process 4&quot;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;| Proc_5 -&#62; &quot;Process 5&quot;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;| Stop &nbsp; -&#62; &quot;Stop &nbsp; &nbsp; &quot;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;and data_string data =</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;data --&#62; Array.map (Printf.sprintf &quot; %2d&quot;) --&#62; Array.to_list --&#62; String.concat &quot; &quot;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;end</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">module Majestio_machine : Machine =</div><div class="code_line">&nbsp;&nbsp;struct</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;let size = 5</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;let cell = Array.make size 0</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;type data = int array</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;let init ?(data=[||]) () =</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;let n = min size (Array.length data) in</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if n = 0</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;then Array.fill cell 0 size 0</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;else Array.blit data 0 cell 0 n</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;let dump () = Array.copy cell</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;type process = unit -&#62; unit</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;let process_1 () =</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;cell.(0) &#60;- cell.(0) + 1</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;let process_2 () =</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;cell.(1) &#60;- cell.(1) + cell.(3) + 1</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;let process_3 () =</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;let sum_0_1 = cell.(0) + cell.(1) in</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if sum_0_1 mod 3 &#60;&#62; 0 then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;cell.(2) &#60;- cell.(2) + 7</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;let process_4 () =</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;let sum_0_2 = cell.(0) + cell.(2) in</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if sum_0_2 mod 5 &#60;&#62; 4 then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;cell.(3) &#60;- cell.(3) + 1</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;let process_5 () =</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;cell.(4) &#60;- cell.(4) + 1</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;type decision = unit -&#62; bool</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;let sum = Array.fold_left (+) 0</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;let decision_1 () = sum cell mod 2 = 0</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;let decision_2 () = sum cell mod 7 &#62; 0</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;let decision_3 () =</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;let is_even x = x mod 2 = 0 in</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Array.for_all is_even cell</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;let decision_4 () = sum cell &#62; 24</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;let decision_5 () = cell.(4) &#62; 0</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;end</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">let main () =</div><div class="code_line">&nbsp;&nbsp;let module Machine = Majestio_machine in</div><div class="code_line">&nbsp;&nbsp;let module Program = Program (Machine) in</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;Machine.init () ;</div><div class="code_line">&nbsp;&nbsp;Program.run 1 Program.Proc_1 ;</div><div class="code_line">&nbsp;&nbsp;print_endline &quot;----------------------------------------------------------------&quot; ;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;Machine.init ~data:[| 3; 1; 14; 1; 0 |] () ;</div><div class="code_line">&nbsp;&nbsp;Program.run 9 Program.Proc_2 ;</div><div class="code_line">&nbsp;&nbsp;print_endline &quot;----------------------------------------------------------------&quot; ;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;print_endline &quot;done&quot;</div><div class="code_line">&nbsp;</div><div class="code_line">let () = main ()</div></ol></div></div></div></div></div></div><br>
— <a class='tag-url' href='https://rextester.com/WKONS22441' target='_blank'>https://rextester.com/WKONS22441</a><br>
<br>
Вот diff: <a class='tag-url' href='https://quickdiff.net/?unique_id=EDAE41DF-0F2A-46B4-6F35-F78B02FB93DF' target='_blank'>https://quickdiff.net/?unique_id=EDAE41DF-0...35-F78B02FB93DF</a><br>
<br>
Как видно, никаких изменений в реализациях process_2 и decision_2 в модуле Majestio_machine нет. Из дополнительного только 1) изменение размера памяти и 2) изменение самого автомата в соответствие с изменившимися связями на схеме.<br>
<br>
Таким образом, твои «независимые классы» независимы лишь иллюзорно, и твой код просто скрывает эти связи, запутывая читателя.]]></description>
        <author>korvin</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876473</guid>
        <pubDate>Tue, 20 Sep 2022 08:22:18 +0000</pubDate>
        <title>Сохранение и восстановление состояния обработки</title>
        <link>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876473</link>
        <description><![CDATA[Majestio: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3874679'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2022-08-26T20:55:08+00:00">26.08.22, 20:55</time></span><div class='quote '></div></div><br>
Ок]]></description>
        <author>Majestio</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876460</guid>
        <pubDate>Tue, 20 Sep 2022 05:59:58 +0000</pubDate>
        <title>Сохранение и восстановление состояния обработки</title>
        <link>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876460</link>
        <description><![CDATA[Wound: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876369'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2022-09-18T04:52:20+00:00">18.09.22, 04:52</time></span><div class='quote '>Не полностью: при добавлении нового процесса в твоём примере нужно будет:</div></div><br>
<span class="tag-color tag-color-named" data-value="red" style="color: red">Фигню</span> не неси, а? Я щас тебе таких же шагов повысасываю из пальца. Потому что, что в моих примерах, что в его примерах - сделать нужно тоже самое.<br>
В моем - добавляешь класс процесса, класс обработки решения, регистрируешь это в main. все. остальные детали идут из условия, у него это будет добавление лямбды во вторгой задаче, либо условия в switch.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876369'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2022-09-18T04:52:20+00:00">18.09.22, 04:52</time></span><div class='quote '>Итого из-за добавления одного процесса нужно править кучу классов. А как же SOLID?</div></div><br>
Мне не нужно <strong class='tag-b'>править</strong> кучу классов. Это ты из за того что не понимаешь что ты несешь, решил очередную чушь принести. И ничего там не нарушается.<br>
<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876369'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2022-09-18T04:52:20+00:00">18.09.22, 04:52</time></span><div class='quote '>В наших же, с Majestio, примерах нужно править только один/два «класса» — switch-case и словарь «лямбд». И добавить тесты для новой лямбды (править тесты других decision&#39;ов не нужно)</div></div><br>
У него в решениях нет классов. Алё. И править ему придется ровно столько же, сколько и мне. Мде добавить 2 класса, и добавить их регистрацию, чтоб они вызвались. И ему две функции/лямбды. плюс добавить в его массив эти лямбды либо добавить case для первого пример.<br>
<br>
Ты мне скажи - ты может быть количество строчек считаешь? Так прямо об этом и скажи тогда, а не виляй туда сюда.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876369'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2022-09-18T04:52:20+00:00">18.09.22, 04:52</time></span><div class='quote '>Функции (лямбды) также прекрасно тестируются по-отдельности.</div></div><br>
Я комментирую написанный уже готовый код. Иди протестируй его лямбды, не изменяя его примера. Тут притензии не к лямбдам как таковым, а к тому как они юзаются.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876369'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2022-09-18T04:52:20+00:00">18.09.22, 04:52</time></span><div class='quote '>А если лямбды вынести из main в namespace challenge, будет менее херово? </div></div><br>
То ты уже начнешь рефакторить его код, прям сходу.]]></description>
        <author>Wound</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876387</guid>
        <pubDate>Sun, 18 Sep 2022 10:37:59 +0000</pubDate>
        <title>Сохранение и восстановление состояния обработки</title>
        <link>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876387</link>
        <description><![CDATA[Majestio: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876384'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2022-09-18T10:09:50+00:00">18.09.22, 10:09</time></span><div class='quote '>Посмотри моё решение на Хаскелле и вопрос отпадёт сам собой.</div></div><br>
Да, объединение в одну таблицу и <strong class='tag-b'>Process</strong>, и <strong class='tag-b'>Decision</strong> - интересный вариант&#33; <br>
Тогда ветвления типа <strong class='tag-b'>switch-case</strong> можно разложить на последовательные <strong class='tag-b'>if-then-else</strong> вообще без накладных расходов.]]></description>
        <author>Majestio</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876384</guid>
        <pubDate>Sun, 18 Sep 2022 10:09:50 +0000</pubDate>
        <title>Сохранение и восстановление состояния обработки</title>
        <link>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876384</link>
        <description><![CDATA[korvin: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876294'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2022-09-16T22:14:33+00:00">16.09.22, 22:14</time></span><div class='quote '>Ну во первых мне честно лень добавлять еще 45 процессов. Это тупая копипаста получится. Схема от этого особо не изменится</div></div><br>
Детализируй текущую схему на более мелкие шаги, делов-то.<br>
<br>
<span class="b-attach" data-size="104096" data-hits="361" data-attach-id="63960" data-attach-post-id="3876384">
			<span class="b-attach__title"></span><a class='b-attach-link' href='https://forum.sources.ru/index.php?act=Attach&amp;type=post&amp;id=3876384&amp;attach_id=63960' title='Скачать файл' target='_blank'>Majestio_machine_2_smaller.png</a> (, : 361)
		</span><br>
<br>
Полноразмерное изображение: <a class='tag-url' href='https://snipboard.io/87seH3.jpg' target='_blank'>https://snipboard.io/87seH3.jpg</a> <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2022-09-18T10:17:21+00:00">18.09.22, 10:17</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876382'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Majestio &#064; <time class="tag-quote__quoted-time" datetime="2022-09-18T09:37:43+00:00">18.09.22, 09:37</time></span><div class='quote '>а что делать, если вдруг, по каким-то соображениям, нам нужно организовать так, чтобы очередной D-i возвращал не true/false, а к примеру 0..17?</div></div><br>
Посмотри моё решение на Хаскелле и вопрос отпадёт сам собой.<br>
<br>
<div class="tag-spoiler spoiler closed"><div class="spoiler_header" onclick="openCloseParent(this)">Подсказка</div><div class="body"><br>
Все процессы и проверки возвращают число: адрес следующего шага (state).<br>
<br>
<table class='post_table tag-table'><tr><th>State</th><th>Name</th><th>Return State</th></tr><tr><td>0</td><td>Stop</td><td>0</td></tr><tr><td>1</td><td>Process 1</td><td>5</td></tr><tr><td>2</td><td>Process 2</td><td>6</td></tr><tr><td>3</td><td>Process 3</td><td>7</td></tr><tr><td>4</td><td>Process 4</td><td>5</td></tr><tr><td>5</td><td>Decision 1</td><td>4|3</td></tr><tr><td>6</td><td>Decision 2</td><td>3|4</td></tr><tr><td>7</td><td>Decision 3</td><td>2|1</td></tr><tr><td>8</td><td>Decision 4</td><td>0|2</td></tr></table><br>
</div></div>]]></description>
        <author>korvin</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876382</guid>
        <pubDate>Sun, 18 Sep 2022 09:37:43 +0000</pubDate>
        <title>Сохранение и восстановление состояния обработки</title>
        <link>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876382</link>
        <description><![CDATA[Majestio: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876374'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>D_KEY &#064; <time class="tag-quote__quoted-time" datetime="2022-09-18T07:36:46+00:00">18.09.22, 07:36</time></span><div class='quote '>Кажется, у вас тут зарождается интересный спор.</div></div><br>
Он тлеет ... и я вот думаю, подбросить дровишек или нет ... И больше думаю &quot;да&quot; :lol:<br>
<br>
<strong class='tag-b'><span class='tag-size' data-value='14' style='font-size:14pt;'>Смотрите какой вопрос</span></strong><br>
<br>
Приблизительно все наши решения сводились к таблице состояний и переходов вида:<br>
<br>
<table class='post_table tag-table'><tr><th>State</th><th>Process</th><th>Descision</th><th>Jump Yes</th><th>Jump No</th></tr><tr><td>1</td><td>P-1</td><td>D-1</td><td>J-11</td><td>J-12</td></tr><tr><td>2</td><td>P-2</td><td>D-2</td><td>J-21</td><td>J-22</td></tr><tr><td>...</td><td>...</td><td>...</td><td>...</td><td>...</td></tr><tr><td>n</td><td>P-n</td><td>D-n</td><td>J-n1</td><td>J-n2</td></tr></table><br>
<ol class="tag-list" type="1"><li>Если вдруг нам нужен безусловный переход, тогда мы в D-i всегда возвращаем true, и всегда будем прыгать в J-i1 (ну или false и J-i2), вопросов нет</li><li>Если вдруг нам понадобится использовать P-i в нескольких местах, тоже проблем нет - просто в таблице переходов P-i будет повторяться, опять вопросов нет</li></ol><br>
<strong class='tag-b'>Вопрос:</strong> а что делать, если вдруг, по каким-то соображениям, нам нужно организовать так, чтобы очередной D-i возвращал не true/false, а к примеру 0..17? Блок-схему алгоритма пересматривать, таблицу переходов модернизировать? Или что-то еще ... Ваши соображения? :rolleyes:]]></description>
        <author>Majestio</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876374</guid>
        <pubDate>Sun, 18 Sep 2022 07:36:46 +0000</pubDate>
        <title>Сохранение и восстановление состояния обработки</title>
        <link>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876374</link>
        <description><![CDATA[D_KEY: Эх. Надо будет хоть ваши варианты посмотреть как-нибудь, раз сам слился :)<br><br>Кажется, у вас тут зарождается интересный спор.]]></description>
        <author>D_KEY</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876369</guid>
        <pubDate>Sun, 18 Sep 2022 04:52:20 +0000</pubDate>
        <title>Сохранение и восстановление состояния обработки</title>
        <link>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876369</link>
        <description><![CDATA[korvin: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876364'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2022-09-17T23:31:03+00:00">17.09.22, 23:31</time></span><div class='quote '>Я вот где-то видел универсальный автомат на шаблонах, который параметризировался переходами и действиями, реализованными функторами.</div></div><br>
Э-м… Так переходы и действия составляют 99% логики, что там в универсальной части? Цикл for?<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876365'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2022-09-17T23:42:57+00:00">17.09.22, 23:42</time></span><div class='quote '>я не знаю - что надо взять чтоб отжирать 90% ресурсов ))</div></div><br>
Думаю, Qraizer имел в виду, что из всех ресурсов, потребляемых программой, 90% будут составлять накладные расходы на фреймворк.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876363'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2022-09-17T21:55:15+00:00">17.09.22, 21:55</time></span><div class='quote '>они будут изолированы, и представлять собой конечную сущность</div></div><br>
Не полностью: при добавлении нового процесса в твоём примере нужно будет:<br>
<br>
1) новый процесс прописать в каком-то decision&#39;e (откуда он должен будет запускаться)<br>
Типа<br>
– был decision3Handler -&gt; if true then Process2.Name …<br>
– должен стать decision3Handler -&gt; if true then Process100.Name …<br>
<br>
2) старый процесс ( Process2.Name ) прописать куда-то в новое место<br>
И так далее, пока цепь не замкнётся.<br>
<br>
3) зарегистрировать новый процесс и decisionHandler в ProcessContext.<br>
<br>
4) Поправить тесты изменённых decision&#39;ов.<br>
<br>
Итого из-за добавления одного процесса нужно править кучу классов. А как же <strong class='tag-b'>S</strong><span class="tag-color tag-color-named" data-value="gray" style="color: gray">OLID</span>?<br>
<br>
В наших же, с Majestio, примерах нужно править только один/два «класса» — switch-case и словарь «лямбд». И добавить тесты для новой лямбды (править тесты других decision&#39;ов не нужно)<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876363'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2022-09-17T21:55:15+00:00">17.09.22, 21:55</time></span><div class='quote '>их можно оттестировать по отдельности например</div></div><br>
Функции (лямбды) также прекрасно тестируются по-отдельности.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876363'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2022-09-17T21:55:15+00:00">17.09.22, 21:55</time></span><div class='quote '>Плюс лямбды твои, они у тебя гвоздями прибиты к переменной, объявленной в функции main -&gt; A, а это очень херово.</div></div><br>
А если лямбды вынести из main в namespace challenge, будет менее херово?]]></description>
        <author>korvin</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876367</guid>
        <pubDate>Sun, 18 Sep 2022 00:33:24 +0000</pubDate>
        <title>Сохранение и восстановление состояния обработки</title>
        <link>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876367</link>
        <description><![CDATA[Majestio: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876363'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2022-09-17T21:55:15+00:00">17.09.22, 21:55</time></span><div class='quote '>представь что 100 человек написало по 1 классу</div></div><br>
Представь что 100 человек написало по 1-й лямбде :P <br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876363'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2022-09-17T21:55:15+00:00">17.09.22, 21:55</time></span><div class='quote '>Плюс лямбды твои, они у тебя гвоздями прибиты к переменной, объявленной в функции main -&gt; A, а это очень херово.</div></div><br>
А в лямбду можно еще параметры передавать :P а видимость всего внешнего запретить. А можно вообще функциями оформить. Но мне однострочные лямбды кажутся красивее однострочных функций.]]></description>
        <author>Majestio</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876365</guid>
        <pubDate>Sat, 17 Sep 2022 23:42:57 +0000</pubDate>
        <title>Сохранение и восстановление состояния обработки</title>
        <link>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876365</link>
        <description><![CDATA[Wound: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876364'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2022-09-17T23:31:03+00:00">17.09.22, 23:31</time></span><div class='quote '>Ну подумаешь, фрейморк будет отжирать 90% ресурсов. </div></div><br>
Не будет. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2022-09-17T23:44:35+00:00">17.09.22, 23:44</time></span></span><br>
Хотя если под какие нибудь микроконтроллеры програмить, то там да - наверно надо за памятью следить. Просто с текущими тенденциями, я не знаю - что надо взять чтоб отжирать 90% ресурсов ))]]></description>
        <author>Wound</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876364</guid>
        <pubDate>Sat, 17 Sep 2022 23:31:03 +0000</pubDate>
        <title>Сохранение и восстановление состояния обработки</title>
        <link>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876364</link>
        <description><![CDATA[Qraizer: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876356'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2022-09-17T21:32:21+00:00">17.09.22, 21:32</time></span><div class='quote '><div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876354'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2022-09-17T21:28:26+00:00">17.09.22, 21:28</time></span><div class='quote '>конечный автомат</div></div><br>
Гм, тогда к чему было:<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876299'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2022-09-16T23:42:13+00:00">16.09.22, 23:42</time></span><div class='quote '>кажись, я слегка погорячился, прованговав всем известный паттерн.</div></div><br>
?</div></div>Я большей частью имел в виду хранение состояния через сериализацию. Как оно у кого будет реализовано, как бы без разницы. Я вот думал забабахать boost:serialisation, шоб вам тут мёдом не. :rolleyes: <br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876356'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2022-09-17T21:32:21+00:00">17.09.22, 21:32</time></span><div class='quote '>Или ты про <a class='tag-url' href='https://en.wikipedia.org/wiki/State_pattern' target='_blank'>конкретно этот паттерн</a>?</div></div><br>
Ну да, он самый. Но вот как раз он у вас более-менее везде в той или иной форме. Опять же, какая разница, как его реализовывать. Нравится на switch(), та на здоровье, кому-то приспичило лямбдами его зарядить и переприсваивать их mainLoop, заодно лямбдами же и предикаты переходов оформить, тазарадибога.<br>
Я вот где-то видел универсальный автомат на шаблонах, который параметризировался переходами и действиями, реализованными функторами. Формально, весь автомат метакодируется ещё при компиляции. Думал порыскать по инету и применить у себя. То-то было бы весело сравнить с коленовелосипедными.<br>
Как я и говорил, для серьёзных задач всё это самое то, но для простых процессов накладные не оправдают расходы. Зато без goto, да. Круто, чё. Ну подумаешь, фрейморк будет отжирать 90% ресурсов.]]></description>
        <author>Qraizer</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876363</guid>
        <pubDate>Sat, 17 Sep 2022 21:55:15 +0000</pubDate>
        <title>Сохранение и восстановление состояния обработки</title>
        <link>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876363</link>
        <description><![CDATA[Wound: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876362'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Majestio &#064; <time class="tag-quote__quoted-time" datetime="2022-09-17T21:51:18+00:00">17.09.22, 21:51</time></span><div class='quote '>Не, ну можно 100 классов объявить вместо лямбд, как два пальца об асфальт ;)</div></div><br>
Фишка в том, что даже если будут 100 классов - они будут изолированы, и представлять собой конечную сущность, их можно оттестировать по отдельности например, представь что 100 человек написало по 1 классу. А с лямбдами сложнее выходит. Плюс лямбды твои, они у тебя гвоздями прибиты к переменной, объявленной в функции main -&gt; A, а это очень херово. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2022-09-17T22:05:12+00:00">17.09.22, 22:05</time></span></span><br>
Короче как по мне - даже первый твой вариант без GOTO, выигрывает по всем параметрам второй варинт с GOTO. И по читабельности кода, и по сопровождению. Потому что первый вариант можно и оттестировать, и расшрить без особых проблем. Второй вариант(который на лямбдах) - как по мне трешак, который придется полностью переписывать, если чуть условия усложнить.]]></description>
        <author>Wound</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876362</guid>
        <pubDate>Sat, 17 Sep 2022 21:51:18 +0000</pubDate>
        <title>Сохранение и восстановление состояния обработки</title>
        <link>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876362</link>
        <description><![CDATA[Majestio: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876361'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2022-09-17T21:48:54+00:00">17.09.22, 21:48</time></span><div class='quote '>Именно, оно уже выглядит пугающим. Когда там будет 100 лямбд - то уже будет на что посмотреть.</div></div><br>
Не, ну можно 100 классов объявить вместо лямбд, как два пальца об асфальт ;)]]></description>
        <author>Majestio</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876361</guid>
        <pubDate>Sat, 17 Sep 2022 21:48:54 +0000</pubDate>
        <title>Сохранение и восстановление состояния обработки</title>
        <link>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876361</link>
        <description><![CDATA[Wound: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876360'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Majestio &#064; <time class="tag-quote__quoted-time" datetime="2022-09-17T21:43:46+00:00">17.09.22, 21:43</time></span><div class='quote '>На одно распухание: 2 лямбды + 1 пара значений в таблицу переходов :rolleyes:</div></div><br>
Именно, оно уже выглядит пугающим. Когда там будет 100 лямбд - то уже будет на что посмотреть.]]></description>
        <author>Wound</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876360</guid>
        <pubDate>Sat, 17 Sep 2022 21:43:46 +0000</pubDate>
        <title>Сохранение и восстановление состояния обработки</title>
        <link>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876360</link>
        <description><![CDATA[Majestio: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876359'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2022-09-17T21:36:55+00:00">17.09.22, 21:36</time></span><div class='quote '>Я хочу посмотреть как распухнут твои исходники на плюсах.</div></div><br>
На одно распухание: 2 лямбды + 1 пара значений в таблицу переходов  :rolleyes: <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2022-09-17T21:44:19+00:00">17.09.22, 21:44</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876359'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2022-09-17T21:36:55+00:00">17.09.22, 21:36</time></span><div class='quote '>Я почти неделю ждал решения на goto, чтоб его обосрать и где оно? </div></div> <br>
Прости&#33;&#33;&#33; :lool:]]></description>
        <author>Majestio</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876359</guid>
        <pubDate>Sat, 17 Sep 2022 21:36:55 +0000</pubDate>
        <title>Сохранение и восстановление состояния обработки</title>
        <link>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876359</link>
        <description><![CDATA[Wound: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876358'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Majestio &#064; <time class="tag-quote__quoted-time" datetime="2022-09-17T21:34:42+00:00">17.09.22, 21:34</time></span><div class='quote '>А вот при постановке задачи &quot;пересчеты-с-сохранением&quot; - многовложенные циклы в 17 раз хуже использования прекрасного оператора GOTO :rolleyes:</div></div><br>
Ты нигде его не использовал свой goto. Твой ивент - профанация. Я почти неделю ждал решения на goto, чтоб его обосрать и где оно? Только <strong class='tag-b'>korvin</strong>, то что у тебя на языке было, написал сегодня или вчера кодом. И все.<br>
Короче blah-blah-blah... goto, goto, и где он этот goto в твоих исходниках? Я не вижу его. &lt;_&lt; <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2022-09-17T21:39:42+00:00">17.09.22, 21:39</time></span></span><br>
Я тебе больше скажу - давай расширим ивент до 50 процессов. Только мне лень придумывать им решения. Я хочу посмотреть как распухнут твои исходники на плюсах.]]></description>
        <author>Wound</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876358</guid>
        <pubDate>Sat, 17 Sep 2022 21:34:42 +0000</pubDate>
        <title>Сохранение и восстановление состояния обработки</title>
        <link>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876358</link>
        <description><![CDATA[Majestio: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876354'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2022-09-17T21:28:26+00:00">17.09.22, 21:28</time></span><div class='quote '>Ну тогда и я вскроюсь. В главном цикле приложения: конечный автомат для решений и переходов + сериализация для хранения состояний. Сохранение/восстановление тоже состояния автомата. Всё.</div></div><br>
Да, у всех один и тот же подход. А вот при постановке задачи &quot;пересчеты-с-сохранением&quot; - многовложенные циклы в 17 раз хуже использования прекрасного оператора GOTO :rolleyes:]]></description>
        <author>Majestio</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876357</guid>
        <pubDate>Sat, 17 Sep 2022 21:33:30 +0000</pubDate>
        <title>Сохранение и восстановление состояния обработки</title>
        <link>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876357</link>
        <description><![CDATA[Wound: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876356'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2022-09-17T21:32:21+00:00">17.09.22, 21:32</time></span><div class='quote '>Или ты про конкретно этот паттерн? </div></div><br>
Скорее он про switch в цикле, ИМХО. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2022-09-17T21:34:08+00:00">17.09.22, 21:34</time></span></span><br>
Я так предполагаю что то типа этого: <a class='tag-url' href='http://www.devexp.ru/2011/02/konechnye-avtomaty-v-c/' target='_blank'>http://www.devexp.ru/2011/02/konechnye-avtomaty-v-c/</a><br>
Хотя могу ошибаться. В плюсах я только про такие автоматы слышал.]]></description>
        <author>Wound</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876356</guid>
        <pubDate>Sat, 17 Sep 2022 21:32:21 +0000</pubDate>
        <title>Сохранение и восстановление состояния обработки</title>
        <link>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876356</link>
        <description><![CDATA[korvin: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876354'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2022-09-17T21:28:26+00:00">17.09.22, 21:28</time></span><div class='quote '>конечный автомат</div></div><br>
Гм, тогда к чему было:<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876299'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2022-09-16T23:42:13+00:00">16.09.22, 23:42</time></span><div class='quote '>кажись, я слегка погорячился, прованговав всем известный паттерн.</div></div><br>
?<br>
<br>
Или ты про <a class='tag-url' href='https://en.wikipedia.org/wiki/State_pattern' target='_blank'>конкретно этот паттерн</a>?]]></description>
        <author>korvin</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876355</guid>
        <pubDate>Sat, 17 Sep 2022 21:32:12 +0000</pubDate>
        <title>Сохранение и восстановление состояния обработки</title>
        <link>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876355</link>
        <description><![CDATA[Majestio: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876353'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2022-09-17T21:17:13+00:00">17.09.22, 21:17</time></span><div class='quote '>Видишь, ты даже в синтетической задаче не нашел применение этому оператору.</div></div><br>
Ну в моем первом варианте - использование <strong class='tag-b'>switch-case</strong> только это маскирует формально, а по сути - тот же <strong class='tag-b'>if-goto</strong>, только вид сбоку :rolleyes:]]></description>
        <author>Majestio</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876354</guid>
        <pubDate>Sat, 17 Sep 2022 21:28:26 +0000</pubDate>
        <title>Сохранение и восстановление состояния обработки</title>
        <link>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876354</link>
        <description><![CDATA[Qraizer: Ну тогда и я вскроюсь. В главном цикле приложения: конечный автомат для решений и переходов + сериализация для хранения состояний. Сохранение/восстановление тоже состояния автомата. Всё.]]></description>
        <author>Qraizer</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876353</guid>
        <pubDate>Sat, 17 Sep 2022 21:17:13 +0000</pubDate>
        <title>Сохранение и восстановление состояния обработки</title>
        <link>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876353</link>
        <description><![CDATA[Wound: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876350'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Majestio &#064; <time class="tag-quote__quoted-time" datetime="2022-09-17T21:01:17+00:00">17.09.22, 21:01</time></span><div class='quote '>label: if (true == false) goto label;</div></div><br>
:bad: <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2022-09-17T21:20:38+00:00">17.09.22, 21:20</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876350'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Majestio &#064; <time class="tag-quote__quoted-time" datetime="2022-09-17T21:01:17+00:00">17.09.22, 21:01</time></span><div class='quote '>Вариант 1 (С++, без GOTO)</div></div><br>
Видишь, ты даже в синтетической задаче не нашел применение этому оператору.]]></description>
        <author>Wound</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876352</guid>
        <pubDate>Sat, 17 Sep 2022 21:15:28 +0000</pubDate>
        <title>Сохранение и восстановление состояния обработки</title>
        <link>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876352</link>
        <description><![CDATA[korvin: <div class="tag-spoiler spoiler closed"><div class="spoiler_header" onclick="openCloseParent(this)">Ocaml #1</div><div class="body"><br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">module Memory =</div><div class="code_line">&nbsp;&nbsp;struct</div><div class="code_line">&nbsp;&nbsp; &nbsp;type cells = int array</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;let size = 4</div><div class="code_line">&nbsp;&nbsp; &nbsp;let alloc () = Array.make size 0</div><div class="code_line">&nbsp;&nbsp;end</div><div class="code_line">&nbsp;</div><div class="code_line">module type CPU =</div><div class="code_line">&nbsp;&nbsp;sig</div><div class="code_line">&nbsp;&nbsp; &nbsp;type process = Memory.cells -&#62; unit</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;val process_1 : process</div><div class="code_line">&nbsp;&nbsp; &nbsp;val process_2 : process</div><div class="code_line">&nbsp;&nbsp; &nbsp;val process_3 : process</div><div class="code_line">&nbsp;&nbsp; &nbsp;val process_4 : process</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;type decision = Memory.cells -&#62; bool</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;val decision_1 : decision</div><div class="code_line">&nbsp;&nbsp; &nbsp;val decision_2 : decision</div><div class="code_line">&nbsp;&nbsp; &nbsp;val decision_3 : decision</div><div class="code_line">&nbsp;&nbsp; &nbsp;val decision_4 : decision</div><div class="code_line">&nbsp;&nbsp;end</div><div class="code_line">&nbsp;</div><div class="code_line">module Machine (CPU : CPU) =</div><div class="code_line">&nbsp;&nbsp;struct</div><div class="code_line">&nbsp;&nbsp; &nbsp;open CPU</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;type cpu_state =</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;| Process_1</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;| Process_2</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;| Process_3</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;| Process_4</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;| Stop</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;type machine =</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;{ mutable cpu_state &nbsp; : cpu_state</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;; mutable cpu_counter : int</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;; &nbsp; &nbsp; &nbsp; &nbsp; memory &nbsp; &nbsp; &nbsp;: Memory.cells }</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;let new_machine ?(cpu_state=Process_1) ?(cpu_counter=0) ?(memory_init=[||]) () =</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;let memory = Memory.alloc () in</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;for i = 0 to min (Memory.size - 1) (Array.length memory_init - 1) do</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;memory.(i) &#60;- memory_init.(i)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;done ;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;{ cpu_state &nbsp; = cpu_state</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;; cpu_counter = cpu_counter</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;; memory &nbsp; &nbsp; &nbsp;= memory }</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;let cpu process machine =</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;process machine.memory ;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;{ machine with cpu_counter = machine.cpu_counter + 1 }</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;let branch decision machine =</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;(machine, decision machine.memory)</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;let yes y ~no (machine, flag) =</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;{ machine with cpu_state = if flag then y else no }</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;let ( ==&#62; ) = ( |&#62; )</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;let rec run machine =</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;describe machine ;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;match machine.cpu_state with</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;| Process_1 -&#62; machine ==&#62; cpu process_1 ==&#62; branch decision_1 ==&#62; yes Process_4 ~no: Process_3 ==&#62; run</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;| Process_2 -&#62; machine ==&#62; cpu process_2 ==&#62; branch decision_2 ==&#62; yes Process_3 ~no: Process_4 ==&#62; run</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;| Process_3 -&#62; machine ==&#62; cpu process_3 ==&#62; branch decision_3 ==&#62; yes Process_2 ~no: Process_1 ==&#62; run</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;| Process_4 -&#62; machine ==&#62; cpu process_4 ==&#62; branch decision_4 ==&#62; yes Stop &nbsp; &nbsp; &nbsp;~no: Process_2 ==&#62; run</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;| Stop &nbsp; &nbsp; &nbsp;-&#62; ()</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;and describe { cpu_state ; cpu_counter ; memory } =</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Printf.printf &quot;Step: %2d &nbsp; &nbsp;%-8s %s\n&quot; cpu_counter (state_string cpu_state) (mem_string memory)</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;and state_string state =</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;match state with</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;| Process_1 -&#62; &quot;Proc: 1&quot;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;| Process_2 -&#62; &quot;Proc: 2&quot;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;| Process_3 -&#62; &quot;Proc: 3&quot;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;| Process_4 -&#62; &quot;Proc: 4&quot;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;| Stop &nbsp; &nbsp; &nbsp;-&#62; &quot;Stop &nbsp; &quot;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;and mem_string mem =</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;let str &nbsp;= ref &quot;&quot; in</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;for i = 0 to Memory.size - 1 do</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;str := !str ^ Printf.sprintf &quot; %3d&quot; mem.(i)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;done ;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;!str</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;end</div><div class="code_line">&nbsp;</div><div class="code_line">module Majestio_CPU : CPU =</div><div class="code_line">&nbsp;&nbsp;struct</div><div class="code_line">&nbsp;&nbsp; &nbsp;type process = Memory.cells -&#62; unit</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;let process_1 mem =</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;mem.(0) &#60;- mem.(0) + 1</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;let process_2 mem =</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;mem.(1) &#60;- mem.(1) + mem.(3) + 1</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;let process_3 mem =</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;let sum_0_1 = mem.(0) + mem.(1) in</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if sum_0_1 mod 3 &#60;&#62; 0 then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mem.(2) &#60;- mem.(2) + 7</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;let process_4 mem =</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;let sum_0_2 = mem.(0) + mem.(2) in</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if sum_0_2 mod 5 &#60;&#62; 4 then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mem.(3) &#60;- mem.(3) + 1</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;type decision = Memory.cells -&#62; bool</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;let sum = Array.fold_left (+) 0</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;let decision_1 mem =</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;sum mem mod 2 = 0</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;let decision_2 mem =</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;sum mem mod 7 &#62; 0</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;let decision_3 mem =</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;let is_even x = x mod 2 = 0 in</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Array.for_all is_even mem</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;let decision_4 mem =</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;sum mem &#62; 24</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;end</div><div class="code_line">&nbsp;</div><div class="code_line">let main () =</div><div class="code_line">&nbsp;&nbsp;let module M = Machine (Majestio_CPU) in</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;M.new_machine () |&#62; M.run ;</div><div class="code_line">&nbsp;&nbsp;print_endline &quot;----------------------------------------------------------------&quot; ;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;M.new_machine</div><div class="code_line">&nbsp;&nbsp; &nbsp;~cpu_state: &nbsp; M.Process_4</div><div class="code_line">&nbsp;&nbsp; &nbsp;~cpu_counter: 9</div><div class="code_line">&nbsp;&nbsp; &nbsp;~memory_init: [| 3; 3; 14; 1 |]</div><div class="code_line">&nbsp;&nbsp; &nbsp;() |&#62; M.run ;</div><div class="code_line">&nbsp;&nbsp;print_endline &quot;----------------------------------------------------------------&quot;</div><div class="code_line">&nbsp;</div><div class="code_line">let () = main ()</div></ol></div></div></div></div><br>
— <a class='tag-url' href='https://rextester.com/YFHF41308' target='_blank'>https://rextester.com/YFHF41308</a><br>
</div></div><br>
<br>
<div class="tag-spoiler spoiler closed"><div class="spoiler_header" onclick="openCloseParent(this)">Ocaml #2</div><div class="body"><br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">module type Machine =</div><div class="code_line">&nbsp;&nbsp;sig</div><div class="code_line">&nbsp;&nbsp; &nbsp;type data = int array</div><div class="code_line">&nbsp;&nbsp; &nbsp;val init : ?data:data -&#62; unit -&#62; unit</div><div class="code_line">&nbsp;&nbsp; &nbsp;val dump : unit -&#62; data</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;type process = unit -&#62; unit</div><div class="code_line">&nbsp;&nbsp; &nbsp;val process_1 : process</div><div class="code_line">&nbsp;&nbsp; &nbsp;val process_2 : process</div><div class="code_line">&nbsp;&nbsp; &nbsp;val process_3 : process</div><div class="code_line">&nbsp;&nbsp; &nbsp;val process_4 : process</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;type decision = unit -&#62; bool</div><div class="code_line">&nbsp;&nbsp; &nbsp;val decision_1 : decision</div><div class="code_line">&nbsp;&nbsp; &nbsp;val decision_2 : decision</div><div class="code_line">&nbsp;&nbsp; &nbsp;val decision_3 : decision</div><div class="code_line">&nbsp;&nbsp; &nbsp;val decision_4 : decision</div><div class="code_line">&nbsp;&nbsp;end</div><div class="code_line">&nbsp;</div><div class="code_line">module Program (M : Machine) =</div><div class="code_line">&nbsp;&nbsp;struct</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;type state =</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;| Proc_1</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;| Proc_2</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;| Proc_3</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;| Proc_4</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;| Stop</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;let ( --&#62; ) = ( |&#62; )</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;let yes y ~no:n decision = if decision then y else n</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;let rec run count state =</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;log_state count state ;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;let loop = run (count + 1) in</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;match state with</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;| Proc_1 -&#62; () --&#62; M.process_1 --&#62; M.decision_1 --&#62; yes Proc_4 ~no:Proc_3 --&#62; loop</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;| Proc_2 -&#62; () --&#62; M.process_2 --&#62; M.decision_2 --&#62; yes Proc_3 ~no:Proc_4 --&#62; loop</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;| Proc_3 -&#62; () --&#62; M.process_3 --&#62; M.decision_3 --&#62; yes Proc_2 ~no:Proc_1 --&#62; loop</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;| Proc_4 -&#62; () --&#62; M.process_4 --&#62; M.decision_4 --&#62; yes Stop &nbsp; ~no:Proc_2 --&#62; loop</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;| Stop &nbsp; -&#62; ()</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;and log_state count state =</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;let data = M.dump () in</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Printf.printf &quot;Step: %2d &nbsp; %s &nbsp; %s\n&quot; count (state_string state) (data_string data)</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;and state_string s =</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;match s with</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;| Proc_1 -&#62; &quot;Process 1&quot;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;| Proc_2 -&#62; &quot;Process 2&quot;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;| Proc_3 -&#62; &quot;Process 3&quot;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;| Proc_4 -&#62; &quot;Process 4&quot;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;| Stop &nbsp; -&#62; &quot;Stop &nbsp; &nbsp; &quot;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;and data_string data =</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;data --&#62; Array.map (Printf.sprintf &quot; %2d&quot;) --&#62; Array.to_list --&#62; String.concat &quot; &quot;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;end</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">module Majestio_machine : Machine =</div><div class="code_line">&nbsp;&nbsp;struct</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;let size = 4</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;let cell = Array.make size 0</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;type data = int array</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;let init ?(data=[||]) () =</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;let n = min size (Array.length data) in</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if n = 0</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;then Array.fill cell 0 size 0</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;else Array.blit data 0 cell 0 n</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;let dump () = Array.copy cell</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;type process = unit -&#62; unit</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;let process_1 () =</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;cell.(0) &#60;- cell.(0) + 1</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;let process_2 () =</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;cell.(1) &#60;- cell.(1) + cell.(3) + 1</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;let process_3 () =</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;let sum_0_1 = cell.(0) + cell.(1) in</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if sum_0_1 mod 3 &#60;&#62; 0 then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;cell.(2) &#60;- cell.(2) + 7</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;let process_4 () =</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;let sum_0_2 = cell.(0) + cell.(2) in</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if sum_0_2 mod 5 &#60;&#62; 4 then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;cell.(3) &#60;- cell.(3) + 1</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;type decision = unit -&#62; bool</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;let sum = Array.fold_left (+) 0</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;let decision_1 () = sum cell mod 2 = 0</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;let decision_2 () = sum cell mod 7 &#62; 0</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;let decision_3 () =</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;let is_even x = x mod 2 = 0 in</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Array.for_all is_even cell</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;let decision_4 () = sum cell &#62; 24</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;end</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">let main () =</div><div class="code_line">&nbsp;&nbsp;let module Machine = Majestio_machine in</div><div class="code_line">&nbsp;&nbsp;let module Program = Program (Machine) in</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;Machine.init () ;</div><div class="code_line">&nbsp;&nbsp;Program.run 1 Program.Proc_1 ;</div><div class="code_line">&nbsp;&nbsp;print_endline &quot;----------------------------------------------------------------&quot; ;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;Machine.init ~data:[| 3; 3; 14; 1 |] () ;</div><div class="code_line">&nbsp;&nbsp;Program.run 9 Program.Proc_4 ;</div><div class="code_line">&nbsp;&nbsp;print_endline &quot;----------------------------------------------------------------&quot; ;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;print_endline &quot;done&quot;</div><div class="code_line">&nbsp;</div><div class="code_line">let () = main ()</div></ol></div></div></div></div><br>
— <a class='tag-url' href='https://rextester.com/WPDD51431' target='_blank'>https://rextester.com/WPDD51431</a><br>
</div></div><br>
<br>
<div class="tag-spoiler spoiler closed"><div class="spoiler_header" onclick="openCloseParent(this)">Ocaml #3</div><div class="body"><br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">module Machine =</div><div class="code_line">&nbsp;&nbsp;struct</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;type memory &nbsp; = int array</div><div class="code_line">&nbsp;&nbsp; &nbsp;type process &nbsp;= memory -&#62; unit</div><div class="code_line">&nbsp;&nbsp; &nbsp;type decision = memory -&#62; bool</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;type cpu =</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;{ processes : process array</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;; decisions : decision array }</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;type program = (int * int * int) array</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;let majestio : program = [|</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;1, 4, 3;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;2, 3, 4;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;3, 2, 1;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;4, 5, 2</div><div class="code_line">&nbsp;&nbsp; &nbsp;|]</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;let rec run ?(count = 0) ?(proc = 1) cpu mem program =</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;log_state count proc mem ;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;let proc = proc - 1 in</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if 0 &#60;= proc &amp;&amp; proc &#60; Array.length program then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;let dec, yes, no = program .(proc) &nbsp; &nbsp; &nbsp; in</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;let process &nbsp; &nbsp; &nbsp;= cpu.processes.(proc) &nbsp;in</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;let decision &nbsp; &nbsp; = cpu.decisions.(dec-1) in</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;process mem ;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;let next = if decision mem then yes else no in</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;run ~count:(count+1) ~proc:next cpu mem program</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;and log_state count process mem =</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;let mem = mem |&#62; Array.map (Printf.sprintf &quot;%2d&quot;) |&#62; Array.to_list |&#62; String.concat &quot; &quot;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;in Printf.printf &quot;Step: %2d &nbsp; Proc: %d &nbsp; %s\n&quot; count process mem</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;end</div><div class="code_line">&nbsp;</div><div class="code_line">module Majestio =</div><div class="code_line">&nbsp;&nbsp;struct</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;let process_1 cell =</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;cell.(0) &#60;- cell.(0) + 1</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;let process_2 cell =</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;cell.(1) &#60;- cell.(1) + cell.(3) + 1</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;let process_3 cell =</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;let sum_0_1 = cell.(0) + cell.(1) in</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if sum_0_1 mod 3 &#60;&#62; 0 then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;cell.(2) &#60;- cell.(2) + 7</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;let process_4 cell =</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;let sum_0_2 = cell.(0) + cell.(2) in</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if sum_0_2 mod 5 &#60;&#62; 4 then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;cell.(3) &#60;- cell.(3) + 1</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;let sum = Array.fold_left (+) 0</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;let decision_1 cell = sum cell mod 2 = 0</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;let decision_2 cell = sum cell mod 7 &#62; 0</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;let decision_3 cell =</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;let is_even x = x mod 2 = 0 in</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Array.for_all is_even cell</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;let decision_4 cell = sum cell &#62; 24</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;let cpu =</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;{ Machine.</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;processes =</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;[|</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;process_1;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;process_2;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;process_3;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;process_4</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;|]</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;; decisions =</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;[|</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;decision_1;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;decision_2;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;decision_3;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;decision_4</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;|]</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;let program =</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;[|</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; 1, 4, 3;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; 2, 3, 4;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; 3, 2, 1;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; 4, 5, 2</div><div class="code_line">&nbsp;&nbsp; &nbsp; |]</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;end</div><div class="code_line">&nbsp;</div><div class="code_line">let main () =</div><div class="code_line">&nbsp;&nbsp;Machine.run Majestio.cpu [| 0; 0; 0; 0 |] Majestio.program ;</div><div class="code_line">&nbsp;&nbsp;print_endline &quot;----------------------------------------------------------------&quot; ;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;Machine.run ~count:9 ~proc:4 Majestio.cpu [| 3; 3; 14; 1 |] Majestio.program ;</div><div class="code_line">&nbsp;&nbsp;print_endline &quot;----------------------------------------------------------------&quot;</div><div class="code_line">&nbsp;</div><div class="code_line">let () = main ()</div></ol></div></div></div></div><br>
— <a class='tag-url' href='https://rextester.com/ARZ32340' target='_blank'>https://rextester.com/ARZ32340</a><br>
</div></div><br>
<br>
<div class="tag-spoiler spoiler closed"><div class="spoiler_header" onclick="openCloseParent(this)">Racket</div><div class="body"><br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">#lang racket</div><div class="code_line">&nbsp;</div><div class="code_line">(define (sum v)</div><div class="code_line">&nbsp;&nbsp;(for/sum ((x (in-vector v))) x))</div><div class="code_line">&nbsp;</div><div class="code_line">(define (cell c1 c2 c3 c4)</div><div class="code_line">&nbsp;&nbsp;(vector c1 c2 c3 c4))</div><div class="code_line">&nbsp;</div><div class="code_line">(define (mod x y)</div><div class="code_line">&nbsp;&nbsp;(remainder x y))</div><div class="code_line">&nbsp;</div><div class="code_line">(define (div-by? n v)</div><div class="code_line">&nbsp;&nbsp;(zero? (mod v n)))</div><div class="code_line">&nbsp;</div><div class="code_line">(define (all v predicate?)</div><div class="code_line">&nbsp;&nbsp;(for/and ((x (in-vector v)))</div><div class="code_line">&nbsp;&nbsp; &nbsp;(predicate? x)))</div><div class="code_line">&nbsp;</div><div class="code_line">(define (are-even? x)</div><div class="code_line">&nbsp;&nbsp;(zero? (mod x 2)))</div><div class="code_line">&nbsp;</div><div class="code_line">(define (f l n #:left? (left? #f))</div><div class="code_line">&nbsp;&nbsp;(let* ((s (format &quot;~a&quot; n))</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; (m (string-length s)))</div><div class="code_line">&nbsp;&nbsp; &nbsp;(cond ((&#62;= m l)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; s)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;(left?</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (string-append s (make-string (- l m) #\Space)))</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;(else</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (string-append (make-string (- l m) #\Space) s)))))</div><div class="code_line">&nbsp;</div><div class="code_line">(define-syntax-rule (state st) &#39;st)</div><div class="code_line">&nbsp;</div><div class="code_line">(define (counter c) c)</div><div class="code_line">&nbsp;</div><div class="code_line">(define-syntax define-machine</div><div class="code_line">&nbsp;&nbsp;(syntax-rules (state -&#62; -- &#60; &#62; yes no)</div><div class="code_line">&nbsp;&nbsp; &nbsp;((_ (name (counter counter-init) (state state-init) (cell c1 c2 c3 c4))</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{ -&#62; [ proc-in</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; action ]</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#60;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; post-cond</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-- yes -&#62; yes-proc-out</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-- no &nbsp;-&#62; no-proc-out }</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;...</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;)</div><div class="code_line">&nbsp;&nbsp; &nbsp; (define (name (counter counter-init) (state &#39;state-init) (cells #(c1 c2 c3 c4)))</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; (define cs (vector-copy cells))</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; (define-syntax cell</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; (syntax-rules (&#60;- -&#62;)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ((_) cs)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ((_ i) (vector-ref cs i))</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ((_ i &#60;- op . vs)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;(vector-set! cs i (op (cell i) . vs)))</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ((_ op -&#62; predicate?)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;(let ((op (op cs)))</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;predicate?))))</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; (define (proc-in)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; action</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; (if post-cond</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;yes-proc-out</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;no-proc-out))</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; ...</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; (let loop ((state state) (counter counter))</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; (printf &quot;Step: ~a &nbsp; ~a &nbsp;~a &nbsp;~a &nbsp;~a &nbsp;~a~n&quot;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (f 2 counter)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (f 10 state #:left? #t)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (f 2 (cell 0))</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (f 2 (cell 1))</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (f 2 (cell 2))</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (f 2 (cell 3)))</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; (case state</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ((proc-in) (loop (proc-in) (+ counter 1)))</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ...</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (else &#39;done)))))))</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">(define-machine (majestio-machine (counter 0) (state process-1) (cell 0 0 0 0))</div><div class="code_line">&nbsp;&nbsp;</div><div class="code_line">&nbsp;&nbsp;{ -&#62; [ process-1</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; (cell 0 &#60;- + 1) ]</div><div class="code_line">&nbsp;&nbsp; &nbsp;-&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &#60; (cell sum -&#62; (div-by? 2 sum)) &#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp;-- yes -&#62; process-4</div><div class="code_line">&nbsp;&nbsp; &nbsp;-- no &nbsp;-&#62; process-3 }</div><div class="code_line">&nbsp;&nbsp;</div><div class="code_line">&nbsp;&nbsp;{ -&#62; [ process-2</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; (cell 1 &#60;- + (cell 3) 1) ]</div><div class="code_line">&nbsp;&nbsp; &nbsp;-&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &#60; (cell sum -&#62; (positive? (mod sum 7))) &#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp;-- yes -&#62; process-3</div><div class="code_line">&nbsp;&nbsp; &nbsp;-- no &nbsp;-&#62; process-4 }</div><div class="code_line">&nbsp;&nbsp;</div><div class="code_line">&nbsp;&nbsp;{ -&#62; [ process-3</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; (unless (div-by? 3 (+ (cell 0) (cell 1)))</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (cell 2 &#60;- + 7)) ]</div><div class="code_line">&nbsp;&nbsp; &nbsp;-&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &#60; (all (cell) are-even?) &#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp;-- yes -&#62; process-2</div><div class="code_line">&nbsp;&nbsp; &nbsp;-- no &nbsp;-&#62; process-1 }</div><div class="code_line">&nbsp;&nbsp;</div><div class="code_line">&nbsp;&nbsp;{ -&#62; [ process-4</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; (let ((c0+c2 (+ (cell 0) (cell 2))))</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (unless (= (mod c0+c2 5) 4)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (cell 3 &#60;- + 1))) ]</div><div class="code_line">&nbsp;&nbsp; &nbsp;-&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &#60; (cell sum -&#62; (&#62; sum 24)) &#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp;-- yes -&#62; stop</div><div class="code_line">&nbsp;&nbsp; &nbsp;-- no &nbsp;-&#62; process-2 } )</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">(define (main)</div><div class="code_line">&nbsp;&nbsp;(majestio-machine)</div><div class="code_line">&nbsp;&nbsp;(displayln &quot;----------------------------------------------------------------&quot;)</div><div class="code_line">&nbsp;&nbsp;(majestio-machine (counter 9) (state process-4) (cell 3 3 14 1))</div><div class="code_line">&nbsp;&nbsp;(displayln &quot;----------------------------------------------------------------&quot;))</div><div class="code_line">&nbsp;</div><div class="code_line">(main)</div></ol></div></div></div></div><br>
— <a class='tag-url' href='https://onecompiler.com/racket/3ygbcbxe2' target='_blank'>https://onecompiler.com/racket/3ygbcbxe2</a><br>
</div></div><br>
<br>
<div class="tag-spoiler spoiler closed"><div class="spoiler_header" onclick="openCloseParent(this)">Haskell</div><div class="body"><br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">module Main (main) where</div><div class="code_line">&nbsp;</div><div class="code_line">main :: IO ()</div><div class="code_line">main = do</div><div class="code_line">&nbsp;&nbsp;machine (Run 0 Process 1 [0, 0, 0, 0])</div><div class="code_line">&nbsp;&nbsp;putStrLn &quot;----------------------------------------------------------------&quot;</div><div class="code_line">&nbsp;&nbsp;machine (Run 9 Process 4 [3, 3, 14, 1])</div><div class="code_line">&nbsp;&nbsp;putStrLn &quot;----------------------------------------------------------------&quot;</div><div class="code_line">&nbsp;</div><div class="code_line">----------------------------------------------------------------</div><div class="code_line">&nbsp;</div><div class="code_line">data CmdType = Process | Decision deriving (Show)</div><div class="code_line">type CmdAddr = Int</div><div class="code_line">type Counter = Int</div><div class="code_line">type Memory &nbsp;= [Int]</div><div class="code_line">&nbsp;</div><div class="code_line">data State</div><div class="code_line">&nbsp;&nbsp;= Run Counter CmdType CmdAddr Memory</div><div class="code_line">&nbsp;&nbsp;| Stop</div><div class="code_line">&nbsp;&nbsp;| Fail String</div><div class="code_line">&nbsp;</div><div class="code_line">instance Show State where</div><div class="code_line">&nbsp;&nbsp;show Stop = &quot;stop&quot;</div><div class="code_line">&nbsp;&nbsp;show (Fail err) = &quot;failure: &quot; ++ err</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;show (Run c Process i cells) =</div><div class="code_line">&nbsp;&nbsp; &nbsp;&quot;Step: &quot; ++ align2 c ++ &quot; &nbsp; &nbsp;Proc: &quot; ++ show i ++ &quot; &nbsp; &quot; ++ showCells cells</div><div class="code_line">&nbsp;&nbsp; &nbsp;where</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;showCells [] &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;= &quot;&quot;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;showCells (cell:rest) = &quot; &quot; ++ align2 cell ++ showCells rest</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;align2 n</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;| n &#60; 10 &nbsp; &nbsp; = &nbsp;&quot; &quot; ++ show n</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;| otherwise &nbsp;= &nbsp;show n</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;show (Run c t i cells) = &quot;Step &quot; ++ show c ++ &quot; &quot; ++ show t ++ &quot; &quot; ++ show i ++ &quot; &quot; ++ show cells</div><div class="code_line">&nbsp;</div><div class="code_line">----------------------------------------------------------------</div><div class="code_line">&nbsp;</div><div class="code_line">cpu :: State -&#62; State</div><div class="code_line">&nbsp;</div><div class="code_line">cpu (Run c Process 1 [c0, c1, c2, c3]) = Run (c+1) Decision 1 [c0+1, c1, c2, c3]</div><div class="code_line">&nbsp;</div><div class="code_line">cpu (Run c Decision 1 cells)</div><div class="code_line">&nbsp;&nbsp;| even (sum cells) &nbsp;= &nbsp;Run c Process 4 cells</div><div class="code_line">&nbsp;&nbsp;| otherwise &nbsp; &nbsp; &nbsp; &nbsp; = &nbsp;Run c Process 3 cells</div><div class="code_line">&nbsp;</div><div class="code_line">cpu (Run c Process 2 [c0, c1, c2, c3]) = Run (c+1) Decision 2 [c0, c1+c3+1, c2, c3]</div><div class="code_line">&nbsp;</div><div class="code_line">cpu (Run c Decision 2 cells)</div><div class="code_line">&nbsp;&nbsp;| sum cells `mod` 7 &#62; 0 &nbsp;= &nbsp;Run c Process 3 cells</div><div class="code_line">&nbsp;&nbsp;| otherwise &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;= &nbsp;Run c Process 4 cells</div><div class="code_line">&nbsp;</div><div class="code_line">cpu (Run c Process 3 [c0, c1, c2, c3])</div><div class="code_line">&nbsp;&nbsp;| (c0+c1) `mod` 3 /= 0 &nbsp;= &nbsp;Run (c+1) Decision 3 [c0, c1, c2+7, c3]</div><div class="code_line">&nbsp;&nbsp;| otherwise &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; = &nbsp;Run (c+1) Decision 3 [c0, c1, c2, &nbsp; c3]</div><div class="code_line">&nbsp;</div><div class="code_line">cpu (Run c Decision 3 cells)</div><div class="code_line">&nbsp;&nbsp;| all even cells &nbsp;= &nbsp;Run c Process 2 cells</div><div class="code_line">&nbsp;&nbsp;| otherwise &nbsp; &nbsp; &nbsp; = &nbsp;Run c Process 1 cells</div><div class="code_line">&nbsp;</div><div class="code_line">cpu (Run c Process 4 [c0, c1, c2, c3])</div><div class="code_line">&nbsp;&nbsp;| (c0+c2) `mod` 5 /= 4 &nbsp;= &nbsp;Run (c+1) Decision 4 [c0, c1, c2, c3+1]</div><div class="code_line">&nbsp;&nbsp;| otherwise &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; = &nbsp;Run (c+1) Decision 4 [c0, c1, c2, c3]</div><div class="code_line">&nbsp;</div><div class="code_line">cpu (Run c Decision 4 cells)</div><div class="code_line">&nbsp;&nbsp;| sum cells &#62; 24 &nbsp;= &nbsp;Run c Process 5 cells</div><div class="code_line">&nbsp;&nbsp;| otherwise &nbsp; &nbsp; &nbsp; = &nbsp;Run c Process 2 cells</div><div class="code_line">&nbsp;</div><div class="code_line">cpu (Run _ Process 5 _) = Stop</div><div class="code_line">&nbsp;</div><div class="code_line">cpu Stop &nbsp; &nbsp; &nbsp; = Stop</div><div class="code_line">cpu (Fail err) = Fail err</div><div class="code_line">cpu state &nbsp; &nbsp; &nbsp;= Fail (show state)</div><div class="code_line">&nbsp;</div><div class="code_line">----------------------------------------------------------------</div><div class="code_line">&nbsp;</div><div class="code_line">machine :: State -&#62; IO ()</div><div class="code_line">machine Stop &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;= return ()</div><div class="code_line">machine s@(Fail _) &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;= print s</div><div class="code_line">machine s@(Run _ Process _ _) = print s &#62;&#62; machine (cpu s)</div><div class="code_line">machine s &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; = machine (cpu s)</div></ol></div></div></div></div><br>
— <a class='tag-url' href='https://rextester.com/EQGX38142' target='_blank'>https://rextester.com/EQGX38142</a><br>
</div></div><br>
<br>
<div class="tag-spoiler spoiler closed"><div class="spoiler_header" onclick="openCloseParent(this)">Go</div><div class="body"><br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">package main</div><div class="code_line">&nbsp;</div><div class="code_line">import (</div><div class="code_line">&nbsp;&nbsp; &nbsp;&quot;context&quot;</div><div class="code_line">&nbsp;&nbsp; &nbsp;&quot;fmt&quot;</div><div class="code_line">)</div><div class="code_line">&nbsp;</div><div class="code_line">var (</div><div class="code_line">&nbsp;&nbsp; &nbsp;process1 = make(chan int)</div><div class="code_line">&nbsp;&nbsp; &nbsp;process2 = make(chan int)</div><div class="code_line">&nbsp;&nbsp; &nbsp;process3 = make(chan int)</div><div class="code_line">&nbsp;&nbsp; &nbsp;process4 = make(chan int)</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;stop &nbsp;= make(chan int)</div><div class="code_line">&nbsp;&nbsp; &nbsp;cell &nbsp;= make(Cells, 4)</div><div class="code_line">)</div><div class="code_line">&nbsp;</div><div class="code_line">func main() {</div><div class="code_line">&nbsp;&nbsp; &nbsp;var ctx = context.Background()</div><div class="code_line">&nbsp;&nbsp; &nbsp;robot(ctx)</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;start(0, process1, 0, 0, 0, 0)</div><div class="code_line">&nbsp;&nbsp; &nbsp;start(9, process4, 3, 3, 14, 1)</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">func robot(ctx context.Context) {</div><div class="code_line">&nbsp;&nbsp; &nbsp;go Block{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Name: &nbsp; &nbsp; &quot;Proc: 1&quot;,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Receive: &nbsp;process1,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Process: &nbsp;Process1,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Decision: Decision1,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;IfYes: &nbsp; &nbsp;process4,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;IfNo: &nbsp; &nbsp; process3,</div><div class="code_line">&nbsp;&nbsp; &nbsp;}.Connect(ctx)</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;go Block{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Name: &nbsp; &nbsp; &quot;Proc: 2&quot;,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Receive: &nbsp;process2,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Process: &nbsp;Process2,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Decision: Decision2,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;IfYes: &nbsp; &nbsp;process3,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;IfNo: &nbsp; &nbsp; process4,</div><div class="code_line">&nbsp;&nbsp; &nbsp;}.Connect(ctx)</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;go Block{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Name: &nbsp; &nbsp; &quot;Proc: 3&quot;,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Receive: &nbsp;process3,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Process: &nbsp;Process3,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Decision: Decision3,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;IfYes: &nbsp; &nbsp;process2,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;IfNo: &nbsp; &nbsp; process1,</div><div class="code_line">&nbsp;&nbsp; &nbsp;}.Connect(ctx)</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;go Block{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Name: &nbsp; &nbsp; &quot;Proc: 4&quot;,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Receive: &nbsp;process4,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Process: &nbsp;Process4,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Decision: Decision4,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;IfYes: &nbsp; &nbsp;stop,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;IfNo: &nbsp; &nbsp; process2,</div><div class="code_line">&nbsp;&nbsp; &nbsp;}.Connect(ctx)</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">func start(counter int, process chan&#60;- int, c1, c2, c3, c4 int) {</div><div class="code_line">&nbsp;&nbsp; &nbsp;cell[0], cell[1], cell[2], cell[3] = c1, c2, c3, c4</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;process &#60;- counter</div><div class="code_line">&nbsp;&nbsp; &nbsp;counter = &#60;-stop</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;dump(counter, &quot;Stop&quot;)</div><div class="code_line">&nbsp;&nbsp; &nbsp;fmt.Println(&quot;----------------------------------------------------------------&quot;)</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">type (</div><div class="code_line">&nbsp;&nbsp; &nbsp;Cells []int</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Block struct {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Name &nbsp; &nbsp; string</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Receive &nbsp;&#60;-chan int</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Process &nbsp;Process</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Decision Decision</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;IfYes &nbsp; &nbsp;chan&#60;- int</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;IfNo &nbsp; &nbsp; chan&#60;- int</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Process func()</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Decision func() bool</div><div class="code_line">)</div><div class="code_line">&nbsp;</div><div class="code_line">func (b Block) Connect(ctx context.Context) {</div><div class="code_line">&nbsp;&nbsp; &nbsp;for {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;select {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;case &#60;-ctx.Done():</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// may save here</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;case counter := &#60;-b.Receive:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;dump(counter, b.Name)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;counter++</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;b.Process()</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if b.Decision() {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;b.yes(ctx, counter)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;} else {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;b.no(ctx, counter)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">func (b Block) yes(ctx context.Context, value int) {</div><div class="code_line">&nbsp;&nbsp; &nbsp;send(ctx, b.IfYes, value)</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">func (b Block) no(ctx context.Context, value int) {</div><div class="code_line">&nbsp;&nbsp; &nbsp;send(ctx, b.IfNo, value)</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">/* ---------------------------------------------------------------- */</div><div class="code_line">&nbsp;</div><div class="code_line">func Process1() {</div><div class="code_line">&nbsp;&nbsp; &nbsp;cell[0]++</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">func Process2() {</div><div class="code_line">&nbsp;&nbsp; &nbsp;cell[1] += cell[3] + 1</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">func Process3() {</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (cell[0] + cell[1])%3 != 0 {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;cell[2] += 7</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">func Process4() {</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (cell[0] + cell[2])%5 != 4 {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;cell[3] += 1</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">/* ---------------------------------------------------------------- */</div><div class="code_line">&nbsp;</div><div class="code_line">func Decision1() bool {</div><div class="code_line">&nbsp;&nbsp; &nbsp;return cell.sum()%2 == 0</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">func Decision2() bool {</div><div class="code_line">&nbsp;&nbsp; &nbsp;return cell.sum()%7 &#62; 0</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">func Decision3() bool {</div><div class="code_line">&nbsp;&nbsp; &nbsp;return cell.areAllEven()</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">func Decision4() bool {</div><div class="code_line">&nbsp;&nbsp; &nbsp;return cell.sum() &#62; 24</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">/* ---------------------------------------------------------------- */</div><div class="code_line">&nbsp;</div><div class="code_line">func (xs Cells) sum() (s int) {</div><div class="code_line">&nbsp;&nbsp; &nbsp;for _, x := range xs {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;s += x</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;return s</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">func (xs Cells) areAllEven() bool {</div><div class="code_line">&nbsp;&nbsp; &nbsp;for _, x := range xs {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if x%2 != 0 {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return false</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;return true</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">func send(ctx context.Context, ch chan&#60;- int, v int) {</div><div class="code_line">&nbsp;&nbsp; &nbsp;select {</div><div class="code_line">&nbsp;&nbsp; &nbsp;case ch &#60;- v:</div><div class="code_line">&nbsp;&nbsp; &nbsp;case &#60;-ctx.Done():</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">func dump(c int, p string) {</div><div class="code_line">&nbsp;&nbsp; &nbsp;fmt.Printf(&quot;Step: %2d &nbsp; &nbsp;%-10s &nbsp; &nbsp;%2d &nbsp;%2d &nbsp;%2d &nbsp;%2d\n&quot;,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;c, p, cell[0], cell[1], cell[2], cell[3])</div><div class="code_line">}</div></ol></div></div></div></div><br>
— <a class='tag-url' href='https://go.dev/play/p/2AZ1MAlUaOp' target='_blank'>https://go.dev/play/p/2AZ1MAlUaOp</a><br>
</div></div><br>
<br>
<div class="tag-spoiler spoiler closed"><div class="spoiler_header" onclick="openCloseParent(this)">Common Lisp</div><div class="body"><br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">(defparameter *data* (vector 0 0 0 0))</div><div class="code_line">&nbsp;</div><div class="code_line">(defun run-machine (&amp;key (state 1) (count 0))</div><div class="code_line">&nbsp;&nbsp;(labels ((dump (state)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (format t &quot;Step: ~2d &nbsp; &nbsp;Proc: ~2d &nbsp;~{ ~2d~}~%&quot; count state (coerce *data* &#39;list))</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (incf count)))</div><div class="code_line">&nbsp;&nbsp; &nbsp;(tagbody</div><div class="code_line">&nbsp;&nbsp; &nbsp; (case state</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; (1 (go :proc-1))</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; (2 (go :proc-2))</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; (3 (go :proc-3))</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; (4 (go :proc-4))</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; (t (go :stop)))</div><div class="code_line">&nbsp;&nbsp; &nbsp; :proc-1</div><div class="code_line">&nbsp;&nbsp; &nbsp; (dump 1)</div><div class="code_line">&nbsp;&nbsp; &nbsp; (process-1)</div><div class="code_line">&nbsp;&nbsp; &nbsp; (if (decision-1) (go :proc-4) (go :proc-3))</div><div class="code_line">&nbsp;&nbsp; &nbsp; :proc-2</div><div class="code_line">&nbsp;&nbsp; &nbsp; (dump 2)</div><div class="code_line">&nbsp;&nbsp; &nbsp; (process-2)</div><div class="code_line">&nbsp;&nbsp; &nbsp; (if (decision-2) (go :proc-3) (go :proc-4))</div><div class="code_line">&nbsp;&nbsp; &nbsp; :proc-3</div><div class="code_line">&nbsp;&nbsp; &nbsp; (dump 3)</div><div class="code_line">&nbsp;&nbsp; &nbsp; (process-3)</div><div class="code_line">&nbsp;&nbsp; &nbsp; (if (decision-3) (go :proc-2) (go :proc-1))</div><div class="code_line">&nbsp;&nbsp; &nbsp; :proc-4</div><div class="code_line">&nbsp;&nbsp; &nbsp; (dump 4)</div><div class="code_line">&nbsp;&nbsp; &nbsp; (process-4)</div><div class="code_line">&nbsp;&nbsp; &nbsp; (if (decision-4) (go :stop) (go :proc-2))</div><div class="code_line">&nbsp;&nbsp; &nbsp; :stop</div><div class="code_line">&nbsp;&nbsp; &nbsp; (dump 5))))</div><div class="code_line">&nbsp;</div><div class="code_line">(defun process-1 ()</div><div class="code_line">&nbsp;&nbsp;(incf (cell 0)))</div><div class="code_line">&nbsp;</div><div class="code_line">(defun process-2 ()</div><div class="code_line">&nbsp;&nbsp;(incf (cell 1) (+ (cell 3) 1)))</div><div class="code_line">&nbsp;</div><div class="code_line">(defun process-3 ()</div><div class="code_line">&nbsp;&nbsp;(unless (divisible (sum-cells 0 1) :by 3)</div><div class="code_line">&nbsp;&nbsp; &nbsp;(incf (cell 2) 7)))</div><div class="code_line">&nbsp;</div><div class="code_line">(defun process-4 ()</div><div class="code_line">&nbsp;&nbsp;(unless (= 4 (rem (sum-cells 0 2) 5))</div><div class="code_line">&nbsp;&nbsp; &nbsp;(incf (cell 3))))</div><div class="code_line">&nbsp;</div><div class="code_line">(defun decision-1 ()</div><div class="code_line">&nbsp;&nbsp;(divisible (cells-sum) :by 2))</div><div class="code_line">&nbsp;</div><div class="code_line">(defun decision-2 ()</div><div class="code_line">&nbsp;&nbsp;(plusp (rem (cells-sum) 7)))</div><div class="code_line">&nbsp;</div><div class="code_line">(defun decision-3 ()</div><div class="code_line">&nbsp;&nbsp;(all-cells #&#39;evenp))</div><div class="code_line">&nbsp;</div><div class="code_line">(defun decision-4 ()</div><div class="code_line">&nbsp;&nbsp;(&#62; (cells-sum) 24))</div><div class="code_line">&nbsp;</div><div class="code_line">;------------------------------------------------</div><div class="code_line">&nbsp;</div><div class="code_line">(defun cell (i)</div><div class="code_line">&nbsp;&nbsp;(aref *data* i))</div><div class="code_line">&nbsp;</div><div class="code_line">(defun (setf cell) (v i)</div><div class="code_line">&nbsp;&nbsp;(setf (aref *data* i) v))</div><div class="code_line">&nbsp;</div><div class="code_line">(defun divisible (v &amp;key by)</div><div class="code_line">&nbsp;&nbsp;(zerop (rem v by)))</div><div class="code_line">&nbsp;</div><div class="code_line">(defun sum-cells (&amp;rest indexes)</div><div class="code_line">&nbsp;&nbsp;(loop for i in indexes summing (cell i)))</div><div class="code_line">&nbsp;</div><div class="code_line">(defun cells-sum ()</div><div class="code_line">&nbsp;&nbsp;(loop for x across *data* summing x))</div><div class="code_line">&nbsp;</div><div class="code_line">(defun all-cells (predicate)</div><div class="code_line">&nbsp;&nbsp;(loop for x across *data*</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;unless (funcall predicate x)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;do (return-from all-cells nil))</div><div class="code_line">&nbsp;&nbsp;t)</div><div class="code_line">&nbsp;</div><div class="code_line">;------------------------------------------------</div><div class="code_line">&nbsp;</div><div class="code_line">(defun main ()</div><div class="code_line">&nbsp;&nbsp;(run-machine)</div><div class="code_line">&nbsp;&nbsp;(format t &quot;----------------------------------------------------------------~%&quot;)</div><div class="code_line">&nbsp;&nbsp;(let ((*data* (vector 3 3 14 1)))</div><div class="code_line">&nbsp;&nbsp; &nbsp;(run-machine :count 9 :state 4))</div><div class="code_line">&nbsp;&nbsp;(format t &quot;----------------------------------------------------------------~%&quot;))</div><div class="code_line">&nbsp;</div><div class="code_line">(main)</div></ol></div></div></div></div><br>
— <a class='tag-url' href='https://rextester.com/RRI70257' target='_blank'>https://rextester.com/RRI70257</a><br>
</div></div>]]></description>
        <author>korvin</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876351</guid>
        <pubDate>Sat, 17 Sep 2022 21:12:47 +0000</pubDate>
        <title>Сохранение и восстановление состояния обработки</title>
        <link>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876351</link>
        <description><![CDATA[Wound: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876348'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Majestio &#064; <time class="tag-quote__quoted-time" datetime="2022-09-17T20:46:19+00:00">17.09.22, 20:46</time></span><div class='quote '> Будет просто супер, если каждый из участвующих в отдельном сообщении соберет все свои варианты, но уже в текстовом виде под спойлер, а рядом выложит ссылку исполнения в онлайн компиляторе.</div></div><br>
Онлайн -&gt; <a class='tag-url' href='https://rextester.com/PKDT40835' target='_blank'>https://rextester.com/PKDT40835</a><br>
<div class="tag-spoiler spoiler closed"><div class="spoiler_header" onclick="openCloseParent(this)">Код</div><div class="body"><br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">using System;</div><div class="code_line">using System.Collections.Generic;</div><div class="code_line">using System.Linq;</div><div class="code_line">using Challenge.Interfaces;</div><div class="code_line">&nbsp;</div><div class="code_line">//! Interfaces</div><div class="code_line">namespace Challenge.Interfaces</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;public interface IDecisionHandler</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;string HandleDecision(bool decision);</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;public interface IProcess</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;void Execute(List&#60;int&#62; values);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;bool Decision(List&#60;int&#62; values);</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">namespace Challenge</div><div class="code_line">{</div><div class="code_line">//! DecisionhandlerContext</div><div class="code_line">&nbsp;&nbsp; &nbsp;public class DecisionHandlerContext</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;private Dictionary&#60;string, IDecisionHandler&#62; _handlers;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;public DecisionHandlerContext()</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_handlers = new Dictionary&#60;string, IDecisionHandler&#62;();</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;public void RegisterHandler(string processName, IDecisionHandler decisionHandler)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (String.IsNullOrEmpty(processName) || decisionHandler == null)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;throw new Exception(&quot;Argument can&#39;t be null&quot;);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_handlers.Add(processName, decisionHandler);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;public string HandleDecisionAndGetNextStep(string processName, bool decision)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (String.IsNullOrEmpty(processName))</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;throw new Exception(&quot;Invalid arguments&quot;);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if(_handlers.TryGetValue(processName, out var handler))</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return handler.HandleDecision(decision);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;throw new Exception(&quot;Handle error&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;public class Process1DecisionHandler : IDecisionHandler</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;public string HandleDecision(bool decision)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if(decision)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return Process4.ProcessName;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return Process3.ProcessName;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;public class Process2DecisionHandler : IDecisionHandler</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;public string HandleDecision(bool decision)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (decision)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return Process3.ProcessName;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return Process4.ProcessName;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;public class Process3DecisionHandler : IDecisionHandler</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;public string HandleDecision(bool decision)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (decision)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return Process2.ProcessName;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return Process1.ProcessName;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;public class Process4DecisionHandler : IDecisionHandler</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;public string HandleDecision(bool decision)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (decision)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return Process5.ProcessName;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return Process2.ProcessName;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;public class Process5DecisionHandler : IDecisionHandler</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;public string HandleDecision(bool decision)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return String.Empty;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">//! Process1</div><div class="code_line">&nbsp;&nbsp; &nbsp;public class Process1 : IProcess</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;private const int MaxSizeValues = 4;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;public static string ProcessName =&#62; &quot;1&quot;;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;public void Execute(List&#60;int&#62; values)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (values == null || values.Count &#62; MaxSizeValues)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;throw new InvalidOperationException(&quot;List of values is empty...&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;++values[0];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;public bool Decision(List&#60;int&#62; values)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return (values.Sum() % 2) == 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">//! Process2</div><div class="code_line">&nbsp;&nbsp; &nbsp;public class Process2 : IProcess</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;private const int MaxSizeValues = 4;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;public static string ProcessName =&#62; &quot;2&quot;;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;public bool Decision(List&#60;int&#62; values)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return (values.Sum() % 7) &#62; 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;public void Execute(List&#60;int&#62; values)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (values == null || values.Count &#62; MaxSizeValues)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;throw new InvalidOperationException(&quot;List of values is empty...&quot;);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;values[1] += values[3] + 1;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">//! Process3</div><div class="code_line">&nbsp;&nbsp; &nbsp;public class Process3 : IProcess</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;private const int MaxSizeValues = 4;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;public static string ProcessName =&#62; &quot;3&quot;;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;public bool Decision(List&#60;int&#62; values)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;var existOdd = values.Any(e =&#62; e % 2 != 0);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return !existOdd;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;public void Execute(List&#60;int&#62; values)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (values == null || values.Count &#62; MaxSizeValues)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;throw new InvalidOperationException(&quot;List of values is empty...&quot;);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if ( (values[0] + values[1]) % 3 &#62; 0 )</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;values[2] += 7;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">//! Process4</div><div class="code_line">&nbsp;&nbsp; &nbsp;public class Process4 : IProcess</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;private const int MaxSizeValues = 4;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;public static string ProcessName =&#62; &quot;4&quot;;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;public bool Decision(List&#60;int&#62; values)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return values.Sum() &#62; 24;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;public void Execute(List&#60;int&#62; values)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (values == null || values.Count &#62; MaxSizeValues)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;throw new InvalidOperationException(&quot;List of values is empty...&quot;);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if ((values[0] + values[2]) % 5 != 4)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;++values[3];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">//! Process5</div><div class="code_line">&nbsp;&nbsp; &nbsp;public class Process5 : IProcess</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;public static string ProcessName =&#62; &quot;5&quot;;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;public bool Decision(List&#60;int&#62; values)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return true;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;public void Execute(List&#60;int&#62; values)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">//! ProcessContext</div><div class="code_line">&nbsp;&nbsp; &nbsp;public class ProcessContext</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;private Dictionary&#60;string, IProcess&#62; _processes;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;private DecisionHandlerContext _handlerContext;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;public ProcessContext()</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_processes = new Dictionary&#60;string, IProcess&#62;();</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_handlerContext = new DecisionHandlerContext();</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;public ProcessContext AddProcess(string proccesName, IProcess process, IDecisionHandler handler)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (String.IsNullOrEmpty(proccesName) || process == null)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;throw new Exception(&quot;Argument can&#39;t be null&quot;);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_processes.Add(proccesName, process);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_handlerContext.RegisterHandler(proccesName, handler);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return this;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;public bool RunProcessAndCheckDecision(string processName, List&#60;int&#62; values)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if(_processes.TryGetValue(processName, out var proc))</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (proc == null)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;throw new Exception($&quot;Process with name &#39;{processName}&#39; is null.&quot;);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;proc.Execute(values);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return proc.Decision(values);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;throw new Exception($&quot;Process with name &#39;{processName}&#39; not found.&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;public void RunAllProcesses(string startProcessName, List&#60;int&#62; values)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;string currentProcessName = startProcessName;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;int step = 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;while (true)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Console.WriteLine($&quot;Step {step}\t Proc: {currentProcessName}\t {String.Join(&quot; &quot;, values)}&quot;);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;var result = RunProcessAndCheckDecision(currentProcessName, values);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;currentProcessName = _handlerContext.HandleDecisionAndGetNextStep(currentProcessName, result);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (String.IsNullOrEmpty(currentProcessName))</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;break;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;++step;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">//! Programm</div><div class="code_line">&nbsp;&nbsp; &nbsp;public class Program</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;static void Main(string[] args)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;try</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;List&#60;int&#62; values = new List&#60;int&#62; { 0, 0, 0, 0 };</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ProcessContext processContext = new ProcessContext();</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;processContext</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;.AddProcess(Process1.ProcessName, new Process1(), new Process1DecisionHandler())</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;.AddProcess(Process2.ProcessName, new Process2(), new Process2DecisionHandler())</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;.AddProcess(Process3.ProcessName, new Process3(), new Process3DecisionHandler())</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;.AddProcess(Process4.ProcessName, new Process4(), new Process4DecisionHandler())</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;.AddProcess(Process5.ProcessName, new Process5(), new Process5DecisionHandler());</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;processContext.RunAllProcesses(Process1.ProcessName, values);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Console.WriteLine(&quot;--------------------------&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;List&#60;int&#62; savedValues = new List&#60;int&#62; { 3, 3, 14, 1 };</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;processContext.RunAllProcesses(Process4.ProcessName, savedValues);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;catch(Exception error)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Console.WriteLine(error.Message);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">}</div></ol></div></div></div></div><br>
</div></div>]]></description>
        <author>Wound</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876350</guid>
        <pubDate>Sat, 17 Sep 2022 21:01:17 +0000</pubDate>
        <title>Сохранение и восстановление состояния обработки</title>
        <link>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876350</link>
        <description><![CDATA[Majestio: <strong class='tag-b'>Вариант 1 (С++, без GOTO)</strong> <a class='tag-url' href='https://onlinegdb.com/X-vUycfPr' target='_blank'>Ссылка на онлайн-исполнение</a><br>
<div class="tag-spoiler spoiler closed"><div class="spoiler_header" onclick="openCloseParent(this)">Скрытый текст</div><div class="body"><div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">#include &#60;iostream&#62;</div><div class="code_line">#include &#60;vector&#62;</div><div class="code_line">#include &#60;algorithm&#62;</div><div class="code_line">&nbsp;</div><div class="code_line">using namespace std;</div><div class="code_line">&nbsp;</div><div class="code_line">std::vector&#60;int&#62; Arr {0,0,0,0};</div><div class="code_line">std::size_t Step = 0;</div><div class="code_line">std::size_t State = 0;</div><div class="code_line">&nbsp;</div><div class="code_line">void prn();</div><div class="code_line">&nbsp;</div><div class="code_line">// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -</div><div class="code_line">&nbsp;</div><div class="code_line">bool process1() {</div><div class="code_line">&nbsp;&nbsp; &nbsp;Step++;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Arr[0]++;</div><div class="code_line">&nbsp;&nbsp; &nbsp;int Summ = 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp;std::for_each(Arr.begin(), Arr.end(), [&amp;](int &amp;n){Summ += n;});</div><div class="code_line">&nbsp;&nbsp; &nbsp;return Summ % 2 == 0;</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">bool process2() {</div><div class="code_line">&nbsp;&nbsp; &nbsp;Step++;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Arr[1] += Arr[3] + 1;</div><div class="code_line">&nbsp;&nbsp; &nbsp;int Summ = 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp;std::for_each(Arr.begin(), Arr.end(), [&amp;](int &amp;n){Summ += n;});</div><div class="code_line">&nbsp;&nbsp; &nbsp;return Summ % 7 &#62; 0;</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">bool process3() {</div><div class="code_line">&nbsp;&nbsp; &nbsp;Step++;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Arr[2] += ((Arr[0]+Arr[1]) % 3 == 0) ? 0 : 7;</div><div class="code_line">&nbsp;&nbsp; &nbsp;bool Flag = true;</div><div class="code_line">&nbsp;&nbsp; &nbsp;std::for_each(Arr.begin(), Arr.end(), [&amp;](int &amp;n){if (n % 2 &#62;0) Flag = false;});</div><div class="code_line">&nbsp;&nbsp; &nbsp;return Flag;</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">bool process4() {</div><div class="code_line">&nbsp;&nbsp; &nbsp;Step++;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Arr[3] += ((Arr[0]+Arr[2]) % 5 == 4) ? 0 : 1;</div><div class="code_line">&nbsp;&nbsp; &nbsp;int Summ = 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp;std::for_each(Arr.begin(), Arr.end(), [&amp;](int &amp;n){Summ += n;});</div><div class="code_line">&nbsp;&nbsp; &nbsp;return Summ &#62; 24;</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -</div><div class="code_line">&nbsp;</div><div class="code_line">void load(int pass) {</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (pass == 1) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;State = 1;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;prn();</div><div class="code_line">&nbsp;&nbsp; &nbsp;} else {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;State = 4;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Arr = {3,3,14,1};</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Step = 9;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;prn();</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;return;</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">void prn() {</div><div class="code_line">&nbsp;&nbsp; &nbsp;std::cout &#60;&#60; &quot;Step: &quot; &#60;&#60; Step &#60;&#60; &quot;\t&quot; &#60;&#60; &quot;Proc: &quot; &#60;&#60; State &#60;&#60; &quot;\t&quot;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#60;&#60; Arr[0] &#60;&#60; &quot;\t&quot; &#60;&#60; Arr[1] &#60;&#60; &quot;\t&quot;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#60;&#60; Arr[2] &#60;&#60; &quot;\t&quot; &#60;&#60; Arr[3] &#60;&#60; &quot;\n&quot;;</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -</div><div class="code_line">&nbsp;</div><div class="code_line">int main()</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;for (int i=1; i&#60;3; i++) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;load(i);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;bool cycle = true;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;while (cycle) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;switch (State) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;case 1:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;State = (process1()) ? 4:3; prn(); break;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;case 2:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;State = (process2()) ? 3:4; prn(); break;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;case 3:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;State = (process3()) ? 2:1; prn(); break;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;case 4:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;State = (process4()) ? 5:2; prn(); break;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;default:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;cycle = false; break;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;std::cout &#60;&#60; &quot;----------------------------------------------------------------\n&quot;;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;return 0;</div><div class="code_line">}</div></ol></div></div></div></div></div></div><br>
<strong class='tag-b'>Вариант 2 (С++, с прекрасным оператором GOTO)</strong> <a class='tag-url' href='https://onlinegdb.com/Nvx_0yuuq' target='_blank'>Ссылка на онлайн-исполнение</a><br>
<div class="tag-spoiler spoiler closed"><div class="spoiler_header" onclick="openCloseParent(this)">Скрытый текст</div><div class="body"><div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">#include &#60;functional&#62;</div><div class="code_line">#include &#60;algorithm&#62;</div><div class="code_line">#include &#60;iterator&#62;</div><div class="code_line">#include &#60;iostream&#62;</div><div class="code_line">#include &#60;numeric&#62;</div><div class="code_line">#include &#60;vector&#62;</div><div class="code_line">&nbsp;</div><div class="code_line">int main() {</div><div class="code_line">&nbsp;&nbsp;int Idx = 0;</div><div class="code_line">&nbsp;&nbsp;int Step = 0;</div><div class="code_line">&nbsp;&nbsp;bool Continue = true;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;std::vector&#60;int&#62;A = &nbsp;{0, 0, 0, 0};</div><div class="code_line">&nbsp;&nbsp;std::vector&#60;std::vector&#60;int&#62;&#62; Matrix = {{3,2},{2,3},{1,0},{4,1},{4,4}};</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;auto P1 = [&amp;]() -&#62; void { A[0]++; };</div><div class="code_line">&nbsp;&nbsp;auto P2 = [&amp;]() -&#62; void { A[1] += A[3] + 1; };</div><div class="code_line">&nbsp;&nbsp;auto P3 = [&amp;]() -&#62; void { A[2] += ((A[0] + A[1]) % 3 == 0) ? 0 : 7; };</div><div class="code_line">&nbsp;&nbsp;auto P4 = [&amp;]() -&#62; void { A[3] += ((A[0] + A[2]) % 5 == 4) ? 0 : 1; };</div><div class="code_line">&nbsp;&nbsp;auto Fp = [&amp;]() -&#62; void { };</div><div class="code_line">&nbsp;&nbsp;auto D1 = [&amp;]() -&#62; bool { return std::accumulate(A.begin(), A.end(), 0) % 2 == 0; };</div><div class="code_line">&nbsp;&nbsp;auto D2 = [&amp;]() -&#62; bool { return std::accumulate(A.begin(), A.end(), 0) % 7 &#62; 0; };</div><div class="code_line">&nbsp;&nbsp;auto D3 = [&amp;]() -&#62; bool { return std::find_if(A.begin(), A.end(), [](int i){ return i % 2 &#62; 0; }) == A.end(); };</div><div class="code_line">&nbsp;&nbsp;auto D4 = [&amp;]() -&#62; bool { return std::accumulate(A.begin(), A.end(), 0) &#62; 24; };</div><div class="code_line">&nbsp;&nbsp;auto Fd = [&amp;]() -&#62; bool { Continue = false; return false; };</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;auto Print = [&amp;]() -&#62; void {</div><div class="code_line">&nbsp;&nbsp; &nbsp;std::cout &#60;&#60; &quot;Step: &quot; &#60;&#60; Step &#60;&#60; &quot;\tProc: &quot; &#60;&#60; (Idx+1) &#60;&#60; &quot;\t&quot;;</div><div class="code_line">&nbsp;&nbsp; &nbsp;std::copy(A.begin(), A.end(), std::ostream_iterator&#60;int&#62;(std::cout, &quot;\t&quot;));</div><div class="code_line">&nbsp;&nbsp; &nbsp;std::cout &#60;&#60; std::endl;</div><div class="code_line">&nbsp;&nbsp;};</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;using Process = std::function&#60;void()&#62;;</div><div class="code_line">&nbsp;&nbsp;using Decision = std::function&#60;bool()&#62;;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;std::vector&#60;Process&#62; P = {P1, P2, P3, P4, Fp};</div><div class="code_line">&nbsp;&nbsp;std::vector&#60;Decision&#62; D = {D1, D2, D3, D4, Fd};</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;// Проход с начала и до конца</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;while(Continue) {</div><div class="code_line">&nbsp;&nbsp; &nbsp;Print();</div><div class="code_line">&nbsp;&nbsp; &nbsp;P[Idx]();</div><div class="code_line">&nbsp;&nbsp; &nbsp;Idx = Matrix[Idx][(D[Idx]()) ? 0:1];</div><div class="code_line">&nbsp;&nbsp; &nbsp;Step++;</div><div class="code_line">&nbsp;&nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;std::cout &#60;&#60; &quot;----------------------------------------------------------------\n&quot;;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;// Эмуляция восстановления в точке перед Proc-4 и продолжение</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;Continue = true;</div><div class="code_line">&nbsp;&nbsp;Step = 9;</div><div class="code_line">&nbsp;&nbsp;Idx = 3;</div><div class="code_line">&nbsp;&nbsp;A = {3, 3 ,14, 1};</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;while(Continue) {</div><div class="code_line">&nbsp;&nbsp; &nbsp;Print();</div><div class="code_line">&nbsp;&nbsp; &nbsp;P[Idx]();</div><div class="code_line">&nbsp;&nbsp; &nbsp;Idx = Matrix[Idx][(D[Idx]()) ? 0:1];</div><div class="code_line">&nbsp;&nbsp; &nbsp;Step++;</div><div class="code_line">&nbsp;&nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;std::cout &#60;&#60; &quot;----------------------------------------------------------------\n&quot;;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;// использование прекрасного оператора GOTO!</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;label: if (true == false) goto label;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;return 0;</div><div class="code_line">}</div></ol></div></div></div></div></div></div>]]></description>
        <author>Majestio</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876348</guid>
        <pubDate>Sat, 17 Sep 2022 20:46:19 +0000</pubDate>
        <title>Сохранение и восстановление состояния обработки</title>
        <link>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876348</link>
        <description><![CDATA[Majestio: Ну что, уважаемые, вижу - все кто мог участвовать, уже смогли. Перечислю тех, кто хотел бы поучаствовать, но не с мог по причине запарок на работе, или отсутствием времени по иным причинам:<br>
<br>
<ul class="tag-list"><li>D_KEY</li><li>Fester</li><li>OpenGL</li><li>Qraizer</li><li>ЫукпШ (не ответил)</li></ul><br>
Про остальных - не знаю. Поэтому, считаю, что пора &quot;вскрываться&quot; :yes: <br>
<br>
<strong class='tag-b'>Пароли к архивам</strong><br>
<br>
<ul class="tag-list"><li>korvin: kjgfhm</li><li>Majestio: slava-buratine</li><li>Wound: P@ssw0rd</li></ul><br>
<img class='tag-img' src='https://i120.fastpic.org/big/2022/0917/0b/b4ba9c1ead412b609da816be81d4540b.jpg' alt='user posted image'><br>
<br>
<strong class='tag-b'>Победила дружба&#33;</strong><br>
<br>
И спасибо всем за участие, особенно порадовал <strong class='tag-b'>korvin</strong> многообразием вариантов. Што-то смотрю мне OCaml немного приглянулся  :rolleyes: Ну а выводы, надеюсь, всем понятны - никуда с помощью GOTO &quot;впрыгивать&quot; не нужно, равно как и городить многовложенных циклов, коль впереди маячат долгие пересчеты с сохранением состояний. Будет просто супер, если каждый из участвующих в отдельном сообщении соберет все свои варианты, но уже в текстовом виде под спойлер, а рядом выложит ссылку исполнения в онлайн компиляторе.<br>
<br>
Peace&#33; :victory:]]></description>
        <author>Majestio</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876343</guid>
        <pubDate>Sat, 17 Sep 2022 19:18:44 +0000</pubDate>
        <title>Сохранение и восстановление состояния обработки</title>
        <link>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876343</link>
        <description><![CDATA[Wound: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876342'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>D_KEY &#064; <time class="tag-quote__quoted-time" datetime="2022-09-17T19:14:37+00:00">17.09.22, 19:14</time></span><div class='quote '>Wound, я спорил с конкретным тезисом о том, что такую ошибку легко допустить в C++. Я с этим не согласен, потому что при нормальной организации работы, тебе даст по рукам уже компилятор.<br>
Ни с чем другим я не спорил. </div></div><br>
Ты с этим не согласен - это твое субъективное мнение или объективное? Если это твое субъективное мнение, то ты прав, потому что ты там что то используешь, что в принципе тебя может от этого спасти(с другой стороны конструкции такого плана, которые могут встретится в каких нибудь сторонних библиотеках - нужно как то исключать?). Но кроме тебя - еще полно людей, которые не используют то, что ты там у себя используешь, и объективно - то что ты приводишь, это не аргумент. Хотя применительно к тебе - аргумент да. Но мы не тебя же обсуждаем. <br>
А то тебя послушать - так при нормальной организации работы, при нормальных знаниях ЯП, и тд. вообще будет все в шоколаде, но на практике - это не так. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2022-09-17T19:30:57+00:00">17.09.22, 19:30</time></span></span><br>
Ну и к слову - я на такие баги натыкался, когда вместо сравнения, было присваивание, причем натыкался случайно, и не один раз, в древнем, как говно мамонта коде, на тех же плюсах.]]></description>
        <author>Wound</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876342</guid>
        <pubDate>Sat, 17 Sep 2022 19:14:37 +0000</pubDate>
        <title>Сохранение и восстановление состояния обработки</title>
        <link>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876342</link>
        <description><![CDATA[D_KEY: <strong class='tag-b'>Wound</strong>, я спорил с конкретным тезисом о том, что такую ошибку легко допустить в C++. Я с этим не согласен, потому что при нормальной организации работы, тебе даст по рукам уже компилятор.<br>
Ни с чем другим я не спорил.]]></description>
        <author>D_KEY</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876341</guid>
        <pubDate>Sat, 17 Sep 2022 19:08:27 +0000</pubDate>
        <title>Сохранение и восстановление состояния обработки</title>
        <link>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876341</link>
        <description><![CDATA[Wound: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876339'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>D_KEY &#064; <time class="tag-quote__quoted-time" datetime="2022-09-17T18:54:07+00:00">17.09.22, 18:54</time></span><div class='quote '>Я без -Werror уже несколько лет не работаю. Впрочем, еще и статические анализаторы подключаю. </div></div><br>
А те варнинги от которых в принципе избавится не возможно, ты давишь директивами #pragma  :lol: <br>
Аргументы поперли просто жесть. Да какая разница с чем ты там работаешь или нет? Мы обсуждаем твою личность тут или чего? Я goto в принципе не использую, и никогда в жизни у меня даже не возникало ни желания, ни мысли его использовать на работе(разве что только в исследовательских целях, дома когда изучал ЯП). Значит все в мире должны перестать его тоже использовать? Я верно понял твою логику? <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2022-09-17T19:11:53+00:00">17.09.22, 19:11</time></span></span><br>
И вообще goto рудимент и пережиток прошлого. В тех языках например, где нет конструкции break в циклах for - его еще можно оправдать, а именно там он как бы и уместен, чтоб выпрыгивать досрочно из цикла, и то в тех же языках - его можно заменить while&#39;ом, и никаких goto не нужно. А в высокоуровневых языках, я даже не могу представить где бы он мог бы понадобиться. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2022-09-17T19:13:17+00:00">17.09.22, 19:13</time></span></span><br>
Разве что писать спагетти-код, и доказывать окружающим, что теперь я в этом вижу какую то блоксхему...]]></description>
        <author>Wound</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876339</guid>
        <pubDate>Sat, 17 Sep 2022 18:54:07 +0000</pubDate>
        <title>Сохранение и восстановление состояния обработки</title>
        <link>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876339</link>
        <description><![CDATA[D_KEY: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876316'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2022-09-17T17:24:30+00:00">17.09.22, 17:24</time></span><div class='quote '>Компилятор выдаёт варнинг, а не ошибку</div></div><br>
Я без -Werror уже несколько лет не работаю. Впрочем, еще и статические анализаторы подключаю.]]></description>
        <author>D_KEY</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876320</guid>
        <pubDate>Sat, 17 Sep 2022 17:55:41 +0000</pubDate>
        <title>Сохранение и восстановление состояния обработки</title>
        <link>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876320</link>
        <description><![CDATA[Wound: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876317'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2022-09-17T17:25:54+00:00">17.09.22, 17:25</time></span><div class='quote '>C/C++-проблемы. Заметь, ни один мой вариант, не использует эти языки.</div></div><br>
Да, в плюсах это наследие от Си. В тех же шарпах это не законная конструкция и будет ошибка компиляции]]></description>
        <author>Wound</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876317</guid>
        <pubDate>Sat, 17 Sep 2022 17:25:54 +0000</pubDate>
        <title>Сохранение и восстановление состояния обработки</title>
        <link>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876317</link>
        <description><![CDATA[korvin: Ещё одна, альтернативная, версия на Ocaml:<br>
<span class="b-attach" data-size="1006" data-hits="106" data-attach-id="63956" data-attach-post-id="3876317">
			<span class="b-attach__title"></span><a class='b-attach-link' href='https://forum.sources.ru/index.php?act=Attach&amp;type=post&amp;id=3876317&amp;attach_id=63956' title='Скачать файл' target='_blank'>majestio_machine_alt.ml.zip</a> (, : 106)
		</span><br>
<br>
И чисто функциональная версия на Haskell:<br>
<span class="b-attach" data-size="895" data-hits="86" data-attach-id="63957" data-attach-post-id="3876317">
			<span class="b-attach__title"></span><a class='b-attach-link' href='https://forum.sources.ru/index.php?act=Attach&amp;type=post&amp;id=3876317&amp;attach_id=63957' title='Скачать файл' target='_blank'>Majestio.hs.zip</a> (, : 86)
		</span> <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2022-09-17T17:31:09+00:00">17.09.22, 17:31</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876316'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2022-09-17T17:24:30+00:00">17.09.22, 17:24</time></span><div class='quote '>Компилятор выдаёт варнинг, а не ошибку, т. к. это вполне себе законная конструкция.</div></div><br>
C/C++-проблемы. Заметь, ни один мой вариант не использует эти языки.]]></description>
        <author>korvin</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876316</guid>
        <pubDate>Sat, 17 Sep 2022 17:24:30 +0000</pubDate>
        <title>Сохранение и восстановление состояния обработки</title>
        <link>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876316</link>
        <description><![CDATA[Wound: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876315'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>D_KEY &#064; <time class="tag-quote__quoted-time" datetime="2022-09-17T16:52:34+00:00">17.09.22, 16:52</time></span><div class='quote '>Это не только статические анализаторы, это уже компиляторы давно отлавливают</div></div><br>
Компилятор выдаёт варнинг, а не ошибку, т. к. это вполне себе законная конструкция. Поэтому не совсем понимаю к чему это? Мы общаемся про сферических коней в вакууме, и как по мне, форматирование кода, в стиле 5 конструкций в одну строчку, здорово усложняют не только отладку, но и чтение кода.]]></description>
        <author>Wound</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876315</guid>
        <pubDate>Sat, 17 Sep 2022 16:52:34 +0000</pubDate>
        <title>Сохранение и восстановление состояния обработки</title>
        <link>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876315</link>
        <description><![CDATA[D_KEY: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876311'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2022-09-17T14:32:12+00:00">17.09.22, 14:32</time></span><div class='quote '>ты в if&#39;возьмешь провтыкаешь и вместо какого нибудь == напишешь присваивание(в плюсах как нехер делать)</div></div><br>
Это не только статические анализаторы, это уже компиляторы давно отлавливают. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2022-09-17T16:55:53+00:00">17.09.22, 16:55</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876302'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Majestio &#064; <time class="tag-quote__quoted-time" datetime="2022-09-17T03:56:52+00:00">17.09.22, 03:56</time></span><div class='quote '>Очень хочу дождаться участия ... <strong class='tag-b'>D_KEY</strong>, они ведь тут подбрасывали в начале идеи</div></div><br>
Ну поговорку про разговоры и мешки ты знаешь :D <br>
У меня сейчас полный завал дел и на работе и вообще в жизни, так что не смогу.]]></description>
        <author>D_KEY</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876311</guid>
        <pubDate>Sat, 17 Sep 2022 14:32:12 +0000</pubDate>
        <title>Сохранение и восстановление состояния обработки</title>
        <link>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876311</link>
        <description><![CDATA[Wound: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876310'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2022-09-17T14:21:04+00:00">17.09.22, 14:21</time></span><div class='quote '>Юнит-тесты? Не, не слышал.</div></div><br>
Во первых причем тут юнитесты? У тебя будет чуть сложнее условие, ты в if&#39;возьмешь провтыкаешь и вместо какого нибудь == напишешь присваивание(в плюсах как нехер делать), и потом сиди отлаживай своими юниттестами свою портянку, они тебя в этом случае не спасут.<br>
Ты там недавно мне втирал про стектрейсы с DI, откуда ты их мог видеть, если у тебя контраргумент против отладки - Юнит-Тесты?  :lol:  Я ж так понимаю ты никогда не отлаживался, все юнит-тестами  :rolleyes: <br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876310'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2022-09-17T14:21:04+00:00">17.09.22, 14:21</time></span><div class='quote '>Ты ничего не понял и всё испортил. </div></div><br>
Нет, я прекрасно все понял. Ты взял эталонный спагетти-код, и просто захерачил 3 конструкции в одну строчку однотипно, чтоб этот трешак - более менее можно было понять. Даже у условных любителей goto, которые не брезгуют его применять, есть правила. И одно из них - прыгать можно на метку вперед, назад - это уже из серии говнокода, даже среди поклонников goto. А у тебя как раз тот случай, когда в зависимости от условия мы будем прыгать непойми куда, либо вперед, либо назад, за что собственно и критикуют goto, и предсказать выполнение программы, без ее отладки - зачастую затруднительно. Это даже затруднительно сделать глядя на твой код. Т.к. тут 4 метки, 4 условия(if/else), 8 прыжков, и код не тривиальный, т.к. ты несколько конструкций включая if/else в одну строку свернул(такое в основном студенты любят делать), что снижает читабельность и понимание кода. <br>
<br>
Так что кончай прикрывать этот спагетти-код, каким то сомнительными аргументами. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2022-09-17T14:34:36+00:00">17.09.22, 14:34</time></span></span><br>
Все эти goto вполне себе могут быть оправданы в низкоуровневых яп , типа асма, да хоть те же си, где банально нет интструментов и смысла городить всякую архитектуру в стиле ООП или еще каком.]]></description>
        <author>Wound</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876310</guid>
        <pubDate>Sat, 17 Sep 2022 14:21:04 +0000</pubDate>
        <title>Сохранение и восстановление состояния обработки</title>
        <link>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876310</link>
        <description><![CDATA[korvin: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876303'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2022-09-17T05:51:36+00:00">17.09.22, 05:51</time></span><div class='quote '>которые потом еще попробуй пойди отладь</div></div><br>
Юнит-тесты? Не, не слышал.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876303'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2022-09-17T05:51:36+00:00">17.09.22, 05:51</time></span><div class='quote '>Вот так оно будет к слову выглядеть, если переписать по нормальному</div></div><br>
Ты ничего не понял и всё испортил.]]></description>
        <author>korvin</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876308</guid>
        <pubDate>Sat, 17 Sep 2022 14:05:02 +0000</pubDate>
        <title>Сохранение и восстановление состояния обработки</title>
        <link>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876308</link>
        <description><![CDATA[Majestio: Спасибо <strong class='tag-b'>korvin</strong> и <strong class='tag-b'>Wonder</strong> за обсуждение - вы меня вдохновили на новую версию&#33;<br>
<br>
<strong class='tag-b'>Wonder</strong>, отдельный респект - он мне в личку раскрыл свои исходники. И я подсмотрел у него некоторые профессиональные решения - но пришлось использовать оператор <strong class='tag-b'><span class="tag-color tag-color-named" data-value="red" style="color: red">goto</span></strong> :lol:<br>
Прилагаю вторую версию, добавил изящества <strong class='tag-b'>80</strong> лвл.<br>
<br>
<span class="b-attach" data-size="1002" data-hits="96" data-attach-id="63955" data-attach-post-id="3876308">
			<span class="b-attach__title"></span><a class='b-attach-link' href='https://forum.sources.ru/index.php?act=Attach&amp;type=post&amp;id=3876308&amp;attach_id=63955' title='Скачать файл' target='_blank'>majestio_goto.cpp.7z</a> (, : 96)
		</span>]]></description>
        <author>Majestio</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876303</guid>
        <pubDate>Sat, 17 Sep 2022 05:51:36 +0000</pubDate>
        <title>Сохранение и восстановление состояния обработки</title>
        <link>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876303</link>
        <description><![CDATA[Wound: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876297'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2022-09-16T23:18:14+00:00">16.09.22, 23:18</time></span><div class='quote '>если оно отображена в коде как есть?</div></div><br>
Вот так оно будет к слову выглядеть, если переписать по нормальному, а не бабочек рисовать кодом, которые потом еще попробуй пойди отладь:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">int main()</div><div class="code_line">{</div><div class="code_line">PROC_1 : </div><div class="code_line">&nbsp;&nbsp; &nbsp;process_1() ; </div><div class="code_line">&nbsp;&nbsp; &nbsp;if (decision_1()) </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;goto PROC_4 ; </div><div class="code_line">&nbsp;&nbsp; &nbsp;else </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;goto PROC_3 ;</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">PROC_2 : </div><div class="code_line">&nbsp;&nbsp; &nbsp;process_2() ; </div><div class="code_line">&nbsp;&nbsp; &nbsp;if (decision_2()) </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;goto PROC_3 ; </div><div class="code_line">&nbsp;&nbsp; &nbsp;else </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;goto PROC_4 ;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">PROC_3 : </div><div class="code_line">&nbsp;&nbsp; &nbsp;process_3() ; </div><div class="code_line">&nbsp;&nbsp; &nbsp;if (decision_3()) </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;goto PROC_2 ; </div><div class="code_line">&nbsp;&nbsp; &nbsp;else </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;goto PROC_1 ;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">PROC_4 : </div><div class="code_line">&nbsp;&nbsp; &nbsp;process_4() ; </div><div class="code_line">&nbsp;&nbsp; &nbsp;if (decision_4()) </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;goto EXIT; </div><div class="code_line">&nbsp;&nbsp; &nbsp;else </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;goto PROC_2 ;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">EXIT:</div><div class="code_line">&nbsp;&nbsp; &nbsp;return 0;</div><div class="code_line">}</div></ol></div></div></div></div><br>
Очень все ясно и понятно, решение просто космос.  :ph34r: <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2022-09-17T06:00:44+00:00">17.09.22, 06:00</time></span></span><br>
Я тут даже чутка отформатировал отступы для меток, чтоб оно хоть как то полегче понималось. И это самый простейший случай&#33;]]></description>
        <author>Wound</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876302</guid>
        <pubDate>Sat, 17 Sep 2022 03:56:52 +0000</pubDate>
        <title>Сохранение и восстановление состояния обработки</title>
        <link>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876302</link>
        <description><![CDATA[Majestio: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876299'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2022-09-16T23:42:13+00:00">16.09.22, 23:42</time></span><div class='quote '> к тому времени конкурс уже будет закрыт, там goro не будет.</div></div><br>
<strong class='tag-b'>korvin</strong> и <strong class='tag-b'>Wound</strong> по красоте зарубились&#33; :lool: <br>
<br>
Очень хочу дождаться участия <strong class='tag-b'>ЫукпШ</strong>, <strong class='tag-b'>OpenGL</strong> (но у него проблемсы), <strong class='tag-b'>D_KEY</strong>, они ведь тут подбрасывали в начале идеи. Ну и вскроем пароли 8-)]]></description>
        <author>Majestio</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876301</guid>
        <pubDate>Sat, 17 Sep 2022 00:39:06 +0000</pubDate>
        <title>Сохранение и восстановление состояния обработки</title>
        <link>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876301</link>
        <description><![CDATA[korvin: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876299'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2022-09-16T23:42:13+00:00">16.09.22, 23:42</time></span><div class='quote '>всем известный паттерн.</div></div><br>
Что за паттерн-то?]]></description>
        <author>korvin</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876300</guid>
        <pubDate>Fri, 16 Sep 2022 23:42:19 +0000</pubDate>
        <title>Сохранение и восстановление состояния обработки</title>
        <link>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876300</link>
        <description><![CDATA[Wound: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876297'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2022-09-16T23:18:14+00:00">16.09.22, 23:18</time></span><div class='quote '>Странный ты, наплодил себе классов, теперь без сгенерированной диаграммы не можешь разобраться в коде ) </div></div><br>
Нет, это ты странный. Я прекрасно в своем коде разбираюсь, это же ты зачем то захотел из кода получить диаграмму. Так я тебе ее сделал, даже не смотря в код. Хотя там по коду и так все ясно без всяких диаграм.<br>
Теперь когда я тебя попросил построить диаграмму, ты пишешь что тут и так все ясно. Но тут ничего не ясно, тут ты из лапши попытался сделать что то более менее читаемое, но все эти метки в перемешку с процессами и if&#39;ами - лишь ломают общую картину. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2022-09-16T23:44:10+00:00">16.09.22, 23:44</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876299'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2022-09-16T23:42:13+00:00">16.09.22, 23:42</time></span><div class='quote '>Сосбсна, в этих случаях goto как раз и выручает. Я понимаю, что это не вполне интуитивно, но в исходном коде goto появился ровно по причине внезапно изменившегося ТЗ. Majestio вас некисло так потроллил, сформулировав ТЗ так, что у вас все вводные сразу на руках. Уверяю, в рамках его условия, если я и выложу код, хотя боюсь, к тому времени конкурс уже будет закрыт, там goro не будет. </div></div><br>
Меня goto ниразу не выручал, потому что я им не пользуюсь, и даже там где возможно его можно было впендюлить - как правило всегда находятся более приемлемые решения. А вот когда на него натыкаешься - жгучую боль пониже спины он не редко вызывает, это да.]]></description>
        <author>Wound</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876299</guid>
        <pubDate>Fri, 16 Sep 2022 23:42:13 +0000</pubDate>
        <title>Сохранение и восстановление состояния обработки</title>
        <link>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876299</link>
        <description><![CDATA[Qraizer: <strong class='tag-b'>Majestio</strong>, кажись, я слегка погорячился, прованговав всем известный паттерн.<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876286'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2022-09-16T21:30:11+00:00">16.09.22, 21:30</time></span><div class='quote '>Суровая реальность когда система постоянно расширяется, и дополняется. Выдвигают новые условия, новые фичи и т.д.</div></div>Сосбсна, в этих случаях goto как раз и выручает. Я понимаю, что это не вполне интуитивно, но в исходном коде goto появился ровно по причине внезапно изменившегося ТЗ. <strong class='tag-b'>Majestio</strong> вас некисло так потроллил, сформулировав ТЗ так, что у вас все вводные сразу на руках. Уверяю, в рамках его условия, если я и выложу код, хотя боюсь, к тому времени конкурс уже будет закрыт, там goro не будет.]]></description>
        <author>Qraizer</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876298</guid>
        <pubDate>Fri, 16 Sep 2022 23:29:23 +0000</pubDate>
        <title>Сохранение и восстановление состояния обработки</title>
        <link>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876298</link>
        <description><![CDATA[Wound: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876295'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2022-09-16T22:28:44+00:00">16.09.22, 22:28</time></span><div class='quote '>Судя по этой диаграмме все ProcessN обрывают выполнение программы. </div></div><br>
Вообще это показаны вызовы. Что откуда вызывается. У тебя на блок схеме(и в условии задачи так же) - решения(DecisionN) - в зависимости от результата(true/false), который сделал процесс, определяют какой процесс будет вызван следующим. Но сам процесс - никак не участвует в передаче управления кому либо, он лишь выполняет некие операции. Вот и получается что на схеме показаны вызовы от решений(Decision), а стрелки от процессов, всегда направлены на соответствующее процессу решение. Процес1 всегда ссылается на решени1, Процесс2 на решение2, процес3 на решение3 и т.д. Поэтому странно считать что ProcessN - что то там обрывает. Он не обрывает выполнение программы, он просто ничего не вызывает, и ни накого не ссылается, просто выполняет определенную операцию и все. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2022-09-16T23:36:45+00:00">16.09.22, 23:36</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876297'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2022-09-16T23:18:14+00:00">16.09.22, 23:18</time></span><div class='quote '>А зачем мне «восстанавливать схему», если оно отображена в коде как есть?</div></div><br>
Во первых в твоем этом коде уже можно запутаться, ты помнишь свой аргумент про то, сколько человек может вещей в уме держать одновременно? У тебя тут как минимум 4 метки и 4 процесса, перемешанные в условиях, что уже ломает общую картину, а ведь это только 4 процесса&#33; Если их тут будет даже не 50, а еще столько уже - это уже будет нечитаемое говно, даже с учетом твоего форматирования.<br>
Потом, то что ты метку, вызов функции, потом условный оператор вместе с телом зарядил в одну строчку - это вообще отдельный лол. Потом эту шнягу такой сохраняешь, а какая нибудь падла типа IDE, или еще какой нибудь штуки, неверно раздуплилась с табами в перемешку с пробелами, и получилась каша, снова форматируй.  :D <br>
Потом ты взял эталонный спагети код, отформатировал его - чтоб визуально не наблюдать этот звиздец, и выдаешь это за ахеренное архитектурное решение. Но в нем даже при 4-рех процессах, уже глаза разбегаются&#33;]]></description>
        <author>Wound</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876297</guid>
        <pubDate>Fri, 16 Sep 2022 23:18:14 +0000</pubDate>
        <title>Сохранение и восстановление состояния обработки</title>
        <link>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876297</link>
        <description><![CDATA[korvin: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876296'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2022-09-16T22:43:56+00:00">16.09.22, 22:43</time></span><div class='quote '>А теперь ты покажи, как ты будешь востанавливать изначальную блоксхему из всех этих goto, особенно в каких нибудь плюсах.<br>
Вангую щас полетят &quot;аргументы&quot; в стиле - гляну на код, закрою глаза и сразу в мозгу схема нарисуется</div></div><br>
А зачем мне «восстанавливать схему», если оно отображена в коде как есть?<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">int main()</div><div class="code_line">{</div><div class="code_line">PROC_1 : process_1() ; if (decision_1()) goto PROC_4 ; else goto PROC_3 ;</div><div class="code_line">PROC_2 : process_2() ; if (decision_2()) goto PROC_3 ; else goto PROC_4 ;</div><div class="code_line">PROC_3 : process_3() ; if (decision_3()) goto PROC_2 ; else goto PROC_1 ;</div><div class="code_line">PROC_4 : process_4() ; if (decision_4()) goto EXIT &nbsp; ; else goto PROC_2 ;</div><div class="code_line">EXIT:</div><div class="code_line">&nbsp;&nbsp; &nbsp;return 0;</div><div class="code_line">}</div></ol></div></div></div></div><br>
<br>
Странный ты, наплодил себе классов, теперь без сгенерированной диаграммы не можешь разобраться в коде )]]></description>
        <author>korvin</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876296</guid>
        <pubDate>Fri, 16 Sep 2022 22:43:56 +0000</pubDate>
        <title>Сохранение и восстановление состояния обработки</title>
        <link>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876296</link>
        <description><![CDATA[Wound: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876295'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2022-09-16T22:28:44+00:00">16.09.22, 22:28</time></span><div class='quote '>И что?</div></div><br>
Ничего. Просто это означает что у меня из готовых классов, хоть даже их будет 50, проще будет востановить изначальную схему, чем у тебя с goto.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876295'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2022-09-16T22:28:44+00:00">16.09.22, 22:28</time></span><div class='quote '>Ужас какой. А вот эти *Context — они чему соответствуют на изначальной схеме? Судя по этой диаграмме все ProcessN обрывают выполнение программы. </div></div><br>
Это базовая диаграмма на всякий шлак, не нужное можно выбросить и оставить только нужное. Расположить как тебе нравится.<br>
Ужас будет когда твой switch/goto кто то будет разгребать. Вот там да - будет ужас. <br>
<br>
А например, если выкинуть весь вспомогательный шлак и отфильтровать не нужное, то в сухом остатке останется вот такая схема:<br>
<div class="tag-spoiler spoiler closed"><div class="spoiler_header" onclick="openCloseParent(this)">Скрытый текст</div><div class="body"><br>
<span class="b-attach" data-size="54128" data-hits="254" data-attach-id="63954" data-attach-post-id="3876296">
			<span class="b-attach__title"></span><a class='b-attach-link' href='https://forum.sources.ru/index.php?act=Attach&amp;type=post&amp;id=3876296&amp;attach_id=63954' title='Скачать файл' target='_blank'>scheme2.jpg</a> (, : 254)
		</span><br>
</div></div> <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2022-09-16T22:46:49+00:00">16.09.22, 22:46</time></span></span><br>
На картинке это конечно херово показывать, но в IDE, я сразу могу ткнуть кнопку код, и тогда, когда я тыкну на ноду Decision, мне сразу откроется ее код, в котором идет условие. Т.е. я находу могу понять когда оно будет ссылаться на один процес, а когда на другой. Соответственно схема у меня уже готовая, даже разгребать ничего не нужно. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2022-09-16T22:53:03+00:00">16.09.22, 22:53</time></span></span><br>
А теперь ты покажи, как ты будешь востанавливать изначальную блоксхему из всех этих goto, особенно в каких нибудь плюсах. <br>
Вангую щас полетят &quot;аргументы&quot; в стиле - гляну на код, закрою глаза и сразу в мозгу схема нарисуется  :lol:]]></description>
        <author>Wound</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876295</guid>
        <pubDate>Fri, 16 Sep 2022 22:28:44 +0000</pubDate>
        <title>Сохранение и восстановление состояния обработки</title>
        <link>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876295</link>
        <description><![CDATA[korvin: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876294'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2022-09-16T22:14:33+00:00">16.09.22, 22:14</time></span><div class='quote '>если ты заметил у меня возвращается там не просто строка, а поле класса</div></div><br>
И что?<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876294'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2022-09-16T22:14:33+00:00">16.09.22, 22:14</time></span><div class='quote '>Вот пример того что сгенерировалось на том, что уже там есть:</div></div><br>
Ужас какой. А вот эти *Context — они чему соответствуют на изначальной схеме? Судя по этой диаграмме все ProcessN обрывают выполнение программы.]]></description>
        <author>korvin</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876294</guid>
        <pubDate>Fri, 16 Sep 2022 22:14:33 +0000</pubDate>
        <title>Сохранение и восстановление состояния обработки</title>
        <link>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876294</link>
        <description><![CDATA[Wound: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876293'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2022-09-16T22:09:03+00:00">16.09.22, 22:09</time></span><div class='quote '>Попробуй добавить ещё 45 процессов и ветвлений (decision), и сгенерировать схему. Можешь приложить скриншот сюда — посмотрим.</div></div><br>
Ну во первых мне честно лень добавлять еще 45 процессов. Это тупая копипаста получится. Схема от этого особо не изменится, если ты заметил у меня возвращается там не просто строка, а поле класса, генератор построит примерно такую же блоксхему как на твоем скрине, т.к. каждый объект решения будет ссылаться на соответствующие процессы, единственное что там не будет писать Yes/No, но связи понятны будут.<br>
Вот пример того что сгенерировалось на том, что уже там есть:<br>
<div class="tag-spoiler spoiler closed"><div class="spoiler_header" onclick="openCloseParent(this)">Скрытый текст</div><div class="body"><br>
<span class="b-attach" data-size="83866" data-hits="271" data-attach-id="63953" data-attach-post-id="3876294">
			<span class="b-attach__title"></span><a class='b-attach-link' href='https://forum.sources.ru/index.php?act=Attach&amp;type=post&amp;id=3876294&amp;attach_id=63953' title='Скачать файл' target='_blank'>scheme.jpg</a> (, : 271)
		</span><br>
</div></div> <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2022-09-16T22:15:18+00:00">16.09.22, 22:15</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876293'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2022-09-16T22:09:03+00:00">16.09.22, 22:09</time></span><div class='quote '>Да при том, что спагеттность зависит не от того, используешь ты goto или объекты, а от плохой структурированности архитектуры приложения.</div></div><br>
Как показывает практика и мой личный опыт, практически в 99% случаев код с goto - представляет из себя спагети-код. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2022-09-16T22:16:34+00:00">16.09.22, 22:16</time></span></span><br>
Еще в Сях так или иначе goto можно оправдать когда надо вылететь из <span class="tag-color tag-color-named" data-value="red" style="color: red">-за МКАДа</span> куда то в конец функции на Cleanup, и то это не всегда оправдано. А уж в плюсах - этот goto нахрен не упал, ИМХО.]]></description>
        <author>Wound</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876293</guid>
        <pubDate>Fri, 16 Sep 2022 22:09:03 +0000</pubDate>
        <title>Сохранение и восстановление состояния обработки</title>
        <link>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876293</link>
        <description><![CDATA[korvin: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876292'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2022-09-16T21:53:40+00:00">16.09.22, 21:53</time></span><div class='quote '>А причем тут что я разгребал и то что мы обсуждаем? Я тебе могу тоже задать вопрос ты что никогда спагети-код написанный в стиле ассемблера, с максимальной длиной переменных и идентификаторов в две с половиной буквы и кучей к месту и не к месту меток, не разгребал?</div></div><br>
Да при том, что спагеттность зависит не от того, используешь ты goto или объекты, а от плохой структурированности архитектуры приложения. Попробуй добавить ещё 45 процессов и ветвлений (decision), и сгенерировать схему. Можешь приложить скриншот сюда — посмотрим, сколько там будет стрелок и их пересечений.]]></description>
        <author>korvin</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876292</guid>
        <pubDate>Fri, 16 Sep 2022 21:53:40 +0000</pubDate>
        <title>Сохранение и восстановление состояния обработки</title>
        <link>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876292</link>
        <description><![CDATA[Wound: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876289'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2022-09-16T21:46:39+00:00">16.09.22, 21:46</time></span><div class='quote '>А я скачал и посмотрел: куча бойлерплейта, и всякие вспомогательные файлы студии. </div></div><br>
Ну так вот тебе и ответ откуда там 92 килобайта. Уж извини не я делал плюсы и всякие сишарпы, но с другой стороны и руками я его не писал, IDE все само генерило. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2022-09-16T21:55:14+00:00">16.09.22, 21:55</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876291'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2022-09-16T21:50:17+00:00">16.09.22, 21:50</time></span><div class='quote '>Что, никогда стектрейсы фреймворков с DI-контейнерами не разгребал, например? ) </div></div><br>
А причем тут что я разгребал и то что мы обсуждаем? Я тебе могу тоже задать вопрос ты что никогда спагети-код написанный в стиле ассемблера, с максимальной длиной переменных и идентификаторов в две с половиной буквы и кучей к месту и не к месту меток, не разгребал?]]></description>
        <author>Wound</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876291</guid>
        <pubDate>Fri, 16 Sep 2022 21:50:17 +0000</pubDate>
        <title>Сохранение и восстановление состояния обработки</title>
        <link>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876291</link>
        <description><![CDATA[korvin: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876288'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2022-09-16T21:45:16+00:00">16.09.22, 21:45</time></span><div class='quote '>Да ну, какая беготня? Я если честно не понимаю твоих аргументов. </div></div><br>
Что, никогда стектрейсы фреймворков с DI-контейнерами не разгребал, например? )]]></description>
        <author>korvin</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876290</guid>
        <pubDate>Fri, 16 Sep 2022 21:50:03 +0000</pubDate>
        <title>Сохранение и восстановление состояния обработки</title>
        <link>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876290</link>
        <description><![CDATA[Wound: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876289'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2022-09-16T21:46:39+00:00">16.09.22, 21:46</time></span><div class='quote '>Что там искать? Там код десять строчек. А искать ту реализацию метода интерфейса, которая действительно была вызвана, — вот это настоящее приключение. </div></div><br>
Да то там искать, как не вижу goto, а я довольно редко его встречаю, в основном в индусских примерах WinAPI на MSDN&#39;e, так сидишь смотришь - где там этот индус метки понаставил, и каким хером я туда попаду, и почему я не попаду в другое место. И вроде кода 40 строк, а сидишь как олень метки эти ищешь. И про какую ту реализацию метода ты говоришь? В чем у тебя проблемы с поиском методов я не понимаю?]]></description>
        <author>Wound</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876289</guid>
        <pubDate>Fri, 16 Sep 2022 21:46:39 +0000</pubDate>
        <title>Сохранение и восстановление состояния обработки</title>
        <link>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876289</link>
        <description><![CDATA[korvin: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876286'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2022-09-16T21:30:11+00:00">16.09.22, 21:30</time></span><div class='quote '>Искать метку глазами, в незнакомом коде - то еще удовольствие</div></div><br>
Что там искать? Там код десять строчек. А искать ту реализацию метода интерфейса, которая действительно была вызвана, — вот это настоящее приключение. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2022-09-16T21:48:55+00:00">16.09.22, 21:48</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876286'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2022-09-16T21:30:11+00:00">16.09.22, 21:30</time></span><div class='quote '>Я тебе в личку скинул пароль от своего архива. Если бы ты его скачал и посмотрел что там, может быть ты бы понял почему там 92 килобайта. </div></div><br>
А я скачал и посмотрел: куча бойлерплейта, и всякие вспомогательные файлы студии.]]></description>
        <author>korvin</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876288</guid>
        <pubDate>Fri, 16 Sep 2022 21:45:16 +0000</pubDate>
        <title>Сохранение и восстановление состояния обработки</title>
        <link>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876288</link>
        <description><![CDATA[Wound: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876287'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2022-09-16T21:41:44+00:00">16.09.22, 21:41</time></span><div class='quote '>Где из пять? Их четыре, stop/default — не процесс. И не нужно понимать всё буквально. </div></div><br>
Я изначально сделал 4, мне Majestio написал, сказал пятый тоже надо. Я выложил второй архив, чтоб максимально соответствовало условию. Но не суть важно.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876287'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2022-09-16T21:41:44+00:00">16.09.22, 21:41</time></span><div class='quote '>Нет, не превращается. Беготня по классам-родителям-наследникам туда-сюда — вот настоящее спагетти =) </div></div><br>
Да ну, какая беготня? Я если честно не понимаю твоих аргументов. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2022-09-16T21:46:26+00:00">16.09.22, 21:46</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876287'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2022-09-16T21:41:44+00:00">16.09.22, 21:41</time></span><div class='quote '>Нет, чтобы код писать понятный, лучше добавить костыль, да? </div></div><br>
А код проще некуда, и это к слову не костыль, особенно когда у тебя не хеловорлд, а огромный проект. Чтоб не рисовать схемки в тетрадочке, две кнопки ткнул, и смотришь связи.]]></description>
        <author>Wound</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876287</guid>
        <pubDate>Fri, 16 Sep 2022 21:41:44 +0000</pubDate>
        <title>Сохранение и восстановление состояния обработки</title>
        <link>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876287</link>
        <description><![CDATA[korvin: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876286'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2022-09-16T21:30:11+00:00">16.09.22, 21:30</time></span><div class='quote '>Ну тогда switch тут вообще не катит, последние же иследования говорят что 4+- 1, а у тебя аж 5 процессов в исходной задаче, вместе с default - 6</div></div><br>
Где из пять? Их четыре, stop/default — не процесс. И не нужно понимать всё буквально. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2022-09-16T21:43:28+00:00">16.09.22, 21:43</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876286'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2022-09-16T21:30:11+00:00">16.09.22, 21:30</time></span><div class='quote '>Много ума не надо, а сложнее в том, что все это превращается в спагети-код.</div></div><br>
Нет, не превращается. Беготня по классам-родителям-наследникам туда-сюда — вот настоящее спагетти =) <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2022-09-16T21:44:22+00:00">16.09.22, 21:44</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876286'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2022-09-16T21:30:11+00:00">16.09.22, 21:30</time></span><div class='quote '>Ну и плюс в MSVS есть диаграмма классов, которую можно сгенерировать из уже написаной проги.</div></div><br>
Нет, чтобы код писать понятный, лучше добавить костыль, да?]]></description>
        <author>korvin</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876286</guid>
        <pubDate>Fri, 16 Sep 2022 21:30:11 +0000</pubDate>
        <title>Сохранение и восстановление состояния обработки</title>
        <link>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876286</link>
        <description><![CDATA[Wound: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876285'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2022-09-16T21:15:58+00:00">16.09.22, 21:15</time></span><div class='quote '>Это и есть нарушение принципа YAGNI. Это «потом расширять» может никогда не наступить и в итоге у тебя overengineering на ровном месте.<br>
</div></div><br>
Судя по описанию в вики, принцип YAGNI нарушается тогда, когда ты делаешь то, что тебе нахер не упало, но по твоим ощущениям в будущем может пригодится. Например в моем подходе таких функций/методов нет. Там все нужно. А то тебя щас послушаешь, так выйдет так что и принципы SOLID противоречат YAGNI, и вообще все надо писать в main, спагети-кодом, а потом когда заказчик прибежит с очередными требованиями - срочно надо все рефакторить и обязательно снова спагети-кодом, а как иначе? Зачем усложнять да? <br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876285'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2022-09-16T21:15:58+00:00">16.09.22, 21:15</time></span><div class='quote '>Более-менее есть:</div></div><br>
Ну тогда switch тут вообще не катит, последние же иследования говорят что 4+- 1, а у тебя аж 5 процессов в исходной задаче, вместе с default - 6  :D <br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876285'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2022-09-16T21:15:58+00:00">16.09.22, 21:15</time></span><div class='quote '>1) он не отдельный: после него идёт проверка по результатам которой выбирается следующий процесс — вот тебе и связь. Только ты раскидал её по разным файлам. Теперь, чтобы восстановить картину, тебе понадобится сгенерировать какую-нибудь диаграмму классов/зависимостей, а ля UML, вместо того, чтобы сразу написать наглядный код.</div></div><br>
А зачем мне ее востанавливать, если я делал по уже созданной схеме? Это какой то реверс-инжиниринг? Тогда даже в этом случае - понять что происходит у меня будет проще, чем с goto тем же. Если ты внимательно посмотришь - там кода на строчек 15-20, все остальное это всякие проверки, исключения и тело класса. А че, пустой класс с конструктором уже около 10 строк занимает.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876285'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2022-09-16T21:15:58+00:00">16.09.22, 21:15</time></span><div class='quote '>2) ничто не мешает мне вынести реализации процессов в отдельные процедуры, что я ± и сделал в своих примерах, сохранив при этом общую схему в одном месте, прям как на картинке.<br>
</div></div><br>
Ну так после ивента ТС скажет, а давайте теперь еще 45 процессов добавим, чтоб 50 получилось. И вся твоя наглядность рухнет, потому что как ты там выше написал чел больше 4 вещей одновременно воспринимать не может. А у тебя их 50.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876285'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2022-09-16T21:15:58+00:00">16.09.22, 21:15</time></span><div class='quote '>Падающие на датацентры метеориты — суровая реальность?</div></div><br>
Суровая реальность когда система постоянно расширяется, и дополняется. Выдвигают новые условия, новые фичи и т.д. <br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876285'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2022-09-16T21:15:58+00:00">16.09.22, 21:15</time></span><div class='quote '>Там нечем выносить. Применение goto там ничем не отличается от switch/case.</div></div><br>
Искать метку глазами, в незнакомом коде - то еще удовольствие, если тебе такой подход нравится - дело твое, я ж ниче против не имею. Только не нужно это преподносить как общепринятую практику.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876285'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2022-09-16T21:15:58+00:00">16.09.22, 21:15</time></span><div class='quote '>Архитектура «диктует» решение, а не наоборот. </div></div><br>
Вообще не понял о чем ты тут. Я написал что - я не видел что сделал ТС. И не могу прогнозировать придется ему там все переписывать с нуля, или просто добавить еще с десяток меток. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2022-09-16T21:31:55+00:00">16.09.22, 21:31</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876285'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2022-09-16T21:15:58+00:00">16.09.22, 21:15</time></span><div class='quote '>Ты сам себе противоречишь: определись, «много ума не надо» или «сложнее».</div></div><br>
Много ума не надо, а сложнее в том, что все это превращается в спагети-код.<br>
<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876285'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2022-09-16T21:15:58+00:00">16.09.22, 21:15</time></span><div class='quote '>Твоё решение — 92 килобайта, решение ТС — меньше килобайта. Расскажи ещё раз про сложность. </div></div><br>
Я тебе в личку скинул пароль от своего архива. Если бы ты его скачал и посмотрел что там, может быть ты бы понял почему там 92 килобайта. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2022-09-16T21:41:01+00:00">16.09.22, 21:41</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876285'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2022-09-16T21:15:58+00:00">16.09.22, 21:15</time></span><div class='quote '>Теперь, чтобы восстановить картину, тебе понадобится сгенерировать какую-нибудь диаграмму классов/зависимостей, а ля UML, вместо того, чтобы сразу написать наглядный код.</div></div><br>
Ну и плюс в MSVS есть диаграмма классов, которую можно сгенерировать из уже написаной проги. Я вот ради прикола сгенерировал. Прекрасно востановилась схема ТС. Могу скинуть скрин если нужно.]]></description>
        <author>Wound</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876285</guid>
        <pubDate>Fri, 16 Sep 2022 21:15:58 +0000</pubDate>
        <title>Сохранение и восстановление состояния обработки</title>
        <link>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876285</link>
        <description><![CDATA[korvin: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876284'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2022-09-16T20:57:28+00:00">16.09.22, 20:57</time></span><div class='quote '>закладывается с таким прицелом, чтоб это потом проще было бы расширять и сопровождать.</div></div><br>
Это и есть нарушение принципа YAGNI. Это «потом расширять» может никогда не наступить и в итоге у тебя overengineering на ровном месте.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876284'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2022-09-16T20:57:28+00:00">16.09.22, 20:57</time></span><div class='quote '>А есть какие то четкие критерии? Ты вот сделал для 5 процессов свой switch, завтра тебе скажут - у нас тут еще 2 процесса добавилось, ты их добавишь, потом тебе придут скажут - еще один, потом еще 2, и начиная со скольки ты задумаешься о том, что твой switch тебя уже порядком начал напрягать и порабы это все отрефакторить?</div></div><br>
Более-менее <a class='tag-url' href='https://habr.com/ru/company/infopulse/blog/399293/' target='_blank'>есть</a>:<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>Каждый программист знает, что возможности нашего мозга не безграничны. Есть ограничение на количество вещей, о которых мы можем думать. Это наш рабочий лимит памяти. Есть старый миф о том, что человек может держать в памяти одновременно 7±2 объектов. Это называется &quot;Магическое число семь&quot; и оно на самом деле не очень точное. Последние исследования говорят о числе 4±1, а то и меньше. В любом случае — количество идей, которые мы можем держать одновременно в голове, весьма ограниченно.</div></div><br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876284'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2022-09-16T20:57:28+00:00">16.09.22, 20:57</time></span><div class='quote '>У меня точно жопы не будет, т.к. каждый процесс - рассматривается как отдельная сущность.</div></div><br>
Но<br>
1) он не отдельный: после него идёт проверка по результатам которой выбирается следующий процесс — вот тебе и связь. Только ты раскидал её по разным файлам. Теперь, чтобы восстановить картину, тебе понадобится сгенерировать какую-нибудь диаграмму классов/зависимостей, а ля UML, вместо того, чтобы сразу написать наглядный код.<br>
2) ничто не мешает мне вынести реализации процессов в отдельные процедуры, что я ± и сделал в своих примерах, сохранив при этом общую схему в одном месте, прям как на картинке.<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">case 1:</div><div class="code_line">&nbsp;&nbsp; &nbsp;process1();</div><div class="code_line">&nbsp;&nbsp; &nbsp;state = decision1() ? 4 : 3;</div><div class="code_line">&nbsp;&nbsp; &nbsp;break;</div></ol></div></div></div></div><br>
<br>
Ну а мой пример на Go позволяет так же всё довольно легко расщирять, при желании/необходимости и/или сохранять схему в одном месте.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876284'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2022-09-16T20:57:28+00:00">16.09.22, 20:57</time></span><div class='quote '>Так это не что то из ряда вон выходящее, а вполне себе суровая реальность.</div></div><br>
Падающие на датацентры метеориты — суровая реальность?<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876284'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2022-09-16T20:57:28+00:00">16.09.22, 20:57</time></span><div class='quote '>Ну разве что если сидеть выносить себе мозги этим goto...</div></div><br>
Там нечем выносить. Применение goto там ничем не отличается от switch/case.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876284'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2022-09-16T20:57:28+00:00">16.09.22, 20:57</time></span><div class='quote '>Ну я пока не видел его решения, может быть ему не придется ничего пересматривать, откуда я знаю.</div></div><br>
Архитектура «диктует» решение, а не наоборот. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2022-09-16T21:18:02+00:00">16.09.22, 21:18</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876284'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2022-09-16T20:57:28+00:00">16.09.22, 20:57</time></span><div class='quote '>Ну и плюс расписать всю его схему на if/else или switch|case - много ума не надо(это даже не интересно), я сразу же отказался от этого варианта, т.к. это сложнее</div></div><br>
Ты сам себе противоречишь: определись, «много ума не надо» или «сложнее».<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876284'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2022-09-16T20:57:28+00:00">16.09.22, 20:57</time></span><div class='quote '>это сложнее, чем тот подход, который например, я выбрал.</div></div><br>
Твоё решение — 92 килобайта, решение ТС — меньше килобайта. Расскажи ещё раз про сложность.]]></description>
        <author>korvin</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876284</guid>
        <pubDate>Fri, 16 Sep 2022 20:57:28 +0000</pubDate>
        <title>Сохранение и восстановление состояния обработки</title>
        <link>https://forum.sources.ru/index.php?showtopic=429456&amp;view=findpost&amp;p=3876284</link>
        <description><![CDATA[Wound: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876283'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2022-09-16T20:37:22+00:00">16.09.22, 20:37</time></span><div class='quote '>Никакой портянки.</div></div><br>
Портянка и спагети-код, к бабке не ходи.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876283'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2022-09-16T20:37:22+00:00">16.09.22, 20:37</time></span><div class='quote '>Вот когда требования изменятся, тогда и будешь тратить время на рефакторинг. YAGNI</div></div><br>
Не не не, то что я озвучил - никак не нарушает принцип YAGNI, просто сам подход и архитектура - закладывается с таким прицелом, чтоб это потом проще было бы расширять и сопровождать. А не переписывать с нуля каждый раз.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876283'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2022-09-16T20:37:22+00:00">16.09.22, 20:37</time></span><div class='quote '>Рефакторить нужно вовремя</div></div><br>
А есть какие то четкие критерии? Ты вот сделал для 5 процессов свой switch, завтра тебе скажут - у нас тут еще 2 процесса добавилось, ты их добавишь, потом тебе придут скажут - еще один, потом еще 2, и начиная со скольки ты задумаешься о том, что твой switch тебя уже порядком начал напрягать и порабы это все отрефакторить?<br>
<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876283'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2022-09-16T20:37:22+00:00">16.09.22, 20:37</time></span><div class='quote '>Если у тебя 50 процессов, никак не сгруппированных в подсистемы, то у тебя в любом случае будет жопа, хоть switch/case&#39;ом пиши, хоть объектами, хоть наглядную схему черти: запутаешься в переходах от объекта к объекту, и общая картина у тебя не соберётся в голове.<br>
</div></div><br>
У меня точно жопы не будет, т.к. каждый процесс - рассматривается как отдельная сущность. И соответственно нет смысла рассматривать его в контексте всей системы. Вот когда само условие задачи изменится так, что сам процесс перестанет иметь смысл, вот тогда возможно мне и придется чего то пересматривать. А до этого - мне не нужно держать общую картину в голове.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876283'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2022-09-16T20:37:22+00:00">16.09.22, 20:37</time></span><div class='quote '>А если метеорит упадёт на датацентр?</div></div><br>
Так это не что то из ряда вон выходящее, а вполне себе суровая реальность. <br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876283'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2022-09-16T20:37:22+00:00">16.09.22, 20:37</time></span><div class='quote '>Тут ничего не пролетает.</div></div><br>
Ну разве что если сидеть выносить себе мозги этим goto...<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=429456&view=findpost&p=3876283'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2022-09-16T20:37:22+00:00">16.09.22, 20:37</time></span><div class='quote '>ТСу надо пересмотреть архитектуру проекта в первую очередь. А goto тут не при чём. </div></div><br>
Ну я пока не видел его решения, может быть ему не придется ничего пересматривать, откуда я знаю. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2022-09-16T21:00:21+00:00">16.09.22, 21:00</time></span></span><br>
Ну и плюс расписать всю его схему на if/else или switch|case - много ума не надо(это даже не интересно), я сразу же отказался от этого варианта, т.к. это сложнее, чем тот подход, который например, я выбрал. Про другие подходы - я не говорю, т.к. не видел.]]></description>
        <author>Wound</author>
        <category>Holy Wars</category>
      </item>
	
      </channel>
      </rss>
	