Задача про 2 ёмкости для жидкости

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Существует классическая задача:

Есть 2 емкости: 5 литров и 3 литра. Как отмерить 4 литра жидкости используя только эти 2 емкости?

В этом тексте я решу эту задачу в общем виде при помощи конечного автомата.  Также я упомяну про малоизвестный язык программирования Dot. Методика конечного автомата хорошо изучена и поставлена на рельсы. Состоит из 3 фаз.

Фаза 1: перечислить все возможные состояния (комбинаторика)

Состояние определяется количеством жидкости в паре сосудов. Согласно комбинаторике по правилу умножения существует всего 24 состояния. Вот они все перечислены.

Фаза 2 перечислить все возможные входы. (из условий задачи)

Существует всего 5 легальных действий с бутылками. Вот их перечень.

Фаза 3 составить таблицу переходов

Этот пункт я пропущу так как таблица получится циклопических размеров. По правилу умножения 24*5=120 строк

Фаза 4 отрисовать граф состояний

Как гласит английская народная пословица “Картинка стоит тысячи слов” (A picture is worth a thousand words). Также мой универский профессор часто говорил, что инженеры - это про схемы. Поэтому представляю блок схему в виде ориентированного графа состояний для задачи про бутылки.

Я накропал на языке С консольную утилиту, которая прокручивает конечный автомат и сохраняет в файл составленный код на языке dot. Далее бесплатная утилита dot.exe поедает файл *.dot и преобразует его во всем известный *.svg файл. Наконец  браузер chrom.exe поедает *.svg и отрисовывает в окне на мониторе.

Глядя на этот ориентированный граф становится очевидным, что чтобы отмерить 4 литра надо выполнить следующую  процедуру из 6-ти инструкций:

есть еще одно решение

Easy!

Эта задача может служить отличной иллюстрацией для обучения теории конечных автоматов FSM. Конечные автоматы повсеместно используются в промышленной разработке, например, системного программного обеспечения.

Существует 8 недостижимых состояний: 1/5_1/3 1/5_2/3 2/5_1/3 2/5_2/3 3/5_1/3 3/5_2/3 4/5_1/3 4/5+2/3. В эти состояния никак не попасть как только не переливай содержимое сосудов.

Можно отмерить не только 4 лита, а все значения от 1 до 8 включительно.

вывод

Как видите, язык программирования Dot отлично подходит для автоматической отрисовки сложной векторной графики.

Буду признателен, если пришлете описания подобного рода логических задач в комментариях к тексту.

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Вы знали до этой статьи про язык программирования Dot?
20% да 2
80% нет 8
Проголосовали 10 пользователей. Воздержавшихся нет.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Вы когда-либо использовали язык программирования Dot?
14.29% да 1
85.71% нет 6
Проголосовали 7 пользователей. Воздержавшихся нет.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Вы когда-либо использовали векторную графику и *.svg файлы?
75% да 6
25% нет 2
Проголосовали 8 пользователей. Воздержавшихся нет.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Вы используете конечные автоматы при разработке программ?
50% да 3
50% нет 3
Проголосовали 6 пользователей. Воздержавшихся нет.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Вы использовали динамическое программирование для решения задач из prod(а)?
0% да 0
100% нет 5
Проголосовали 5 пользователей. Воздержался 1 пользователь.
Источник: https://habr.com/ru/post/662561/


Интересные статьи

Интересные статьи

В данной статье мы рассмотрим систему аутентификации пользователей и внешних систем в личном кабинете через сервер аутентификации Blitz Identity Provider. Согласно требованиям проекта, который мы...
Все «за» и «против» 1С-Битрикс, какие есть альтернативы и что выгоднее знать разработчику? Читать далее
Одна из самых важных (на мой взгляд) функций в Битрикс24 это бизнес-процессы. Теоретически они позволяют вам полностью избавиться от бумажных служебок и перенести их в эл...
Ранее в одном из наших КП добавление задач обрабатывалось бизнес-процессами, сейчас задач стало столько, что бизнес-процессы стали неуместны, и понадобился инструмент для массовой заливки задач на КП.
Если честно, к Д7 у меня несколько неоднозначное отношение. В некоторых местах я попискиваю от восторга, а в некоторых хочется топать ногами и ругаться неприличными словами.