using System.Collections.Generic;
public static Dictionary<int, int> pressOffset = new Dictionary<int, int>
public static void Main()
int N = 4, length = 1000;
var shablon = new int[48, 2]
var result = Process(shablon, N, length);
Console.WriteLine(result);
public static string Process(int[,] shablon, int N, int length)
var shablonWithCoordinates = new int[49, 3];
for (var i = 0; i < 48; i++)
shablonWithCoordinates[i, 0] = shablon[i, 0];
shablonWithCoordinates[i, 1] = pressOffset.GetValueOrDefault(shablon[i, 0]) + shablon[i, 1];
shablonWithCoordinates[i, 2] = 0;
if (shablon[i, 0] == 0 || shablon[i, 0] == 0)
shablonWithCoordinates[i, 2] = int.MaxValue;
shablonWithCoordinates[48, 0] = 999;
shablonWithCoordinates[48, 1] = pressOffset.GetValueOrDefault(999) + length;
shablonWithCoordinates[48, 2] = 0;
int processedCoordinate = 0, numberOfItems = 0;
var result = string.Empty;
var taskInd = FindRowWithMinValueInColumn(shablonWithCoordinates, 1);
if (shablonWithCoordinates[taskInd, 2] < N)
result += $"Move {shablonWithCoordinates[taskInd, 1] - processedCoordinate}, " +
$"execute {shablonWithCoordinates[taskInd, 0]}, " +
$"coordinate {shablonWithCoordinates[taskInd, 1]} \n";
processedCoordinate = shablonWithCoordinates[taskInd, 1];
shablonWithCoordinates[taskInd, 1] += length;
shablonWithCoordinates[taskInd, 2]++;
if (shablonWithCoordinates[taskInd, 0] == 999)
shablonWithCoordinates[taskInd, 1] = int.MaxValue;
} while (numberOfItems < N);
public static int FindRowWithMinValueInColumn(int[,] matrix, int columnIndex)
var minValue = int.MaxValue;
for (var row = 0; row < matrix.GetLength(0); row++)
var valueInColumn = matrix[row, columnIndex];
if (valueInColumn < minValue)
minValue = valueInColumn;