Как упростить код (таблица умножения)? - C#
Формулировка задачи:
Помогите пожалуйста. Можно ли вот это преобразовать в одну строку без промежуточных переменных и условий?
static int[,] CreateTable(int startNumber, int endNumber)
{
int c = endNumber - startNumber;
if (c < 0)
{
c = Math.Abs(c);
}
int size = c + 2;
int[,] table = new int[size, size];
int coefficient;
if (startNumber > endNumber)
{
coefficient = 1;
}
else
{
coefficient = -1;
}
for (int i = 1; i < table.GetLength(0); i++)
{
table[i, 0] = startNumber - (coefficient * i) + coefficient;
table[0, i] = table[i, 0];
for (int j = 1; j < table.GetLength(1); j++)
{
table[i, j] = table[i, 0] * (startNumber - (coefficient * j) + coefficient);
}
}
return table;
}Решение задачи: «Как упростить код (таблица умножения)?»
textual
Листинг программы
var realStart = Math.Min(startNumber, endNumber); var tableSize = Math.Abs(endNumber - startNumber) + 1; var revertTable = endNumber > startNumber; var myTable = Enumerable.Repeat(1, 1).Concat( Enumerable.Range(realStart, tableSize).OrderBy(x => revertTable ? x : -x)) .Select(x => Enumerable.Repeat(1, 1).Concat( Enumerable.Range(realStart, tableSize).OrderBy(y => revertTable ? y : -y)) .Select(y => x == 1 && y == 1 ? 0 : y*x).ToArray()) .ToArray();