42 lines
1.9 KiB
JavaScript
42 lines
1.9 KiB
JavaScript
import { Brick } from '../brick';
|
|||
|
|
|
||
|
|
/**
|
||
|
|
* Ложит кирпичи по заданым размерам
|
||
|
|
* @param {number} columnAmount количество кирпичей по оси X, неотрицателное, целое число
|
||
|
|
* @param {number} rowAmount количество кирпичей по оси Y, неотрицателное, целое число
|
||
|
|
* @param {number} brickWidth ширина кирпича, неотрицателное число
|
||
|
|
* @param {number} brickHeight длина кирпича, неотрицателное число
|
||
|
|
* @returns {Brick[][]} массив с массивами кирпичей
|
||
|
|
*/
|
||
|
|
export function layBricks(columnAmount, rowAmount, brickWidth, brickHeight) {
|
||
|
|
try {
|
||
|
|
const someArgsArentNumbers = [columnAmount, rowAmount, brickWidth, brickHeight].some(
|
||
|
|
(arg) => typeof arg !== 'number',
|
||
|
|
);
|
||
|
|
if (someArgsArentNumbers) {
|
||
|
|
throw new Error('Параметры кладки кирпичей должны являться числами');
|
||
|
|
}
|
||
|
|
|
||
|
|
const someArgsLessThanZero = [columnAmount, rowAmount, brickWidth, brickHeight].some((arg) => arg < 0);
|
||
|
|
if (someArgsLessThanZero) {
|
||
|
|
throw new Error('Параметры кладки кирпичей должны являться положительными целыми числами');
|
||
|
|
}
|
||
|
|
|
||
|
|
const rowsOrColumnsAreFloat = [columnAmount, rowAmount].some((amount) => amount % 1 !== 0);
|
||
|
|
if (rowsOrColumnsAreFloat) {
|
||
|
|
throw new Error('Размеры рядов и колонок должны являться целыми числами');
|
||
|
|
}
|
||
|
|
|
||
|
|
const bricks = Array.from({ length: rowAmount }).map((_, rowIndex) =>
|
||
|
|
Array.from({ length: columnAmount }).map(
|
||
|
|
(_, columnIndex) => new Brick(columnIndex * brickWidth, rowIndex * brickHeight, brickWidth, brickHeight),
|
||
|
|
),
|
||
|
|
);
|
||
|
|
|
||
|
|
return bricks;
|
||
|
|
} catch (err) {
|
||
|
|
console.error(err);
|
||
|
|
return null;
|
||
|
|
}
|
||
|
|
}
|