mannaro
@mannaro
Умею профессионально гуглить

Конечные автоматы и их практическое применение?

День добрый! Есть у нас на сайте раздел с логикой. После того, как пользователь ее программирует (путем выставления нужных ему параметров), он переходит к небольшому тесту. Когда он ввел ответ на вопрос "ааа", то в зависимости от заданных параметров он перейдет к вопросу "2. q" или куда-то в другое место. Таких блоков может быть сколько угодно. Соединены они с помощью логического OR.

[[[ IF ]]]
(aaa == qa || aaa == qb || ... || aaa === qw) => 2. q
[[[ OR ]]]
(...) => 3. w 
[[[ OR ]]]
(...) => 4. d
[[[ OR ]]]
 ...
[[[ OR ]]]
(...) = x. что-то


JSON представление
[{
  "conditions": [{
    "expected": "FC3fbfZiRMxCL7Aq8"
  }, {
    "type": "or",
    "expected": "5zEsXWBLLRGEH9p2D"
  }, {
    "type": "or",
    "expected": "MqNeEER2KT662ySdR"
  }, {
    "type": "or",
    "expected": "HgyiSGnxTn8vEqp9t"
  }],
  "next": "SJkQW7phpwKomnSuz"
}, {
  "conditions": [{
    "expected": "38mpdXFf6p85LjENb"
  }, {
    "type": "and",
    "expected": "mht4gaX4CrJqGKRN2"
  }, {
    "type": "or",
    "expected": "Sg3AzPCoZ5aHJ6jCL"
  }, {
    "type": "or",
    "expected": "yCBMdkyTv626BJpxW"
  }],
  "next": "N4TAxk5crpLSoHzTx"
}]

Тут приведены 2 блока (на скриншоте виден только первый).
Где "next" - переход если блок возвращает true


Таким образом появилось желание организовать это все с помощью конечных автоматов, только вот практики и опыта в этом маловато. Стоит ли копать в эту сторону или я что-то не понимаю?

2b2357febcd74eb2b37741aca538e024
  • Вопрос задан
  • 542 просмотра
Решения вопроса 1
mbeloshitsky
@mbeloshitsky
Вебдев, систем оперейшонс, ж.д. автоматика
Так вы и так уже организовали конечный автомат, где ваши MqNeEER2KT662ySdR, HgyiSGnxTn8vEqp9t, SJkQW7phpwKomnSuz - это его состояния, а переходы между ними - это:
  1. ответы пользователя;
  2. ваши перенаправления пользователя после того, как он ответит (переведет ваш КА в новое состояние) на новые вопросы / куда-нибудь в другое место.

Вам нужно только аккуратно отнестись к тому, кто какие переходы совершать может. Например, допустим что вы делаете сайт с контрольными тестами. Ваш сервер сайта должен совершать только свои переходы и не должен отвечать за пользователя, а пользователь - наоборот - может только отвечать на вопросы, но сам переходить между ними не может. Естественно при другом изначальном замысле и правила могут быть иные.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы