ИНБО-20-23

Вариант №1

Задача №11

Конечный автомат Мура представлен графом на картинке ниже. Необходимо реализовать этот конечный автомат в виде класса. Переходы из состояния в состояние осуществляются с помощью методов, названия которых основаны на словах, указанных на дугах графа (см. пример ниже).

  1. Реализовать метод part_of_loop класса конечного автомата. Этот метод возвращает истину, если текущее состояние является частью какого-либо цикла графа (без учета меток дуг).

  2. Реализовать метод has_max_in_edges класса конечного автомата. Этот метод возвращает истину, если текущее состояние имеет максимальное число входных дуг в графе.

  3. Реализовать функцию main, возвращающую экземпляр класса конечного автомата.

  4. Реализовать функцию test для тестирования класса конечного автомата на основе метрики покрытия ветвей (branch coverage). Требуемая степень покрытия: 100%.

  5. Реализовать метод store_var(имя, значение) для задания значений переменных. Эти переменные определяют выбор перехода там, где состояние имеет несколько выходных дуг, помеченных одним и тем же методом (см. граф).

  6. Реализовать обработку ошибок для методов переходов. Возвращаемое методом сообщение об ошибке является словом, которое определяет, оказался ли метод перехода неподдерживаемым ('unsupported') в данном состоянии или неизвестным ('unknown') для конечного автомата.

  7. Реализовать метод get_step класса конечного автомата. Этот метод возвращает число совершенных переходов.

Детали работы методов класса конечного автомата показаны на примере, приведенном далее. Переменная obj содержит объект этого класса.

obj.store_var('q', 1) # None
obj.store_var('g', 0) # None
obj.jump() # 'unknown'
obj.bolt() # None
obj.get_output() # 'h1'
obj.part_of_loop() # True
obj.split() # None
obj.has_max_in_edges() # True
obj.pan() # 'unknown'
obj.part_of_loop() # True
obj.get_output() # 'h0'
obj.open() # None
obj.part_of_loop() # False
obj.get_output() # 'h0'
obj.part_of_loop() # False
obj.erase() # None
obj.get_step() # 4
obj.get_output() # 'h0'
obj.part_of_loop() # False
obj.erase() # None
obj.get_step() # 5
obj.split() # 'unsupported'
obj.get_output() # 'h1'

Вариант №2

Задача №11

Конечный автомат Мура представлен графом на картинке ниже. Необходимо реализовать этот конечный автомат в виде класса. Переходы из состояния в состояние осуществляются с помощью методов, названия которых основаны на словах, указанных на дугах графа (см. пример ниже).

  1. Реализовать функцию main, возвращающую экземпляр класса конечного автомата.

  2. Реализовать функцию test для тестирования класса конечного автомата на основе метрики покрытия ветвей (branch coverage). Требуемая степень покрытия: 100%.

  3. Реализовать метод get_step класса конечного автомата. Этот метод возвращает число совершенных переходов.

  4. Реализовать метод let_var(имя, значение) для задания значений переменных. Эти переменные определяют выбор перехода там, где состояние имеет несколько выходных дуг, помеченных одним и тем же методом (см. граф).

  5. Реализовать обработку ошибок для методов переходов. Возвращаемое методом сообщение об ошибке является словом, которое определяет, оказался ли метод перехода неподдерживаемым ('unsupported') в данном состоянии или неизвестным ('unknown') для конечного автомата.

  6. Реализовать метод seen_method класса конечного автомата. Этот метод возвращает истину, если аргумент-метод уже успешно выполнялся ранее.

Детали работы методов класса конечного автомата показаны на примере, приведенном далее. Переменная obj содержит объект этого класса.

obj.seen_method('scale') # False
obj.let_var('x', 0) # None
obj.select_clean() # 'unknown'
obj.let_var('u', 0) # None
obj.let_var('a', 2) # None
obj.select_pull() # None
obj.seen_method('shift') # False
obj.get_step() # 1
obj.get_output() # 'y1'
obj.select_pull() # 'unsupported'
obj.select_hoard() # None
obj.select_step() # 'unknown'
obj.get_output() # 'y6'
obj.select_shift() # None
obj.let_var('u', 1) # None
obj.get_output() # 'y0'
obj.select_view() # 'unknown'
obj.seen_method('scale') # False
obj.select_hoard() # None
obj.let_var('a', 1) # None
obj.select_sway() # 'unknown'
obj.get_output() # 'y3'
obj.select_scale() # None
obj.get_step() # 5
obj.get_output() # 'y6'
obj.select_shift() # None
obj.let_var('u', 0) # None
obj.get_step() # 6
obj.select_clean() # 'unknown'
obj.seen_method('pull') # True
obj.select_rig() # 'unknown'
obj.get_output() # 'y6'
obj.select_shift() # None
obj.get_step() # 7
obj.let_var('u', 0) # None
obj.get_step() # 7
obj.select_step() # 'unknown'
obj.get_output() # 'y0'
obj.get_step() # 7
obj.select_hoard() # None
obj.get_output() # 'y1'
obj.select_lower() # 'unknown'
obj.select_hoard() # None
obj.select_step() # 'unknown'
obj.get_output() # 'y6'
obj.select_shift() # None
obj.seen_method('pull') # True
obj.get_step() # 10
obj.select_fade() # 'unknown'
obj.get_output() # 'y0'
obj.get_step() # 10

Вариант №3

Задача №11

Конечный автомат Мура представлен графом на картинке ниже. Необходимо реализовать этот конечный автомат в виде класса. Переходы из состояния в состояние осуществляются с помощью методов, названия которых основаны на словах, указанных на дугах графа (см. пример ниже).

  1. Реализовать обработку ошибок для методов переходов. Возвращаемое методом сообщение об ошибке является словом, которое определяет, оказался ли метод перехода неподдерживаемым ('unsupported') в данном состоянии или неизвестным ('unknown') для конечного автомата.

  2. Реализовать метод has_path_to класса конечного автомата. Этот метод возвращает истину, если из текущего состояния по графу можно добраться до состояния-аргумента (без учета меток дуг).

  3. Реализовать функцию main, возвращающую экземпляр класса конечного автомата.

  4. Реализовать функцию test для тестирования класса конечного автомата на основе метрики покрытия ветвей (branch coverage). Требуемая степень покрытия: 100%.

  5. Реализовать метод get_step класса конечного автомата. Этот метод возвращает число совершенных переходов.

Детали работы методов класса конечного автомата показаны на примере, приведенном далее. Переменная obj содержит объект этого класса.

obj.get_step() # 0
obj.move_trash() # None
obj.get_output() # 'g3'
obj.move_get() # None
obj.get_output() # 'g1'
obj.move_daub() # 'unsupported'
obj.get_step() # 2
obj.move_draw() # 'unknown'
obj.has_path_to('v0') # True
obj.move_get() # None
obj.move_turn() # 'unknown'
obj.get_output() # 'g4'
obj.move_race() # None
obj.get_output() # 'g2'
obj.move_daub() # None
obj.move_skew() # 'unknown'
obj.get_output() # 'g0'
obj.get_step() # 5

Вариант №4

Задача №11

Конечный автомат Мура представлен графом на картинке ниже. Необходимо реализовать этот конечный автомат в виде класса. Переходы из состояния в состояние осуществляются с помощью методов, названия которых основаны на словах, указанных на дугах графа (см. пример ниже).

  1. Реализовать обработку ошибок с помощью пользовательского класса исключения MooreError. При возбуждении (raise) исключения сообщение об ошибке является словом, которое определяет, оказался ли метод перехода неподдерживаемым ('unsupported') в данном состоянии или неизвестным ('unknown') для конечного автомата.

  2. Реализовать метод seen_method класса конечного автомата. Этот метод возвращает число успешных выполнений аргумента-метода.

  3. Реализовать функцию test для тестирования класса конечного автомата на основе метрики покрытия ветвей (branch coverage). Требуемая степень покрытия: 100%.

  4. Реализовать функцию main, возвращающую экземпляр класса конечного автомата.

  5. Реализовать метод has_path_to класса конечного автомата. Этот метод возвращает истину, если из текущего состояния по графу можно добраться до состояния-аргумента (без учета меток дуг).

  6. Реализовать метод get_step класса конечного автомата. Этот метод возвращает число совершенных переходов.

  7. Реализовать метод имя(значение) для задания значений переменных. Эти переменные определяют выбор перехода там, где состояние имеет несколько выходных дуг, помеченных одним и тем же методом (см. граф).

Детали работы методов класса конечного автомата показаны на примере, приведенном далее. Переменная obj содержит объект этого класса.

obj.seen_method('stop') # 0
obj.e(0) # None
obj.run('mute') # MooreError: 'unknown'
obj.get_step() # 0
obj.n(0) # None
obj.t(0) # None
obj.has_path_to('t0') # True
obj.seen_method('stop') # 0
obj.run('send') # None
obj.get_output() # 'e6'
obj.has_path_to('t3') # True
obj.seen_method('send') # 1
obj.has_path_to('t5') # True
obj.run('send') # MooreError: 'unsupported'
obj.run('stop') # None
obj.get_output() # 'e4'
obj.has_path_to('t0') # True
obj.seen_method('turn') # 0
obj.has_path_to('t4') # True
obj.run('turn') # None
obj.get_output() # 'e3'
obj.run('stop') # None
obj.run('turn') # MooreError: 'unsupported'
obj.get_step() # 4
obj.get_output() # 'e3'
obj.run('drag') # None
obj.run('drag') # MooreError: 'unsupported'
obj.has_path_to('t2') # False
obj.get_step() # 5
obj.get_output() # 'e6'

Вариант №5

Задача №11

Конечный автомат Мили представлен графом на картинке ниже. Необходимо реализовать этот конечный автомат в виде класса. Переходы из состояния в состояние осуществляются с помощью методов, названия которых основаны на словах, указанных на дугах графа (см. пример ниже).

  1. Реализовать метод has_max_in_edges класса конечного автомата. Этот метод возвращает истину, если текущее состояние имеет максимальное число входных дуг в графе.

  2. Реализовать метод let_var(имя, значение) для задания значений переменных. Эти переменные определяют выбор перехода там, где состояние имеет несколько выходных дуг, помеченных одним и тем же методом (см. граф).

  3. Реализовать функцию main, возвращающую экземпляр класса конечного автомата.

  4. Реализовать функцию test для тестирования класса конечного автомата на основе метрики покрытия ветвей (branch coverage). Требуемая степень покрытия: 100%.

  5. Реализовать обработку ошибок для методов переходов. Возвращаемое методом сообщение об ошибке является словом, которое определяет, оказался ли метод перехода неподдерживаемым ('unsupported') в данном состоянии или неизвестным ('unknown') для конечного автомата.

  6. Реализовать метод seen_method класса конечного автомата. Этот метод возвращает число успешных выполнений аргумента-метода.

  7. Реализовать метод seen_edge класса конечного автомата. Этот метод возвращает число совершенных переходов между парой состояний-аргументов.

Детали работы методов класса конечного автомата показаны на примере, приведенном далее. Переменная obj содержит объект этого класса.

obj.seen_edge('Z3', 'Z4') # 0
obj.let_var('a', 1) # None
obj.let_var('b', 0) # None
obj.move('stop') # 'v1'
obj.move('unite') # 'v1'
obj.has_max_in_edges() # True
obj.let_var('a', 1) # None
obj.seen_edge('Z1', 'Z2') # 0
obj.seen_method('spin') # 0
obj.move('unite') # 'unsupported'
obj.move('spin') # 'v1'
obj.seen_edge('Z5', 'Z0') # 0
obj.move('unite') # 'v1'
obj.move('draw') # 'unknown'
obj.has_max_in_edges() # True
obj.move('tweak') # 'v0'
obj.move('stop') # 'v1'
obj.move('daub') # 'unknown'
obj.move('unite') # 'v1'

Вариант №6

Задача №11

Конечный автомат Мили представлен графом на картинке ниже. Необходимо реализовать этот конечный автомат в виде класса. Переходы из состояния в состояние осуществляются с помощью методов, названия которых основаны на словах, указанных на дугах графа (см. пример ниже).

  1. Реализовать метод let_var(имя, значение) для задания значений переменных. Эти переменные определяют выбор перехода там, где состояние имеет несколько выходных дуг, помеченных одним и тем же методом (см. граф).

  2. Реализовать метод has_path_to класса конечного автомата. Этот метод возвращает истину, если из текущего состояния по графу можно добраться до состояния-аргумента (без учета меток дуг).

  3. Реализовать метод has_max_out_edges класса конечного автомата. Этот метод возвращает истину, если текущее состояние имеет максимальное число выходных дуг в графе.

  4. Реализовать метод seen_edge класса конечного автомата. Этот метод возвращает истину, если переход между парой состояний-аргументов уже встречался ранее.

  5. Реализовать функцию main, возвращающую экземпляр класса конечного автомата.

  6. Реализовать обработку ошибок для методов переходов. Возвращаемое методом сообщение об ошибке является словом, которое определяет, оказался ли метод перехода неподдерживаемым ('unsupported') в данном состоянии или неизвестным ('unknown') для конечного автомата.

  7. Реализовать функцию test для тестирования класса конечного автомата на основе метрики покрытия ветвей (branch coverage). Требуемая степень покрытия: 100%.

Детали работы методов класса конечного автомата показаны на примере, приведенном далее. Переменная obj содержит объект этого класса.

obj.has_path_to('A1') # True
obj.seen_edge('A4', 'A2') # False
obj.let_var('j', 0) # None
obj.let_var('t', 1) # None
obj.seen_edge('A1', 'A3') # False
obj.select_add() # 'G0'
obj.let_var('t', 0) # None
obj.has_max_out_edges() # True
obj.has_path_to('A3') # True
obj.select_warp() # 'G1'
obj.select_smash() # 'unknown'
obj.select_add() # 'G3'
obj.seen_edge('A0', 'A5') # False
obj.select_patch() # 'G3'
obj.select_patch() # 'unsupported'
obj.has_path_to('A2') # True
obj.has_max_out_edges() # False
obj.select_warp() # 'G3'

Вариант №7

Задача №11

Конечный автомат Мура представлен графом на картинке ниже. Необходимо реализовать этот конечный автомат в виде класса. Переходы из состояния в состояние осуществляются с помощью методов, названия которых основаны на словах, указанных на дугах графа (см. пример ниже).

  1. Реализовать функцию test для тестирования класса конечного автомата на основе метрики покрытия ветвей (branch coverage). Требуемая степень покрытия: 100%.

  2. Реализовать функцию main, возвращающую экземпляр класса конечного автомата.

  3. Реализовать метод seen_state класса конечного автомата. Этот метод возвращает истину, если аргумент-состояние уже было посещено.

  4. Реализовать метод has_max_in_edges класса конечного автомата. Этот метод возвращает истину, если текущее состояние имеет максимальное число входных дуг в графе.

  5. Реализовать обработку ошибок с помощью пользовательского класса исключения MachineError. При возбуждении (raise) исключения сообщение об ошибке является словом, которое определяет, оказался ли метод перехода неподдерживаемым ('unsupported') в данном состоянии или неизвестным ('unknown') для конечного автомата.

  6. Реализовать метод seen_edge класса конечного автомата. Этот метод возвращает число совершенных переходов между парой состояний-аргументов.

Детали работы методов класса конечного автомата показаны на примере, приведенном далее. Переменная obj содержит объект этого класса.

obj.run('rig') # MachineError: 'unsupported'
obj.seen_edge('q3', 'q5') # 0
obj.run('roam') # None
obj.seen_state('q0') # False
obj.get_output() # 'K5'
obj.run('scrub') # None
obj.get_output() # 'K4'
obj.run('roam') # None
obj.seen_state('q4') # False
obj.get_output() # 'K1'
obj.run('rig') # None
obj.has_max_in_edges() # True
obj.get_output() # 'K0'
obj.run('carve') # None
obj.get_output() # 'K1'

Вариант №8

Задача №11

Конечный автомат Мура представлен графом на картинке ниже. Необходимо реализовать этот конечный автомат в виде класса. Переходы из состояния в состояние осуществляются с помощью методов, названия которых основаны на словах, указанных на дугах графа (см. пример ниже).

  1. Реализовать метод seen_edge класса конечного автомата. Этот метод возвращает число совершенных переходов между парой состояний-аргументов.

  2. Реализовать функцию main, возвращающую экземпляр класса конечного автомата.

  3. Реализовать метод has_path_to класса конечного автомата. Этот метод возвращает истину, если из текущего состояния по графу можно добраться до состояния-аргумента (без учета меток дуг).

  4. Реализовать функцию test для тестирования класса конечного автомата на основе метрики покрытия ветвей (branch coverage). Требуемая степень покрытия: 100%.

  5. Реализовать метод let_имя(значение) для задания значений переменных. Эти переменные определяют выбор перехода там, где состояние имеет несколько выходных дуг, помеченных одним и тем же методом (см. граф).

  6. Реализовать обработку ошибок для методов переходов. Возвращаемое методом сообщение об ошибке является словом, которое определяет, оказался ли метод перехода неподдерживаемым ('unsupported') в данном состоянии или неизвестным ('unknown') для конечного автомата.

Детали работы методов класса конечного автомата показаны на примере, приведенном далее. Переменная obj содержит объект этого класса.

obj.let_w(1) # None
obj.let_h(0) # None
obj.run_shift() # None
obj.has_path_to('t5') # True
obj.get_output() # 'p5'
obj.seen_edge('t2', 't5') # 0
obj.run_send() # None
obj.seen_edge('t6', 't1') # 0
obj.get_output() # 'p6'
obj.run_shift() # None
obj.get_output() # 'p0'
obj.run_spawn() # None
obj.get_output() # 'p3'
obj.seen_edge('t1', 't4') # 0
obj.run_smash() # None
obj.run_send() # 'unsupported'
obj.get_output() # 'p0'
obj.run_smash() # None
obj.get_output() # 'p2'
obj.has_path_to('t4') # False

Вариант №9

Задача №11

Конечный автомат Мили представлен графом на картинке ниже. Необходимо реализовать этот конечный автомат в виде класса. Переходы из состояния в состояние осуществляются с помощью методов, названия которых основаны на словах, указанных на дугах графа (см. пример ниже).

  1. Реализовать метод seen_method класса конечного автомата. Этот метод возвращает число успешных выполнений аргумента-метода.

  2. Реализовать функцию main, возвращающую экземпляр класса конечного автомата.

  3. Реализовать метод seen_state класса конечного автомата. Этот метод возвращает число посещений аргумента-состояния.

  4. Реализовать обработку ошибок с помощью пользовательского класса исключения MachineException. При возбуждении (raise) исключения сообщение об ошибке является словом, которое определяет, оказался ли метод перехода неподдерживаемым ('unsupported') в данном состоянии или неизвестным ('unknown') для конечного автомата.

  5. Реализовать функцию test для тестирования класса конечного автомата на основе метрики покрытия ветвей (branch coverage). Требуемая степень покрытия: 100%.

Детали работы методов класса конечного автомата показаны на примере, приведенном далее. Переменная obj содержит объект этого класса.

obj.go('copy') # 'U3'
obj.seen_state('a0') # 0
obj.seen_method('fork') # 0
obj.go('grow') # 'U1'
obj.go('fork') # 'U2'
obj.go('copy') # MachineException: 'unsupported'
obj.seen_state('a4') # 0
obj.seen_method('grow') # 1
obj.go('order') # 'U4'
obj.go('fork') # 'U2'
obj.go('fork') # 'U3'

Вариант №10

Задача №11

Конечный автомат Мура представлен графом на картинке ниже. Необходимо реализовать этот конечный автомат в виде класса. Переходы из состояния в состояние осуществляются с помощью методов, названия которых основаны на словах, указанных на дугах графа (см. пример ниже).

  1. Реализовать функцию main, возвращающую экземпляр класса конечного автомата.

  2. Реализовать метод has_max_out_edges класса конечного автомата. Этот метод возвращает истину, если текущее состояние имеет максимальное число выходных дуг в графе.

  3. Реализовать метод seen_method класса конечного автомата. Этот метод возвращает истину, если аргумент-метод уже успешно выполнялся ранее.

  4. Реализовать функцию test для тестирования класса конечного автомата на основе метрики покрытия ветвей (branch coverage). Требуемая степень покрытия: 100%.

  5. Реализовать обработку ошибок с помощью пользовательского класса исключения MachineException. При возбуждении (raise) исключения сообщение об ошибке является словом, которое определяет, оказался ли метод перехода неподдерживаемым ('unsupported') в данном состоянии или неизвестным ('unknown') для конечного автомата.

  6. Реализовать метод seen_state класса конечного автомата. Этот метод возвращает истину, если аргумент-состояние уже было посещено.

Детали работы методов класса конечного автомата показаны на примере, приведенном далее. Переменная obj содержит объект этого класса.

obj.boost() # MachineException: 'unknown'
obj.mask() # None
obj.seen_method('stall') # False
obj.hoard() # MachineException: 'unknown'
obj.seen_state('k4') # False
obj.stall() # MachineException: 'unsupported'
obj.get_output() # 'v0'
obj.seen_state('k5') # True
obj.seen_method('debug') # False
obj.order() # MachineException: 'unknown'
obj.has_max_out_edges() # True
obj.trace() # None
obj.has_max_out_edges() # True
obj.get_output() # 'v3'
obj.seen_state('k4') # False
obj.seen_method('stall') # False
obj.mask() # None
obj.seen_method('tail') # False
obj.get_output() # 'v4'
obj.has_max_out_edges() # False
obj.seen_method('mask') # True
obj.clone() # MachineException: 'unknown'
obj.tail() # None
obj.get_output() # 'v3'
obj.hoard() # MachineException: 'unknown'
obj.bolt() # None
obj.has_max_out_edges() # True
obj.get_output() # 'v3'
obj.has_max_out_edges() # True
obj.mask() # None
obj.fetch() # MachineException: 'unknown'
obj.get_output() # 'v4'
obj.seen_state('k0') # True
obj.has_max_out_edges() # False
obj.tail() # None
obj.seen_method('stall') # False
obj.has_max_out_edges() # True
obj.get_output() # 'v3'
obj.begin() # MachineException: 'unknown'
obj.bolt() # None
obj.seen_method('debug') # False
obj.hike() # MachineException: 'unknown'
obj.seen_state('k5') # True
obj.get_output() # 'v3'
obj.seen_method('debug') # False
obj.has_max_out_edges() # True
obj.hoard() # MachineException: 'unknown'
obj.mask() # None
obj.seen_state('k4') # False
obj.get_output() # 'v4'
obj.tail() # None
obj.get_output() # 'v3'

Вариант №11

Задача №11

Конечный автомат Мили представлен графом на картинке ниже. Необходимо реализовать этот конечный автомат в виде класса. Переходы из состояния в состояние осуществляются с помощью методов, названия которых основаны на словах, указанных на дугах графа (см. пример ниже).

  1. Реализовать обработку ошибок с помощью пользовательского класса исключения StateMachineError. При возбуждении (raise) исключения сообщение об ошибке является словом, которое определяет, оказался ли метод перехода неподдерживаемым ('unsupported') в данном состоянии или неизвестным ('unknown') для конечного автомата.

  2. Реализовать метод has_max_out_edges класса конечного автомата. Этот метод возвращает истину, если текущее состояние имеет максимальное число выходных дуг в графе.

  3. Реализовать метод set_имя(значение) для задания значений переменных. Эти переменные определяют выбор перехода там, где состояние имеет несколько выходных дуг, помеченных одним и тем же методом (см. граф).

  4. Реализовать функцию main, возвращающую экземпляр класса конечного автомата.

  5. Реализовать функцию test для тестирования класса конечного автомата на основе метрики покрытия ветвей (branch coverage). Требуемая степень покрытия: 100%.

  6. Реализовать метод part_of_loop класса конечного автомата. Этот метод возвращает истину, если текущее состояние является частью какого-либо цикла графа (без учета меток дуг).

Детали работы методов класса конечного автомата показаны на примере, приведенном далее. Переменная obj содержит объект этого класса.

obj.set_n(2) # None
obj.has_max_out_edges() # False
obj.go_start() # 'W1'
obj.go_tweak() # 'W1'
obj.part_of_loop() # True
obj.go_start() # 'W0'
obj.go_pull() # StateMachineError: 'unknown'
obj.go_color() # 'W0'
obj.has_max_out_edges() # True
obj.go_start() # 'W1'
obj.go_sort() # StateMachineError: 'unknown'
obj.set_n(0) # None
obj.go_color() # 'W0'
obj.go_start() # 'W1'
obj.go_tweak() # 'W1'
obj.part_of_loop() # True
obj.go_start() # 'W0'
obj.has_max_out_edges() # False
obj.go_color() # 'W0'
obj.has_max_out_edges() # True

Вариант №12

Задача №11

Конечный автомат Мура представлен графом на картинке ниже. Необходимо реализовать этот конечный автомат в виде класса. Переходы из состояния в состояние осуществляются с помощью методов, названия которых основаны на словах, указанных на дугах графа (см. пример ниже).

  1. Реализовать метод has_max_out_edges класса конечного автомата. Этот метод возвращает истину, если текущее состояние имеет максимальное число выходных дуг в графе.

  2. Реализовать обработку ошибок для методов переходов. Возвращаемое методом сообщение об ошибке является словом, которое определяет, оказался ли метод перехода неподдерживаемым ('unsupported') в данном состоянии или неизвестным ('unknown') для конечного автомата.

  3. Реализовать функцию test для тестирования класса конечного автомата на основе метрики покрытия ветвей (branch coverage). Требуемая степень покрытия: 100%.

  4. Реализовать метод seen_method класса конечного автомата. Этот метод возвращает число успешных выполнений аргумента-метода.

  5. Реализовать функцию main, возвращающую экземпляр класса конечного автомата.

Детали работы методов класса конечного автомата показаны на примере, приведенном далее. Переменная obj содержит объект этого класса.

obj.seen_method('slip') # 0
obj.put() # None
obj.get_output() # 'G6'
obj.seen_method('jog') # 0
obj.walk() # 'unsupported'
obj.smash() # None
obj.get_output() # 'G0'
obj.walk() # None
obj.get_output() # 'G0'
obj.cull() # None
obj.has_max_out_edges() # False
obj.get_output() # 'G2'
obj.seen_method('jog') # 0
obj.slip() # None
obj.get_output() # 'G3'
obj.walk() # None
obj.has_max_out_edges() # True
obj.get_output() # 'G7'
obj.cull() # None
obj.get_output() # 'G3'
obj.swap() # None
obj.get_output() # 'G0'
obj.cull() # None
obj.get_output() # 'G2'
obj.has_max_out_edges() # False
obj.slip() # None
obj.get_output() # 'G3'

Вариант №13

Задача №11

Конечный автомат Мили представлен графом на картинке ниже. Необходимо реализовать этот конечный автомат в виде класса. Переходы из состояния в состояние осуществляются с помощью методов, названия которых основаны на словах, указанных на дугах графа (см. пример ниже).

  1. Реализовать метод assign_var(имя, значение) для задания значений переменных. Эти переменные определяют выбор перехода там, где состояние имеет несколько выходных дуг, помеченных одним и тем же методом (см. граф).

  2. Реализовать функцию test для тестирования класса конечного автомата на основе метрики покрытия ветвей (branch coverage). Требуемая степень покрытия: 100%.

  3. Реализовать метод has_max_out_edges класса конечного автомата. Этот метод возвращает истину, если текущее состояние имеет максимальное число выходных дуг в графе.

  4. Реализовать метод get_step класса конечного автомата. Этот метод возвращает число совершенных переходов.

  5. Реализовать обработку ошибок для методов переходов. Возвращаемое методом сообщение об ошибке является словом, которое определяет, оказался ли метод перехода неподдерживаемым ('unsupported') в данном состоянии или неизвестным ('unknown') для конечного автомата.

  6. Реализовать функцию main, возвращающую экземпляр класса конечного автомата.

Детали работы методов класса конечного автомата показаны на примере, приведенном далее. Переменная obj содержит объект этого класса.

obj.go('tail') # 'unsupported'
obj.has_max_out_edges() # False
obj.assign_var('v', 0) # None
obj.go('loop') # 'unsupported'
obj.get_step() # 0
obj.go('show') # 'unknown'
obj.go('pull') # 'q1'
obj.go('loop') # 'q1'
obj.go('tail') # 'q1'
obj.go('cue') # 'q2'
obj.go('pull') # 'q1'
obj.has_max_out_edges() # False

Вариант №14

Задача №11

Конечный автомат Мура представлен графом на картинке ниже. Необходимо реализовать этот конечный автомат в виде класса. Переходы из состояния в состояние осуществляются с помощью методов, названия которых основаны на словах, указанных на дугах графа (см. пример ниже).

  1. Реализовать метод get_step класса конечного автомата. Этот метод возвращает число совершенных переходов.

  2. Реализовать метод has_max_in_edges класса конечного автомата. Этот метод возвращает истину, если текущее состояние имеет максимальное число входных дуг в графе.

  3. Реализовать метод has_max_out_edges класса конечного автомата. Этот метод возвращает истину, если текущее состояние имеет максимальное число выходных дуг в графе.

  4. Реализовать функцию test для тестирования класса конечного автомата на основе метрики покрытия ветвей (branch coverage). Требуемая степень покрытия: 100%.

  5. Реализовать функцию main, возвращающую экземпляр класса конечного автомата.

  6. Реализовать обработку ошибок для методов переходов. Возвращаемое методом сообщение об ошибке является словом, которое определяет, оказался ли метод перехода неподдерживаемым ('unsupported') в данном состоянии или неизвестным ('unknown') для конечного автомата.

  7. Реализовать метод имя(значение) для задания значений переменных. Эти переменные определяют выбор перехода там, где состояние имеет несколько выходных дуг, помеченных одним и тем же методом (см. граф).

Детали работы методов класса конечного автомата показаны на примере, приведенном далее. Переменная obj содержит объект этого класса.

obj.has_max_in_edges() # False
obj.crack() # 'unknown'
obj.x(0) # None
obj.crack() # 'unknown'
obj.g(1) # None
obj.brake() # None
obj.g(1) # None
obj.stash() # 'unsupported'
obj.get_output() # 'T0'
obj.brake() # None
obj.crawl() # 'unknown'
obj.get_output() # 'T2'
obj.brake() # None
obj.get_output() # 'T0'
obj.crawl() # 'unknown'
obj.coast() # None
obj.get_output() # 'T2'
obj.stash() # None
obj.paste() # 'unknown'
obj.get_step() # 5
obj.has_max_out_edges() # True
obj.get_output() # 'T2'
obj.brake() # None
obj.get_output() # 'T0'

Вариант №15

Задача №11

Конечный автомат Мура представлен графом на картинке ниже. Необходимо реализовать этот конечный автомат в виде класса. Переходы из состояния в состояние осуществляются с помощью методов, названия которых основаны на словах, указанных на дугах графа (см. пример ниже).

  1. Реализовать метод seen_edge класса конечного автомата. Этот метод возвращает истину, если переход между парой состояний-аргументов уже встречался ранее.

  2. Реализовать метод has_path_to класса конечного автомата. Этот метод возвращает истину, если из текущего состояния по графу можно добраться до состояния-аргумента (без учета меток дуг).

  3. Реализовать функцию test для тестирования класса конечного автомата на основе метрики покрытия ветвей (branch coverage). Требуемая степень покрытия: 100%.

  4. Реализовать функцию main, возвращающую экземпляр класса конечного автомата.

  5. Реализовать обработку ошибок для методов переходов. Возвращаемое методом сообщение об ошибке является словом, которое определяет, оказался ли метод перехода неподдерживаемым ('unsupported') в данном состоянии или неизвестным ('unknown') для конечного автомата.

  6. Реализовать метод seen_state класса конечного автомата. Этот метод возвращает истину, если аргумент-состояние уже было посещено.

Детали работы методов класса конечного автомата показаны на примере, приведенном далее. Переменная obj содержит объект этого класса.

obj.seen_edge('Q0', 'Q6') # False
obj.run_view() # None
obj.get_output() # 'Y0'
obj.seen_edge('Q0', 'Q4') # False
obj.run_amass() # None
obj.get_output() # 'Y3'
obj.run_coat() # 'unsupported'
obj.seen_edge('Q5', 'Q6') # False
obj.run_jog() # None
obj.run_jog() # 'unsupported'
obj.get_output() # 'Y3'
obj.run_align() # None
obj.run_jog() # 'unsupported'
obj.get_output() # 'Y1'
obj.run_view() # 'unsupported'
obj.run_coat() # None
obj.seen_edge('Q5', 'Q6') # False
obj.get_output() # 'Y3'
obj.seen_edge('Q7', 'Q5') # True
obj.run_view() # None
obj.get_output() # 'Y2'
obj.run_jog() # None
obj.get_output() # 'Y0'
obj.run_crawl() # 'unknown'
obj.run_amass() # None
obj.seen_state('Q5') # True
obj.get_output() # 'Y3'
obj.run_jog() # None
obj.run_share() # 'unknown'
obj.get_output() # 'Y3'
obj.has_path_to('Q5') # True
obj.run_view() # None
obj.get_output() # 'Y2'
obj.seen_edge('Q5', 'Q6') # True

Вариант №16

Задача №11

Конечный автомат Мили представлен графом на картинке ниже. Необходимо реализовать этот конечный автомат в виде класса. Переходы из состояния в состояние осуществляются с помощью методов, названия которых основаны на словах, указанных на дугах графа (см. пример ниже).

  1. Реализовать метод seen_state класса конечного автомата. Этот метод возвращает число посещений аргумента-состояния.

  2. Реализовать функцию test для тестирования класса конечного автомата на основе метрики покрытия ветвей (branch coverage). Требуемая степень покрытия: 100%.

  3. Реализовать метод let_var(имя, значение) для задания значений переменных. Эти переменные определяют выбор перехода там, где состояние имеет несколько выходных дуг, помеченных одним и тем же методом (см. граф).

  4. Реализовать функцию main, возвращающую экземпляр класса конечного автомата.

  5. Реализовать метод seen_edge класса конечного автомата. Этот метод возвращает число совершенных переходов между парой состояний-аргументов.

  6. Реализовать обработку ошибок с помощью пользовательского класса исключения FSMError. При возбуждении (raise) исключения сообщение об ошибке является словом, которое определяет, оказался ли метод перехода неподдерживаемым ('unsupported') в данном состоянии или неизвестным ('unknown') для конечного автомата.

Детали работы методов класса конечного автомата показаны на примере, приведенном далее. Переменная obj содержит объект этого класса.

obj.let_var('p', 1) # None
obj.let_var('a', 1) # None
obj.seen_edge('A2', 'A1') # 0
obj.go('carve') # 'u1'
obj.seen_edge('A3', 'A5') # 0
obj.let_var('p', 1) # None
obj.go('mask') # FSMError: 'unsupported'
obj.seen_edge('A5', 'A4') # 0
obj.go('daub') # FSMError: 'unknown'
obj.seen_state('A4') # 0
obj.go('file') # 'u2'
obj.seen_state('A0') # 0
obj.seen_edge('A0', 'A3') # 0
obj.let_var('a', 0) # None
obj.go('stop') # FSMError: 'unknown'
obj.seen_state('A4') # 1
obj.go('mask') # 'u0'
obj.go('carve') # 'u1'
obj.seen_edge('A2', 'A2') # 0
obj.let_var('p', 2) # None
obj.go('file') # 'u2'
obj.go('bolt') # 'u2'
obj.go('mask') # 'u3'
obj.go('bolt') # 'u2'
obj.seen_state('A0') # 1
obj.go('mask') # 'u0'
obj.go('base') # FSMError: 'unknown'
obj.seen_state('A5') # 1
obj.go('daub') # FSMError: 'unknown'
obj.seen_edge('A0', 'A3') # 1
obj.go('file') # FSMError: 'unsupported'
obj.go('carve') # 'u0'

Вариант №17

Задача №11

Конечный автомат Мура представлен графом на картинке ниже. Необходимо реализовать этот конечный автомат в виде класса. Переходы из состояния в состояние осуществляются с помощью методов, названия которых основаны на словах, указанных на дугах графа (см. пример ниже).

  1. Реализовать метод seen_method класса конечного автомата. Этот метод возвращает число успешных выполнений аргумента-метода.

  2. Реализовать метод имя(значение) для задания значений переменных. Эти переменные определяют выбор перехода там, где состояние имеет несколько выходных дуг, помеченных одним и тем же методом (см. граф).

  3. Реализовать метод get_step класса конечного автомата. Этот метод возвращает число совершенных переходов.

  4. Реализовать функцию main, возвращающую экземпляр класса конечного автомата.

  5. Реализовать обработку ошибок с помощью пользовательского класса исключения StateMachineException. При возбуждении (raise) исключения сообщение об ошибке является словом, которое определяет, оказался ли метод перехода неподдерживаемым ('unsupported') в данном состоянии или неизвестным ('unknown') для конечного автомата.

  6. Реализовать функцию test для тестирования класса конечного автомата на основе метрики покрытия ветвей (branch coverage). Требуемая степень покрытия: 100%.

  7. Реализовать метод has_max_in_edges класса конечного автомата. Этот метод возвращает истину, если текущее состояние имеет максимальное число входных дуг в графе.

Детали работы методов класса конечного автомата показаны на примере, приведенном далее. Переменная obj содержит объект этого класса.

obj.e(1) # None
obj.c(0) # None
obj.seen_method('clean') # 0
obj.go('open') # None
obj.get_output() # 'u1'
obj.go('clean') # None
obj.get_output() # 'u3'
obj.go('hoard') # None
obj.get_output() # 'u3'
obj.has_max_in_edges() # False
obj.go('etch') # None
obj.has_max_in_edges() # True
obj.go('skip') # StateMachineException: 'unknown'
obj.get_step() # 4
obj.get_output() # 'u2'
obj.go('crush') # None
obj.get_output() # 'u3'
obj.seen_method('hoard') # 1
obj.go('open') # None
obj.has_max_in_edges() # False
obj.seen_method('open') # 2
obj.get_output() # 'u1'
obj.seen_method('clean') # 1
obj.go('clean') # None
obj.has_max_in_edges() # True
obj.get_output() # 'u3'

Вариант №18

Задача №11

Конечный автомат Мура представлен графом на картинке ниже. Необходимо реализовать этот конечный автомат в виде класса. Переходы из состояния в состояние осуществляются с помощью методов, названия которых основаны на словах, указанных на дугах графа (см. пример ниже).

  1. Реализовать метод has_path_to класса конечного автомата. Этот метод возвращает истину, если из текущего состояния по графу можно добраться до состояния-аргумента (без учета меток дуг).

  2. Реализовать метод let_var(имя, значение) для задания значений переменных. Эти переменные определяют выбор перехода там, где состояние имеет несколько выходных дуг, помеченных одним и тем же методом (см. граф).

  3. Реализовать функцию main, возвращающую экземпляр класса конечного автомата.

  4. Реализовать метод seen_state класса конечного автомата. Этот метод возвращает истину, если аргумент-состояние уже было посещено.

  5. Реализовать функцию test для тестирования класса конечного автомата на основе метрики покрытия ветвей (branch coverage). Требуемая степень покрытия: 100%.

  6. Реализовать обработку ошибок для методов переходов. Возвращаемое методом сообщение об ошибке является словом, которое определяет, оказался ли метод перехода неподдерживаемым ('unsupported') в данном состоянии или неизвестным ('unknown') для конечного автомата.

  7. Реализовать метод seen_edge класса конечного автомата. Этот метод возвращает истину, если переход между парой состояний-аргументов уже встречался ранее.

Детали работы методов класса конечного автомата показаны на примере, приведенном далее. Переменная obj содержит объект этого класса.

obj.let_var('u', 1) # None
obj.has_path_to('e0') # False
obj.move_add() # None
obj.get_output() # 'w2'
obj.move_zoom() # 'unsupported'
obj.seen_state('e4') # False
obj.has_path_to('e6') # True
obj.move_cull() # None
obj.get_output() # 'w5'
obj.move_mask() # None
obj.get_output() # 'w2'
obj.seen_state('e1') # False
obj.has_path_to('e1') # True
obj.move_zoom() # None
obj.seen_edge('e5', 'e7') # False
obj.move_hop() # 'unknown'
obj.seen_state('e5') # False
obj.get_output() # 'w1'
obj.has_path_to('e6') # False
obj.move_order() # None
obj.get_output() # 'w0'

Вариант №19

Задача №11

Конечный автомат Мура представлен графом на картинке ниже. Необходимо реализовать этот конечный автомат в виде класса. Переходы из состояния в состояние осуществляются с помощью методов, названия которых основаны на словах, указанных на дугах графа (см. пример ниже).

  1. Реализовать обработку ошибок с помощью пользовательского класса исключения MachineException. При возбуждении (raise) исключения сообщение об ошибке является словом, которое определяет, оказался ли метод перехода неподдерживаемым ('unsupported') в данном состоянии или неизвестным ('unknown') для конечного автомата.

  2. Реализовать функцию main, возвращающую экземпляр класса конечного автомата.

  3. Реализовать функцию test для тестирования класса конечного автомата на основе метрики покрытия ветвей (branch coverage). Требуемая степень покрытия: 100%.

  4. Реализовать метод seen_edge класса конечного автомата. Этот метод возвращает число совершенных переходов между парой состояний-аргументов.

  5. Реализовать метод has_max_in_edges класса конечного автомата. Этот метод возвращает истину, если текущее состояние имеет максимальное число входных дуг в графе.

  6. Реализовать метод store_var(имя, значение) для задания значений переменных. Эти переменные определяют выбор перехода там, где состояние имеет несколько выходных дуг, помеченных одним и тем же методом (см. граф).

Детали работы методов класса конечного автомата показаны на примере, приведенном далее. Переменная obj содержит объект этого класса.

obj.store_var('a', 1) # None
obj.run_snap() # MachineException: 'unknown'
obj.store_var('n', 1) # None
obj.seen_edge('v3', 'v4') # 0
obj.has_max_in_edges() # False
obj.store_var('k', 0) # None
obj.run_paint() # None
obj.get_output() # 'r1'
obj.has_max_in_edges() # False
obj.run_spawn() # None
obj.get_output() # 'r2'
obj.run_cut() # None
obj.has_max_in_edges() # False
obj.get_output() # 'r1'
obj.run_stand() # None
obj.get_output() # 'r2'

Вариант №20

Задача №11

Конечный автомат Мура представлен графом на картинке ниже. Необходимо реализовать этот конечный автомат в виде класса. Переходы из состояния в состояние осуществляются с помощью методов, названия которых основаны на словах, указанных на дугах графа (см. пример ниже).

  1. Реализовать функцию main, возвращающую экземпляр класса конечного автомата.

  2. Реализовать обработку ошибок с помощью пользовательского класса исключения MachineException. При возбуждении (raise) исключения сообщение об ошибке является словом, которое определяет, оказался ли метод перехода неподдерживаемым ('unsupported') в данном состоянии или неизвестным ('unknown') для конечного автомата.

  3. Реализовать метод has_max_in_edges класса конечного автомата. Этот метод возвращает истину, если текущее состояние имеет максимальное число входных дуг в графе.

  4. Реализовать функцию test для тестирования класса конечного автомата на основе метрики покрытия ветвей (branch coverage). Требуемая степень покрытия: 100%.

  5. Реализовать метод seen_state класса конечного автомата. Этот метод возвращает истину, если аргумент-состояние уже было посещено.

  6. Реализовать метод get_step класса конечного автомата. Этот метод возвращает число совершенных переходов.

Детали работы методов класса конечного автомата показаны на примере, приведенном далее. Переменная obj содержит объект этого класса.

obj.get_step() # 0
obj.go_model() # MachineException: 'unsupported'
obj.go_put() # None
obj.get_output() # 'G4'
obj.go_look() # None
obj.get_output() # 'G2'
obj.get_step() # 2
obj.go_group() # MachineException: 'unknown'
obj.go_cut() # None
obj.get_output() # 'G3'
obj.seen_state('J5') # True
obj.has_max_in_edges() # False
obj.go_scan() # None
obj.get_output() # 'G1'
obj.seen_state('J4') # False
obj.go_cut() # MachineException: 'unsupported'
obj.has_max_in_edges() # True
obj.go_coast() # None
obj.get_output() # 'G1'
obj.seen_state('J4') # True
obj.go_group() # MachineException: 'unknown'
obj.get_step() # 5
obj.go_scale() # None
obj.get_output() # 'G0'

Вариант №21

Задача №11

Конечный автомат Мили представлен графом на картинке ниже. Необходимо реализовать этот конечный автомат в виде класса. Переходы из состояния в состояние осуществляются с помощью методов, названия которых основаны на словах, указанных на дугах графа (см. пример ниже).

  1. Реализовать функцию main, возвращающую экземпляр класса конечного автомата.

  2. Реализовать метод seen_edge класса конечного автомата. Этот метод возвращает число совершенных переходов между парой состояний-аргументов.

  3. Реализовать метод has_path_to класса конечного автомата. Этот метод возвращает истину, если из текущего состояния по графу можно добраться до состояния-аргумента (без учета меток дуг).

  4. Реализовать метод assign_var(имя, значение) для задания значений переменных. Эти переменные определяют выбор перехода там, где состояние имеет несколько выходных дуг, помеченных одним и тем же методом (см. граф).

  5. Реализовать функцию test для тестирования класса конечного автомата на основе метрики покрытия ветвей (branch coverage). Требуемая степень покрытия: 100%.

  6. Реализовать обработку ошибок с помощью пользовательского класса исключения MealyException. При возбуждении (raise) исключения сообщение об ошибке является словом, которое определяет, оказался ли метод перехода неподдерживаемым ('unsupported') в данном состоянии или неизвестным ('unknown') для конечного автомата.

Детали работы методов класса конечного автомата показаны на примере, приведенном далее. Переменная obj содержит объект этого класса.

obj.assign_var('b', 1) # None
obj.assign_var('j', 0) # None
obj.move_sweep() # 'b5'
obj.move_flip() # MealyException: 'unknown'
obj.move_rock() # 'b1'
obj.move_rock() # 'b3'
obj.seen_edge('R3', 'R2') # 0
obj.has_path_to('R5') # False
obj.move_rock() # MealyException: 'unsupported'
obj.move_punch() # 'b4'
obj.move_chat() # MealyException: 'unsupported'
obj.move_rock() # 'b1'

Вариант №22

Задача №11

Конечный автомат Мили представлен графом на картинке ниже. Необходимо реализовать этот конечный автомат в виде класса. Переходы из состояния в состояние осуществляются с помощью методов, названия которых основаны на словах, указанных на дугах графа (см. пример ниже).

  1. Реализовать метод let_имя(значение) для задания значений переменных. Эти переменные определяют выбор перехода там, где состояние имеет несколько выходных дуг, помеченных одним и тем же методом (см. граф).

  2. Реализовать метод seen_method класса конечного автомата. Этот метод возвращает истину, если аргумент-метод уже успешно выполнялся ранее.

  3. Реализовать метод get_step класса конечного автомата. Этот метод возвращает число совершенных переходов.

  4. Реализовать метод has_path_to класса конечного автомата. Этот метод возвращает истину, если из текущего состояния по графу можно добраться до состояния-аргумента (без учета меток дуг).

  5. Реализовать функцию main, возвращающую экземпляр класса конечного автомата.

  6. Реализовать функцию test для тестирования класса конечного автомата на основе метрики покрытия ветвей (branch coverage). Требуемая степень покрытия: 100%.

  7. Реализовать обработку ошибок для методов переходов. Возвращаемое методом сообщение об ошибке является словом, которое определяет, оказался ли метод перехода неподдерживаемым ('unsupported') в данном состоянии или неизвестным ('unknown') для конечного автомата.

Детали работы методов класса конечного автомата показаны на примере, приведенном далее. Переменная obj содержит объект этого класса.

obj.select_hop() # 'unknown'
obj.seen_method('pull') # False
obj.let_g(1) # None
obj.let_a(0) # None
obj.get_step() # 0
obj.select_chalk() # 'M6'
obj.let_g(0) # None
obj.select_paint() # 'M7'
obj.get_step() # 2
obj.select_chalk() # 'M6'
obj.select_chalk() # 'M4'
obj.has_path_to('w6') # True
obj.select_pull() # 'M3'

Вариант №23

Задача №11

Конечный автомат Мура представлен графом на картинке ниже. Необходимо реализовать этот конечный автомат в виде класса. Переходы из состояния в состояние осуществляются с помощью методов, названия которых основаны на словах, указанных на дугах графа (см. пример ниже).

  1. Реализовать функцию main, возвращающую экземпляр класса конечного автомата.

  2. Реализовать метод part_of_loop класса конечного автомата. Этот метод возвращает истину, если текущее состояние является частью какого-либо цикла графа (без учета меток дуг).

  3. Реализовать обработку ошибок с помощью пользовательского класса исключения StateMachineException. При возбуждении (raise) исключения сообщение об ошибке является словом, которое определяет, оказался ли метод перехода неподдерживаемым ('unsupported') в данном состоянии или неизвестным ('unknown') для конечного автомата.

  4. Реализовать метод has_max_out_edges класса конечного автомата. Этот метод возвращает истину, если текущее состояние имеет максимальное число выходных дуг в графе.

  5. Реализовать функцию test для тестирования класса конечного автомата на основе метрики покрытия ветвей (branch coverage). Требуемая степень покрытия: 100%.

Детали работы методов класса конечного автомата показаны на примере, приведенном далее. Переменная obj содержит объект этого класса.

obj.race() # None
obj.get_output() # 'Y2'
obj.grow() # StateMachineException: 'unsupported'
obj.has_max_out_edges() # True
obj.part_of_loop() # False
obj.race() # None
obj.zoom() # StateMachineException: 'unsupported'
obj.get_output() # 'Y0'
obj.sit() # None
obj.part_of_loop() # True
obj.get_output() # 'Y4'
obj.part_of_loop() # True
obj.grow() # None
obj.get_output() # 'Y3'
obj.amass() # None
obj.part_of_loop() # True
obj.get_output() # 'Y4'
obj.part_of_loop() # True
obj.zoom() # None
obj.has_max_out_edges() # False
obj.part_of_loop() # True
obj.get_output() # 'Y4'
obj.fork() # StateMachineException: 'unknown'
obj.grow() # None
obj.has_max_out_edges() # False
obj.get_output() # 'Y3'
obj.zoom() # StateMachineException: 'unsupported'
obj.part_of_loop() # True
obj.amass() # None
obj.get_output() # 'Y4'
obj.zoom() # None
obj.get_output() # 'Y4'
obj.grow() # None
obj.get_output() # 'Y3'
obj.rig() # StateMachineException: 'unsupported'
obj.has_max_out_edges() # False

Вариант №24

Задача №11

Конечный автомат Мили представлен графом на картинке ниже. Необходимо реализовать этот конечный автомат в виде класса. Переходы из состояния в состояние осуществляются с помощью методов, названия которых основаны на словах, указанных на дугах графа (см. пример ниже).

  1. Реализовать функцию main, возвращающую экземпляр класса конечного автомата.

  2. Реализовать обработку ошибок с помощью пользовательского класса исключения MachineError. При возбуждении (raise) исключения сообщение об ошибке является словом, которое определяет, оказался ли метод перехода неподдерживаемым ('unsupported') в данном состоянии или неизвестным ('unknown') для конечного автомата.

  3. Реализовать функцию test для тестирования класса конечного автомата на основе метрики покрытия ветвей (branch coverage). Требуемая степень покрытия: 100%.

  4. Реализовать метод имя(значение) для задания значений переменных. Эти переменные определяют выбор перехода там, где состояние имеет несколько выходных дуг, помеченных одним и тем же методом (см. граф).

  5. Реализовать метод part_of_loop класса конечного автомата. Этот метод возвращает истину, если текущее состояние является частью какого-либо цикла графа (без учета меток дуг).

  6. Реализовать метод seen_state класса конечного автомата. Этот метод возвращает число посещений аргумента-состояния.

Детали работы методов класса конечного автомата показаны на примере, приведенном далее. Переменная obj содержит объект этого класса.

obj.part_of_loop() # True
obj.w(0) # None
obj.run('brake') # MachineError: 'unsupported'
obj.part_of_loop() # True
obj.t(1) # None
obj.run('pluck') # MachineError: 'unknown'
obj.run('clean') # 'a0'
obj.run('shift') # 'a0'
obj.seen_state('z4') # 0
obj.t(1) # None
obj.run('clean') # 'a0'
obj.part_of_loop() # True
obj.run('shift') # 'a0'
obj.run('reset') # MachineError: 'unknown'
obj.t(0) # None
obj.run('clean') # 'a0'
obj.seen_state('z4') # 0
obj.run('shift') # 'a3'
obj.run('brake') # 'a0'
obj.run('clean') # 'a3'
obj.run('brake') # 'a3'
obj.part_of_loop() # True
obj.seen_state('z5') # 1
obj.run('fill') # MachineError: 'unknown'
obj.run('jump') # 'a3'

Вариант №25

Задача №11

Конечный автомат Мура представлен графом на картинке ниже. Необходимо реализовать этот конечный автомат в виде класса. Переходы из состояния в состояние осуществляются с помощью методов, названия которых основаны на словах, указанных на дугах графа (см. пример ниже).

  1. Реализовать обработку ошибок с помощью пользовательского класса исключения StateMachineException. При возбуждении (raise) исключения сообщение об ошибке является словом, которое определяет, оказался ли метод перехода неподдерживаемым ('unsupported') в данном состоянии или неизвестным ('unknown') для конечного автомата.

  2. Реализовать функцию main, возвращающую экземпляр класса конечного автомата.

  3. Реализовать функцию test для тестирования класса конечного автомата на основе метрики покрытия ветвей (branch coverage). Требуемая степень покрытия: 100%.

  4. Реализовать метод has_path_to класса конечного автомата. Этот метод возвращает истину, если из текущего состояния по графу можно добраться до состояния-аргумента (без учета меток дуг).

  5. Реализовать метод seen_method класса конечного автомата. Этот метод возвращает истину, если аргумент-метод уже успешно выполнялся ранее.

Детали работы методов класса конечного автомата показаны на примере, приведенном далее. Переменная obj содержит объект этого класса.

obj.seen_method('fade') # False
obj.bolt() # None
obj.get_output() # 'y5'
obj.visit() # StateMachineException: 'unknown'
obj.fade() # None
obj.tail() # StateMachineException: 'unknown'
obj.get_output() # 'y4'
obj.drive() # None
obj.check() # StateMachineException: 'unsupported'
obj.get_output() # 'y1'
obj.fade() # None
obj.begin() # StateMachineException: 'unknown'
obj.get_output() # 'y1'
obj.check() # None
obj.get_output() # 'y1'
obj.sweep() # StateMachineException: 'unknown'
obj.mass() # None
obj.slur() # StateMachineException: 'unknown'
obj.get_output() # 'y4'
obj.drive() # None
obj.get_output() # 'y1'
obj.seen_method('check') # True
obj.fade() # None
obj.get_output() # 'y1'
obj.has_path_to('s0') # False
obj.check() # None
obj.get_output() # 'y1'
obj.fade() # None
obj.get_output() # 'y1'
obj.begin() # StateMachineException: 'unknown'
obj.has_path_to('s4') # True

Вариант №26

Задача №11

Конечный автомат Мили представлен графом на картинке ниже. Необходимо реализовать этот конечный автомат в виде класса. Переходы из состояния в состояние осуществляются с помощью методов, названия которых основаны на словах, указанных на дугах графа (см. пример ниже).

  1. Реализовать функцию main, возвращающую экземпляр класса конечного автомата.

  2. Реализовать метод имя(значение) для задания значений переменных. Эти переменные определяют выбор перехода там, где состояние имеет несколько выходных дуг, помеченных одним и тем же методом (см. граф).

  3. Реализовать функцию test для тестирования класса конечного автомата на основе метрики покрытия ветвей (branch coverage). Требуемая степень покрытия: 100%.

  4. Реализовать метод part_of_loop класса конечного автомата. Этот метод возвращает истину, если текущее состояние является частью какого-либо цикла графа (без учета меток дуг).

  5. Реализовать обработку ошибок для методов переходов. Возвращаемое методом сообщение об ошибке является словом, которое определяет, оказался ли метод перехода неподдерживаемым ('unsupported') в данном состоянии или неизвестным ('unknown') для конечного автомата.

  6. Реализовать метод seen_method класса конечного автомата. Этот метод возвращает число успешных выполнений аргумента-метода.

  7. Реализовать метод has_max_out_edges класса конечного автомата. Этот метод возвращает истину, если текущее состояние имеет максимальное число выходных дуг в графе.

Детали работы методов класса конечного автомата показаны на примере, приведенном далее. Переменная obj содержит объект этого класса.

obj.pose() # 'k2'
obj.part_of_loop() # False
obj.peep() # 'k1'
obj.chip() # 'unknown'
obj.part_of_loop() # False
obj.build() # 'k1'
obj.seen_method('sort') # 0
obj.unite() # 'k1'
obj.has_max_out_edges() # False

Вариант №27

Задача №11

Конечный автомат Мили представлен графом на картинке ниже. Необходимо реализовать этот конечный автомат в виде класса. Переходы из состояния в состояние осуществляются с помощью методов, названия которых основаны на словах, указанных на дугах графа (см. пример ниже).

  1. Реализовать метод get_step класса конечного автомата. Этот метод возвращает число совершенных переходов.

  2. Реализовать функцию test для тестирования класса конечного автомата на основе метрики покрытия ветвей (branch coverage). Требуемая степень покрытия: 100%.

  3. Реализовать функцию main, возвращающую экземпляр класса конечного автомата.

  4. Реализовать метод part_of_loop класса конечного автомата. Этот метод возвращает истину, если текущее состояние является частью какого-либо цикла графа (без учета меток дуг).

  5. Реализовать метод has_max_out_edges класса конечного автомата. Этот метод возвращает истину, если текущее состояние имеет максимальное число выходных дуг в графе.

  6. Реализовать метод set_имя(значение) для задания значений переменных. Эти переменные определяют выбор перехода там, где состояние имеет несколько выходных дуг, помеченных одним и тем же методом (см. граф).

  7. Реализовать обработку ошибок для методов переходов. Возвращаемое методом сообщение об ошибке является словом, которое определяет, оказался ли метод перехода неподдерживаемым ('unsupported') в данном состоянии или неизвестным ('unknown') для конечного автомата.

Детали работы методов класса конечного автомата показаны на примере, приведенном далее. Переменная obj содержит объект этого класса.

obj.part_of_loop() # True
obj.get_step() # 0
obj.set_v(0) # None
obj.trash() # 'Y1'
obj.trash() # 'Y3'
obj.amass() # 'Y2'
obj.has_max_out_edges() # False
obj.part_of_loop() # True
obj.rev() # 'unknown'
obj.clone() # 'Y4'
obj.forge() # 'unknown'
obj.set_v(1) # None
obj.stall() # 'unknown'
obj.has_max_out_edges() # False
obj.amass() # 'Y2'
obj.get_step() # 5
obj.part_of_loop() # True
obj.clone() # 'Y1'
obj.has_max_out_edges() # True
obj.clone() # 'Y0'
obj.part_of_loop() # True

Вариант №28

Задача №11

Конечный автомат Мили представлен графом на картинке ниже. Необходимо реализовать этот конечный автомат в виде класса. Переходы из состояния в состояние осуществляются с помощью методов, названия которых основаны на словах, указанных на дугах графа (см. пример ниже).

  1. Реализовать метод имя(значение) для задания значений переменных. Эти переменные определяют выбор перехода там, где состояние имеет несколько выходных дуг, помеченных одним и тем же методом (см. граф).

  2. Реализовать функцию main, возвращающую экземпляр класса конечного автомата.

  3. Реализовать метод part_of_loop класса конечного автомата. Этот метод возвращает истину, если текущее состояние является частью какого-либо цикла графа (без учета меток дуг).

  4. Реализовать функцию test для тестирования класса конечного автомата на основе метрики покрытия ветвей (branch coverage). Требуемая степень покрытия: 100%.

  5. Реализовать обработку ошибок с помощью пользовательского класса исключения FSMException. При возбуждении (raise) исключения сообщение об ошибке является словом, которое определяет, оказался ли метод перехода неподдерживаемым ('unsupported') в данном состоянии или неизвестным ('unknown') для конечного автомата.

  6. Реализовать метод seen_state класса конечного автомата. Этот метод возвращает истину, если аргумент-состояние уже было посещено.

Детали работы методов класса конечного автомата показаны на примере, приведенном далее. Переменная obj содержит объект этого класса.

obj.t(1) # None
obj.sweep() # 'q0'
obj.seen_state('h2') # False
obj.coat() # 'q1'
obj.code() # FSMException: 'unsupported'
obj.seen_state('h1') # True
obj.paint() # FSMException: 'unknown'
obj.sweep() # 'q1'
obj.hike() # 'q0'
obj.code() # 'q1'
obj.seen_state('h0') # False
obj.part_of_loop() # True
obj.t(1) # None
obj.skew() # FSMException: 'unknown'
obj.blame() # 'q1'
obj.blame() # FSMException: 'unsupported'
obj.sweep() # 'q0'
obj.hike() # 'q0'
obj.code() # 'q1'
obj.blame() # 'q1'

Вариант №29

Задача №11

Конечный автомат Мура представлен графом на картинке ниже. Необходимо реализовать этот конечный автомат в виде класса. Переходы из состояния в состояние осуществляются с помощью методов, названия которых основаны на словах, указанных на дугах графа (см. пример ниже).

  1. Реализовать метод имя(значение) для задания значений переменных. Эти переменные определяют выбор перехода там, где состояние имеет несколько выходных дуг, помеченных одним и тем же методом (см. граф).

  2. Реализовать обработку ошибок для методов переходов. Возвращаемое методом сообщение об ошибке является словом, которое определяет, оказался ли метод перехода неподдерживаемым ('unsupported') в данном состоянии или неизвестным ('unknown') для конечного автомата.

  3. Реализовать метод has_max_in_edges класса конечного автомата. Этот метод возвращает истину, если текущее состояние имеет максимальное число входных дуг в графе.

  4. Реализовать метод seen_edge класса конечного автомата. Этот метод возвращает число совершенных переходов между парой состояний-аргументов.

  5. Реализовать функцию test для тестирования класса конечного автомата на основе метрики покрытия ветвей (branch coverage). Требуемая степень покрытия: 100%.

  6. Реализовать функцию main, возвращающую экземпляр класса конечного автомата.

  7. Реализовать метод get_step класса конечного автомата. Этот метод возвращает число совершенных переходов.

Детали работы методов класса конечного автомата показаны на примере, приведенном далее. Переменная obj содержит объект этого класса.

obj.seen_edge('V7', 'V7') # 0
obj.u(1) # None
obj.has_max_in_edges() # False
obj.get_step() # 0
obj.k(0) # None
obj.e(1) # None
obj.mix() # None
obj.get_output() # 'g3'
obj.seen_edge('V0', 'V1') # 0
obj.has_max_in_edges() # True
obj.mask() # None
obj.get_output() # 'g5'
obj.place() # None
obj.has_max_in_edges() # True
obj.herd() # 'unsupported'
obj.get_output() # 'g4'
obj.mix() # None
obj.get_output() # 'g0'

Вариант №30

Задача №11

Конечный автомат Мили представлен графом на картинке ниже. Необходимо реализовать этот конечный автомат в виде класса. Переходы из состояния в состояние осуществляются с помощью методов, названия которых основаны на словах, указанных на дугах графа (см. пример ниже).

  1. Реализовать функцию test для тестирования класса конечного автомата на основе метрики покрытия ветвей (branch coverage). Требуемая степень покрытия: 100%.

  2. Реализовать метод has_path_to класса конечного автомата. Этот метод возвращает истину, если из текущего состояния по графу можно добраться до состояния-аргумента (без учета меток дуг).

  3. Реализовать обработку ошибок с помощью пользовательского класса исключения StateMachineError. При возбуждении (raise) исключения сообщение об ошибке является словом, которое определяет, оказался ли метод перехода неподдерживаемым ('unsupported') в данном состоянии или неизвестным ('unknown') для конечного автомата.

  4. Реализовать функцию main, возвращающую экземпляр класса конечного автомата.

  5. Реализовать метод part_of_loop класса конечного автомата. Этот метод возвращает истину, если текущее состояние является частью какого-либо цикла графа (без учета меток дуг).

  6. Реализовать метод set_var(имя, значение) для задания значений переменных. Эти переменные определяют выбор перехода там, где состояние имеет несколько выходных дуг, помеченных одним и тем же методом (см. граф).

  7. Реализовать метод seen_state класса конечного автомата. Этот метод возвращает истину, если аргумент-состояние уже было посещено.

Детали работы методов класса конечного автомата показаны на примере, приведенном далее. Переменная obj содержит объект этого класса.

obj.part_of_loop() # True
obj.set_var('f', 0) # None
obj.seen_state('s3') # False
obj.part_of_loop() # True
obj.carve() # 'U0'
obj.brake() # StateMachineError: 'unknown'
obj.cut() # 'U2'
obj.throw() # 'U1'
obj.paint() # 'U3'
obj.has_path_to('s6') # False

Вариант №31

Задача №11

Конечный автомат Мура представлен графом на картинке ниже. Необходимо реализовать этот конечный автомат в виде класса. Переходы из состояния в состояние осуществляются с помощью методов, названия которых основаны на словах, указанных на дугах графа (см. пример ниже).

  1. Реализовать функцию main, возвращающую экземпляр класса конечного автомата.

  2. Реализовать метод has_max_out_edges класса конечного автомата. Этот метод возвращает истину, если текущее состояние имеет максимальное число выходных дуг в графе.

  3. Реализовать функцию test для тестирования класса конечного автомата на основе метрики покрытия ветвей (branch coverage). Требуемая степень покрытия: 100%.

  4. Реализовать метод has_max_in_edges класса конечного автомата. Этот метод возвращает истину, если текущее состояние имеет максимальное число входных дуг в графе.

  5. Реализовать метод seen_edge класса конечного автомата. Этот метод возвращает истину, если переход между парой состояний-аргументов уже встречался ранее.

  6. Реализовать обработку ошибок с помощью пользовательского класса исключения MachineError. При возбуждении (raise) исключения сообщение об ошибке является словом, которое определяет, оказался ли метод перехода неподдерживаемым ('unsupported') в данном состоянии или неизвестным ('unknown') для конечного автомата.

Детали работы методов класса конечного автомата показаны на примере, приведенном далее. Переменная obj содержит объект этого класса.

obj.seen_edge('A3', 'A5') # False
obj.debug() # None
obj.get_output() # 'N1'
obj.mass() # None
obj.seen_edge('A4', 'A2') # False
obj.mass() # MachineError: 'unsupported'
obj.get_output() # 'N1'
obj.seen_edge('A0', 'A0') # False
obj.fork() # None
obj.get_output() # 'N0'
obj.slur() # MachineError: 'unknown'
obj.has_max_in_edges() # True
obj.has_max_out_edges() # False
obj.mask() # None
obj.get_output() # 'N1'

Вариант №32

Задача №11

Конечный автомат Мура представлен графом на картинке ниже. Необходимо реализовать этот конечный автомат в виде класса. Переходы из состояния в состояние осуществляются с помощью методов, названия которых основаны на словах, указанных на дугах графа (см. пример ниже).

  1. Реализовать обработку ошибок с помощью пользовательского класса исключения StateMachineException. При возбуждении (raise) исключения сообщение об ошибке является словом, которое определяет, оказался ли метод перехода неподдерживаемым ('unsupported') в данном состоянии или неизвестным ('unknown') для конечного автомата.

  2. Реализовать метод get_step класса конечного автомата. Этот метод возвращает число совершенных переходов.

  3. Реализовать метод assign_var(имя, значение) для задания значений переменных. Эти переменные определяют выбор перехода там, где состояние имеет несколько выходных дуг, помеченных одним и тем же методом (см. граф).

  4. Реализовать функцию main, возвращающую экземпляр класса конечного автомата.

  5. Реализовать метод has_max_out_edges класса конечного автомата. Этот метод возвращает истину, если текущее состояние имеет максимальное число выходных дуг в графе.

  6. Реализовать функцию test для тестирования класса конечного автомата на основе метрики покрытия ветвей (branch coverage). Требуемая степень покрытия: 100%.

Детали работы методов класса конечного автомата показаны на примере, приведенном далее. Переменная obj содержит объект этого класса.

obj.assign_var('y', 0) # None
obj.move('clean') # None
obj.get_output() # 'q2'
obj.move('skew') # None
obj.move('reset') # StateMachineException: 'unknown'
obj.get_output() # 'q2'
obj.move('boost') # None
obj.get_output() # 'q0'
obj.move('step') # None
obj.get_output() # 'q2'
obj.get_step() # 4
obj.move('clean') # None
obj.get_step() # 5
obj.has_max_out_edges() # True
obj.get_output() # 'q0'
obj.move('tread') # None
obj.assign_var('y', 1) # None
obj.get_output() # 'q2'
obj.move('boost') # None
obj.get_output() # 'q0'
obj.move('step') # None
obj.get_output() # 'q2'
obj.move('clean') # None
obj.get_output() # 'q0'
obj.move('tread') # None
obj.get_output() # 'q0'

Вариант №33

Задача №11

Конечный автомат Мура представлен графом на картинке ниже. Необходимо реализовать этот конечный автомат в виде класса. Переходы из состояния в состояние осуществляются с помощью методов, названия которых основаны на словах, указанных на дугах графа (см. пример ниже).

  1. Реализовать метод get_step класса конечного автомата. Этот метод возвращает число совершенных переходов.

  2. Реализовать функцию test для тестирования класса конечного автомата на основе метрики покрытия ветвей (branch coverage). Требуемая степень покрытия: 100%.

  3. Реализовать метод имя(значение) для задания значений переменных. Эти переменные определяют выбор перехода там, где состояние имеет несколько выходных дуг, помеченных одним и тем же методом (см. граф).

  4. Реализовать метод seen_state класса конечного автомата. Этот метод возвращает число посещений аргумента-состояния.

  5. Реализовать обработку ошибок для методов переходов. Возвращаемое методом сообщение об ошибке является словом, которое определяет, оказался ли метод перехода неподдерживаемым ('unsupported') в данном состоянии или неизвестным ('unknown') для конечного автомата.

  6. Реализовать функцию main, возвращающую экземпляр класса конечного автомата.

  7. Реализовать метод has_max_in_edges класса конечного автомата. Этот метод возвращает истину, если текущее состояние имеет максимальное число входных дуг в графе.

Детали работы методов класса конечного автомата показаны на примере, приведенном далее. Переменная obj содержит объект этого класса.

obj.run_brake() # 'unknown'
obj.v(0) # None
obj.has_max_in_edges() # False
obj.get_step() # 0
obj.z(0) # None
obj.run_rig() # 'unknown'
obj.w(1) # None
obj.get_step() # 0
obj.run_add() # None
obj.get_output() # 'Z1'
obj.run_crush() # None
obj.run_visit() # 'unknown'
obj.get_output() # 'Z3'
obj.has_max_in_edges() # True
obj.get_step() # 2
obj.run_add() # None
obj.z(0) # None
obj.get_step() # 3
obj.run_rig() # 'unknown'
obj.get_output() # 'Z3'
obj.has_max_in_edges() # True
obj.run_visit() # 'unknown'
obj.run_add() # None
obj.w(1) # None
obj.get_output() # 'Z4'
obj.get_step() # 4
obj.run_rev() # None
obj.v(1) # None
obj.get_output() # 'Z3'
obj.has_max_in_edges() # True
obj.run_add() # None
obj.run_crush() # 'unsupported'
obj.seen_state('q2') # 1
obj.get_output() # 'Z3'
obj.get_step() # 6
obj.run_add() # None
obj.has_max_in_edges() # False
obj.run_amble() # 'unknown'
obj.get_output() # 'Z4'
obj.run_rev() # None
obj.get_output() # 'Z1'

Вариант №34

Задача №11

Конечный автомат Мили представлен графом на картинке ниже. Необходимо реализовать этот конечный автомат в виде класса. Переходы из состояния в состояние осуществляются с помощью методов, названия которых основаны на словах, указанных на дугах графа (см. пример ниже).

  1. Реализовать функцию main, возвращающую экземпляр класса конечного автомата.

  2. Реализовать метод seen_method класса конечного автомата. Этот метод возвращает число успешных выполнений аргумента-метода.

  3. Реализовать метод has_max_in_edges класса конечного автомата. Этот метод возвращает истину, если текущее состояние имеет максимальное число входных дуг в графе.

  4. Реализовать обработку ошибок для методов переходов. Возвращаемое методом сообщение об ошибке является словом, которое определяет, оказался ли метод перехода неподдерживаемым ('unsupported') в данном состоянии или неизвестным ('unknown') для конечного автомата.

  5. Реализовать метод has_max_out_edges класса конечного автомата. Этот метод возвращает истину, если текущее состояние имеет максимальное число выходных дуг в графе.

  6. Реализовать метод let_имя(значение) для задания значений переменных. Эти переменные определяют выбор перехода там, где состояние имеет несколько выходных дуг, помеченных одним и тем же методом (см. граф).

  7. Реализовать функцию test для тестирования класса конечного автомата на основе метрики покрытия ветвей (branch coverage). Требуемая степень покрытия: 100%.

Детали работы методов класса конечного автомата показаны на примере, приведенном далее. Переменная obj содержит объект этого класса.

obj.has_max_in_edges() # False
obj.shift() # 'unknown'
obj.has_max_out_edges() # False
obj.let_u(0) # None
obj.has_max_in_edges() # False
obj.let_b(0) # None
obj.get() # 'f1'
obj.melt() # 'unsupported'
obj.get() # 'f0'
obj.get() # 'f0'
obj.skid() # 'f0'
obj.let_u(1) # None
obj.get() # 'f0'
obj.get() # 'unsupported'
obj.skid() # 'f1'
obj.pan() # 'f0'
obj.melt() # 'f0'
obj.melt() # 'f0'
obj.skid() # 'f0'
obj.seen_method('pan') # 1

Вариант №35

Задача №11

Конечный автомат Мура представлен графом на картинке ниже. Необходимо реализовать этот конечный автомат в виде класса. Переходы из состояния в состояние осуществляются с помощью методов, названия которых основаны на словах, указанных на дугах графа (см. пример ниже).

  1. Реализовать обработку ошибок с помощью пользовательского класса исключения FSMException. При возбуждении (raise) исключения сообщение об ошибке является словом, которое определяет, оказался ли метод перехода неподдерживаемым ('unsupported') в данном состоянии или неизвестным ('unknown') для конечного автомата.

  2. Реализовать функцию main, возвращающую экземпляр класса конечного автомата.

  3. Реализовать метод has_max_out_edges класса конечного автомата. Этот метод возвращает истину, если текущее состояние имеет максимальное число выходных дуг в графе.

  4. Реализовать функцию test для тестирования класса конечного автомата на основе метрики покрытия ветвей (branch coverage). Требуемая степень покрытия: 100%.

  5. Реализовать метод get_step класса конечного автомата. Этот метод возвращает число совершенных переходов.

Детали работы методов класса конечного автомата показаны на примере, приведенном далее. Переменная obj содержит объект этого класса.

obj.move_shade() # None
obj.get_step() # 1
obj.move_boost() # FSMException: 'unknown'
obj.get_output() # 'Y1'
obj.move_trash() # None
obj.get_step() # 2
obj.get_output() # 'Y1'
obj.has_max_out_edges() # True
obj.move_melt() # None
obj.get_output() # 'Y1'
obj.move_melt() # None
obj.move_shade() # FSMException: 'unsupported'
obj.get_step() # 4
obj.move_draw() # FSMException: 'unknown'
obj.get_output() # 'Y0'
obj.has_max_out_edges() # False
obj.move_clean() # None
obj.has_max_out_edges() # False
obj.get_output() # 'Y3'

Вариант №36

Задача №11

Конечный автомат Мили представлен графом на картинке ниже. Необходимо реализовать этот конечный автомат в виде класса. Переходы из состояния в состояние осуществляются с помощью методов, названия которых основаны на словах, указанных на дугах графа (см. пример ниже).

  1. Реализовать метод assign_var(имя, значение) для задания значений переменных. Эти переменные определяют выбор перехода там, где состояние имеет несколько выходных дуг, помеченных одним и тем же методом (см. граф).

  2. Реализовать функцию main, возвращающую экземпляр класса конечного автомата.

  3. Реализовать обработку ошибок с помощью пользовательского класса исключения StateMachineException. При возбуждении (raise) исключения сообщение об ошибке является словом, которое определяет, оказался ли метод перехода неподдерживаемым ('unsupported') в данном состоянии или неизвестным ('unknown') для конечного автомата.

  4. Реализовать метод has_max_out_edges класса конечного автомата. Этот метод возвращает истину, если текущее состояние имеет максимальное число выходных дуг в графе.

  5. Реализовать функцию test для тестирования класса конечного автомата на основе метрики покрытия ветвей (branch coverage). Требуемая степень покрытия: 100%.

  6. Реализовать метод has_path_to класса конечного автомата. Этот метод возвращает истину, если из текущего состояния по графу можно добраться до состояния-аргумента (без учета меток дуг).

Детали работы методов класса конечного автомата показаны на примере, приведенном далее. Переменная obj содержит объект этого класса.

obj.has_max_out_edges() # False
obj.assign_var('x', 0) # None
obj.has_max_out_edges() # False
obj.assign_var('m', 1) # None
obj.select_pose() # 'J0'
obj.has_path_to('N7') # False
obj.select_throw() # 'J1'
obj.has_path_to('N1') # True
obj.select_throw() # 'J6'
obj.select_file() # 'J2'
obj.select_throw() # 'J7'
obj.select_pose() # StateMachineException: 'unsupported'
obj.has_path_to('N4') # True

Вариант №37

Задача №11

Конечный автомат Мили представлен графом на картинке ниже. Необходимо реализовать этот конечный автомат в виде класса. Переходы из состояния в состояние осуществляются с помощью методов, названия которых основаны на словах, указанных на дугах графа (см. пример ниже).

  1. Реализовать обработку ошибок для методов переходов. Возвращаемое методом сообщение об ошибке является словом, которое определяет, оказался ли метод перехода неподдерживаемым ('unsupported') в данном состоянии или неизвестным ('unknown') для конечного автомата.

  2. Реализовать метод get_step класса конечного автомата. Этот метод возвращает число совершенных переходов.

  3. Реализовать функцию test для тестирования класса конечного автомата на основе метрики покрытия ветвей (branch coverage). Требуемая степень покрытия: 100%.

  4. Реализовать функцию main, возвращающую экземпляр класса конечного автомата.

  5. Реализовать метод seen_edge класса конечного автомата. Этот метод возвращает истину, если переход между парой состояний-аргументов уже встречался ранее.

Детали работы методов класса конечного автомата показаны на примере, приведенном далее. Переменная obj содержит объект этого класса.

obj.go_mask() # 'c5'
obj.go_etch() # 'c2'
obj.get_step() # 2
obj.go_etch() # 'c1'
obj.go_scrub() # 'c0'
obj.go_scrub() # 'c0'
obj.go_play() # 'c2'
obj.go_mask() # 'c2'
obj.go_shade() # 'unknown'
obj.seen_edge('e2', 'e3') # True

Вариант №38

Задача №11

Конечный автомат Мура представлен графом на картинке ниже. Необходимо реализовать этот конечный автомат в виде класса. Переходы из состояния в состояние осуществляются с помощью методов, названия которых основаны на словах, указанных на дугах графа (см. пример ниже).

  1. Реализовать метод get_step класса конечного автомата. Этот метод возвращает число совершенных переходов.

  2. Реализовать метод имя(значение) для задания значений переменных. Эти переменные определяют выбор перехода там, где состояние имеет несколько выходных дуг, помеченных одним и тем же методом (см. граф).

  3. Реализовать функцию test для тестирования класса конечного автомата на основе метрики покрытия ветвей (branch coverage). Требуемая степень покрытия: 100%.

  4. Реализовать метод has_path_to класса конечного автомата. Этот метод возвращает истину, если из текущего состояния по графу можно добраться до состояния-аргумента (без учета меток дуг).

  5. Реализовать обработку ошибок с помощью пользовательского класса исключения MooreError. При возбуждении (raise) исключения сообщение об ошибке является словом, которое определяет, оказался ли метод перехода неподдерживаемым ('unsupported') в данном состоянии или неизвестным ('unknown') для конечного автомата.

  6. Реализовать функцию main, возвращающую экземпляр класса конечного автомата.

  7. Реализовать метод part_of_loop класса конечного автомата. Этот метод возвращает истину, если текущее состояние является частью какого-либо цикла графа (без учета меток дуг).

Детали работы методов класса конечного автомата показаны на примере, приведенном далее. Переменная obj содержит объект этого класса.

obj.has_path_to('p3') # True
obj.j(1) # None
obj.part_of_loop() # True
obj.get_step() # 0
obj.go('place') # None
obj.has_path_to('p4') # True
obj.go('split') # MooreError: 'unknown'
obj.j(2) # None
obj.get_output() # 'c4'
obj.go('bolt') # None
obj.go('bolt') # MooreError: 'unsupported'
obj.get_output() # 'c4'
obj.part_of_loop() # True
obj.go('merge') # None
obj.go('bolt') # MooreError: 'unsupported'
obj.get_step() # 3
obj.go('skip') # MooreError: 'unknown'
obj.get_output() # 'c4'
obj.go('rig') # MooreError: 'unknown'
obj.part_of_loop() # True
obj.go('place') # None
obj.has_path_to('p0') # False
obj.part_of_loop() # False
obj.get_output() # 'c0'
obj.go('cue') # MooreError: 'unknown'
obj.get_step() # 4
obj.has_path_to('p5') # False
obj.go('place') # None
obj.get_output() # 'c3'

Вариант №39

Задача №11

Конечный автомат Мили представлен графом на картинке ниже. Необходимо реализовать этот конечный автомат в виде класса. Переходы из состояния в состояние осуществляются с помощью методов, названия которых основаны на словах, указанных на дугах графа (см. пример ниже).

  1. Реализовать метод has_max_out_edges класса конечного автомата. Этот метод возвращает истину, если текущее состояние имеет максимальное число выходных дуг в графе.

  2. Реализовать метод seen_method класса конечного автомата. Этот метод возвращает число успешных выполнений аргумента-метода.

  3. Реализовать метод set_имя(значение) для задания значений переменных. Эти переменные определяют выбор перехода там, где состояние имеет несколько выходных дуг, помеченных одним и тем же методом (см. граф).

  4. Реализовать функцию test для тестирования класса конечного автомата на основе метрики покрытия ветвей (branch coverage). Требуемая степень покрытия: 100%.

  5. Реализовать обработку ошибок с помощью пользовательского класса исключения MachineException. При возбуждении (raise) исключения сообщение об ошибке является словом, которое определяет, оказался ли метод перехода неподдерживаемым ('unsupported') в данном состоянии или неизвестным ('unknown') для конечного автомата.

  6. Реализовать функцию main, возвращающую экземпляр класса конечного автомата.

Детали работы методов класса конечного автомата показаны на примере, приведенном далее. Переменная obj содержит объект этого класса.

obj.has_max_out_edges() # True
obj.seen_method('erase') # 0
obj.set_m(0) # None
obj.set_c(1) # None
obj.select('draw') # MachineException: 'unknown'
obj.select('forge') # 'S1'
obj.seen_method('roam') # 0
obj.select('clone') # 'S1'
obj.select('erase') # 'S4'
obj.select('erase') # 'S0'
obj.select('forge') # 'S4'
obj.select('roam') # 'S0'

Вариант №40

Задача №11

Конечный автомат Мили представлен графом на картинке ниже. Необходимо реализовать этот конечный автомат в виде класса. Переходы из состояния в состояние осуществляются с помощью методов, названия которых основаны на словах, указанных на дугах графа (см. пример ниже).

  1. Реализовать функцию main, возвращающую экземпляр класса конечного автомата.

  2. Реализовать функцию test для тестирования класса конечного автомата на основе метрики покрытия ветвей (branch coverage). Требуемая степень покрытия: 100%.

  3. Реализовать метод seen_method класса конечного автомата. Этот метод возвращает число успешных выполнений аргумента-метода.

  4. Реализовать метод seen_state класса конечного автомата. Этот метод возвращает число посещений аргумента-состояния.

  5. Реализовать метод set_var(имя, значение) для задания значений переменных. Эти переменные определяют выбор перехода там, где состояние имеет несколько выходных дуг, помеченных одним и тем же методом (см. граф).

  6. Реализовать обработку ошибок для методов переходов. Возвращаемое методом сообщение об ошибке является словом, которое определяет, оказался ли метод перехода неподдерживаемым ('unsupported') в данном состоянии или неизвестным ('unknown') для конечного автомата.

  7. Реализовать метод has_max_in_edges класса конечного автомата. Этот метод возвращает истину, если текущее состояние имеет максимальное число входных дуг в графе.

Детали работы методов класса конечного автомата показаны на примере, приведенном далее. Переменная obj содержит объект этого класса.

obj.has_max_in_edges() # False
obj.seen_state('z4') # 0
obj.push() # 'unsupported'
obj.set_var('j', 1) # None
obj.seen_method('turn') # 0
obj.click() # 'Y0'
obj.push() # 'Y2'
obj.has_max_in_edges() # False
obj.set_var('j', 1) # None
obj.turn() # 'Y3'
obj.turn() # 'unsupported'
obj.push() # 'Y2'
obj.drag() # 'Y3'
obj.seen_method('drag') # 1