public ProblemState <T> Result(ProblemState <T> state, ProblemAction action) { var(rowNumber, columnNumber) = state.FindEmpty(); var transitionState = new ProblemState <T>(state.GetLength(0), state.GetLength(1)); ProblemState <T> .Copy(state, transitionState, state.Length); int row = rowNumber, col = columnNumber; if (action == ProblemAction.Up) { row = rowNumber - 1; } if (action == ProblemAction.Down) { row = rowNumber + 1; } if (action == ProblemAction.Left) { col = columnNumber - 1; } if (action == ProblemAction.Right) { col = columnNumber + 1; } transitionState[row, col] = state[rowNumber, columnNumber]; transitionState[rowNumber, columnNumber] = state[row, col]; return(transitionState); }