filipg/amu_automata_2011 — Issue #108: Opracować w AutomatonSpecification metodę wstawiającą kopię innego automatu [DUŻO PUNKTÓW ZE WZGLĘDU NA PILNOŚĆ ZADANIA!!!]
Author: filipg
Created: 2011-10-19 07:09:59+00:00
State: open

Należy opracować metodę:

/**
* Wstawia począwszy od stanu state kopię automatu automaton. Stan state będzie utożsamiony ze stanem
* początkowym automatu automaton.
*/
void insert(State state, AutomatonSpecification automaton);

Jedyna trudność to skopiowanie (sklonowanie) automatu. Należy do tego rzecz jasna wykorzystać metody `addState` i `addTransition`, z tym że trzeba oczywiście sklonować stany! Można to zrobić np. tak:

* wyciągnąć wszystkie stany wstawianego automatu (metoda `allStates`),
* dla każdego takiego stanu - z wyjątkiem stanu początkowego - utworzyć nowy stan w automacie , do którego wstawiamy,
* utworzyć tablicę haszującą (`HashMap`) wiążącą stany z automatu wstawianego ze nowo utworzonymi stanami z automatu, do którego wstawiamy,
* ... stan początkowy z automatu wstawianego wiążemy ze stanem `state`,
* przechodzimy przez kolejne stany, dla każdego stanu tworzymy kopię przejść, jaki ma być stan docelowy (w automacie, do którego wstawiamy), odczytujemy z tablicy haszującej.