/// <summary> /// creates a spreadsheet instance with width x height /// </summary> /// <param name="input">can be null</param> /// <param name="arguments">takes in array of integer: [width, height]</param> /// <returns></returns> public override SpreadsheetCommandResult Execute(ISheet input, params string[] arguments) { var result = new SpreadsheetCommandResult(); int width, height; if (arguments.Length != 2) { result.ErrorMessage = "Invalid Arguments"; result.Success = false; } else if (int.TryParse(arguments[0], out width) && int.TryParse(arguments[1], out height)) { if (width >= 1 && height >= 1) { result.Spreadsheet = new SimpleSpreadsheet(width, height); result.Success = true; } else { result.ErrorMessage = "width and height must be greater than 0"; result.Success = false; } } else { result.ErrorMessage = "width and height must be integers greater than 0"; result.Success = false; } return(result); }
/// <summary> /// update the spreadsheet with specific x/y coordinate /// </summary> /// <param name="input">input spreadsheet</param> /// <param name="arguments">x/y coordinate and value: [x,y,value]</param> /// <returns>updated spreadsheet object, error code, execution status</returns> public override SpreadsheetCommandResult Execute(ISheet input, params string[] arguments) { var result = new SpreadsheetCommandResult(); int x, y; float value; if (arguments.Length != 3) { result.ErrorMessage = "Invalid Arguments"; result.Success = false; } else if (input == null) { result.ErrorMessage = "No Spreadsheet is provided"; result.Success = false; } else if (int.TryParse(arguments[0], out x) && int.TryParse(arguments[1], out y) && float.TryParse(arguments[2], out value) ) { if (!input.IsWithinRange(x, y)) { result.ErrorMessage = "Index out of range"; result.Success = false; } else { input[x, y] = value.ToString(); result.Spreadsheet = input; result.Success = true; } } else { result.ErrorMessage = "X and Y must be integers, Value must be float value"; result.Success = false; } return(result); }
/// <summary> /// Sum up the cell values in the specified range /// </summary> /// <param name="input">input spreadsheet</param> /// <param name="arguments">calculate the sum from cells (fromX, fromY) to (toX, toY) /// value will be updated to the cell (targetX, targetY) /// [fromX, fromY, toX, toY, targetX, targetY] /// </param> /// <returns></returns> public override SpreadsheetCommandResult Execute(ISheet input, params string[] arguments) { var result = new SpreadsheetCommandResult(); int fromX, fromY, toX, toY, targetX, targetY; result.Success = false; //start the checking if (arguments.Length != 6) { result.ErrorMessage = "argument must be 6 integers"; } else if (!int.TryParse(arguments[0], out fromX)) { result.ErrorMessage = "fromX must a integer value"; } else if (!int.TryParse(arguments[1], out fromY)) { result.ErrorMessage = "fromY must a integer values"; } else if (!int.TryParse(arguments[2], out toX)) { result.ErrorMessage = "toX must a integer value"; } else if (!int.TryParse(arguments[3], out toY)) { result.ErrorMessage = "toY must a integer value"; } else if (!int.TryParse(arguments[4], out targetX)) { result.ErrorMessage = "targetX must a integer value"; } else if (!int.TryParse(arguments[5], out targetY)) { result.ErrorMessage = "targetY must a integer value"; } else if (fromX < 0 || fromY < 0 || toX >= input.Width || toY >= input.Height || targetX < 0 || targetY < 0 || targetX >= input.Width || targetY >= input.Height) { result.ErrorMessage = "selectionout of range"; } else { //passes all validation //execute the Sum operation result.Success = true; float sum = 0f; for (int x = fromX; x <= toX; x++) { for (int y = fromY; y <= toY; y++) { float value; if (input.HasValue(x, y) && float.TryParse(input[x, y].ToString(), out value)) { sum += value; } } } input[targetX, targetY] = sum.ToString(); result.Spreadsheet = input; } return(result); }