Я уже даже не знаю, что делать. Мне кажется, что я перепробовал всё, что вообще возможно. И безрезультатно.

Порой мне приходится врать ему, что я каждый день пытаюсь, что я каждый день пробую что-то новое. Но это не так. Эта череда неудач сильно демотивирует.

Мне и вправду жаль его. Но я ничего не могу сделать.

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

Инструкция по отладке механизма? Какого механизма? Я уже было хотел спрятать её обратно, но потом меня осенило.

У него в голове тоже ведь механизм. Может, стоит попробовать? Я ничего не потеряю, если попробую.

Думаю, мне стоит изучить эту инструкцию.

О Бессонном автомате

Астро, что за книги вы там читаете в своём "книжном клубе"?!

На модуле есть два экрана и музыкальная шкатулка. Уложите шкатулку спать.

  • Верхний экран показывает три переменные, которые потребуется отправить.
  • Нижний экран показывает состояние шкатулки или текущий ввод, состоящий из стековой и битовой строк.
  • У шкатулки есть 4 состояния:
    1. Awake: шкатулка бодрствует. Ввод недоступен.
    2. Ready: шкатулка пытается уснуть. Ввод доступен.
    3. Submitting: отправка и проверка переменной.
    4. Asleep: шкатулка уснула. Модуль решён.
  • Стороны шкатулки нажимаются и отвечают за разные действия:
    • Левая и правая стороны вводят 0 и 1 соответственно.
    • Нижняя сторона полностью сбрасывает ввод.
    • Передняя сторона удаляет последний символ верхней (стековой) строки. Слишком частое нажатие (минимум дважды за 0.2 секунды) повлечет за собой регистрацию ошибки.
    • Нажатие крышки отправит ввод. Наведение на крышку в течении 3 секунд переведет шкатулку из состояния Awake в состояние Ready.
  • Любая ошибка переводит шкатулку в состояние Awake.
  • Зажатие индикатора состояния модуля даст дополнительную визуальную индикацию состояния шкатулки. Повторное зажатие отключит данную индикацию.

Отладка механизма: инструкция.

Механизм является конечным автоматом. Если значение (в тридцатишестеричной системе счисления) первого символа серийного номера нечетно, автомат имеет 5 состояний, иначе - 6. Пронумеруйте состояния как q0, q1, ...

Переключения состояний состоят из:

  • Начального состояния q(t),
  • Входа x,
  • Конечного состояния q(t+1),
  • Выхода y.

Данный автомат генерируется по данному правилу:

  • При входе x0: qi переключается на q(i+z0(i)).
  • При входе x1: qi переключается на q(i+z1(i)).
  • При входе x2: qi переключается на q(|i+z2(i)|).
Функции zi определены на последней странице инструкции.

Если состояния под таким номером не существует, то и такого переключения тоже не будет.

Выход переключения qi → qj определяется так:
  • Если i<j, то выход - y0,
  • Если i>j, то выход - y1,
  • Если i=j, то выход - y2.

Подсчитайте количество использований для элементов множества конечных состояний, множества входов и множества выходов. Назначьте им двоичные представления так, что:

  • Элементы, которые не использовались, должны полностью игнорироваться.
  • Представления среди множества не могут повторяться.
  • Представления должны иметь минимальную возможную длину. При этом, среди множества, все представления должны быть одинаковой длины.
  • Чем чаще используется элемент, тем меньше единиц должно быть в его представлении.
  • В случае равных количеств использований, элементы с меньшим индексом получают наименьшие возможные числа (если перевести двоичное представление в десятичную систему счисления).
Полное соблюдение этих правил даст единственное и верное представление элементов множеств.

Биты представления q называются w0, w1, ...; биты представления x называются u0, ...; биты представления y называются v0, ...

Составьте таблицу истинности для wi(t+1), vi, а также Ri и Si (или Ji и Ki, если на шкатулке нарисованы облака). Модуль запрашивает Ri или Ji как fi, а Si или Ki как Fi. Таблица составляется от всех возможных значений ui и wi(t). Для получения значений R, S, J и K используйте таблицу ниже:

w(t)w(t+1)RSJK
00*00*
01011*
1010*1
110**0

Найдите (и, при желании, оптимизируйте (например, с помощью карты Карно)) выражение для требуемых переменных. Поскольку вы можете использовать только 2 оператора (НЕ/NOT и НЕ-ИЛИ/NOR), используйте законы Де-Моргана (!x + !y = !(xy); !x!y = !(x+y)). Создайте стек из элементов ниже:

0Добавляет в стек w0.
1Добавляет в стек w1.
2Добавляет в стек w2.
3Добавляет в стек u0.
4Добавляет в стек u1.
-Инвертирует верхний элемент стека.
!Применяет NOR для двух верхних элементов стека.

Отправьте стек, заменяя его символы данными 3-битными последовательностями:

00031000
00141011
010 1102
011-111!

Представьте четвертый и пятый символы серийного номера в виде их алфавитных позиций и переведите их в троичную систему счисления. Числа должны иметь три трита, если это не так, то дополните начальными нулями до трех тритов. Для z0 используйте старший трит, для z1 - второй, а для z2 - младший.

Для столбцов используйте четвертый символ серийного номера, а для строк - пятый.

Если какая-либо функция вернула значение по модулю большее чем 5, то отнимайте/прибавляйте 3 до тех пор, пока полученное значение не будет в диапазоне [-5; 5].

z0012
0SN6 - 5AA - DLI - UI
1EMP - NOEMP3 - B2 * PP - 3
2BH - IPT - 32 * P - SN3 - 2
z1012
0SN3 - 2 * i3 * B - D - 2 * i4 + FRK + TRN - BOB - SND - 2 * i
12 + PAR + SER - 2 * ifloor(SN2 / 4) - 2 * iNOEMP + I - 2 * i
24 + P - LI - UI - 2 * iPT + AA - EMP - 2 * i(SN6 % 4) + BH + floor(PP / 2) - 2 * i
z2012
0round((SN2 - SN3 - SN6) / 3 - (1 + EMP) * i / (1 + BH))2 + B - floor((D + 7) * i / (3 + UI))6 - I - 2 * i * (BOB + SIG + MSA + IND)
12 + PP - ceil(i * PT / 2)1 + AA - i * (I - CLR - CAR - FRQ - NSA)LI - i * (1 + RJ + PS + RCA - DVI)
23 + UI - i * (round(2 * (5 - SN3) / 3) + BOB)4 - i * (1 + floor((1 + P) / (1 + (SN2 % 3))))3 + ceil(round(SN6 / 2) / 2) - i * (2 + ceil(NOEMP / 2))

Переменные в данной таблице:

  • SN2, SN3, SN6 - второй, третий и шестой символы серийного номера соответственно. Для SN2 переведите из тридцатишестеричной системы счисления в десятичную.
  • B, BH, AA, D - общее количество батареек, количество держателей батареек, количество батареек типа AA и типа D соответственно.
  • P, PT, PP, EMP, NOEMP, DVI, PS, RCA, RJ, PAR, SER - количество портов, количество различных типов портов, количество плат для портов, количество пустых и непустых плат, количество портов типа DVI-D, PS/2, Stereo RCA, RJ-45, Parallel и Serial соответственно.
  • I, LI, UI - количество индикаторов, количество горящих и негорящих индикаторов соответственно.
  • <имя индикатора> - наличие индикатора с таким именем. Если такой индикатор имеется, эта переменная равна 1, иначе 0.