HardPro challengeJavaScriptTypeScript

Parallel State Machines

ReactState MachinesComposition

Compose two state machines into one. Both machines respond to events
independently. State is a tuple of both states.

solve(machineA, machineB, events) returns array of [stateA, stateB]
tuples after each event.

Sample tests

Test #1Independent transitions
Input: [{"initial":"1","transitions":{"1":{"tick":"2"},"2":{"tick":"1"}}},{"initial":"on","transitions":{"on":{"toggle":"off"},"off":{"toggle":"on"}}},["tick","toggle","tick"]]
Output: [["1","on"],["2","on"],["2","off"],["1","off"]]
Test #2Both machines transition
Input: [{"initial":"a","transitions":{"a":{"go":"b"}}},{"initial":"x","transitions":{"x":{"go":"y"}}},["go"]]
Output: [["a","x"],["b","y"]]
Test #3Only A transitions
Input: [{"initial":"a","transitions":{"a":{"go":"b"}}},{"initial":"x","transitions":{"x":{"other":"y"}}},["go"]]
Output: [["a","x"],["b","x"]]
Test #4No transitions, stay
Input: [{"initial":"a","transitions":{}},{"initial":"x","transitions":{}},["anything"]]
Output: [["a","x"],["a","x"]]
Test #5No events
Input: [{"initial":"s","transitions":{"s":{"e":"t"}}},{"initial":"s","transitions":{"s":{"e":"t"}}},[]]
Output: [["s","s"]]