Skip to content

Instantly share code, notes, and snippets.

@ofcRS
Created July 11, 2025 08:38
Show Gist options
  • Select an option

  • Save ofcRS/47d2f3748cf461479e72fdc17097d90d to your computer and use it in GitHub Desktop.

Select an option

Save ofcRS/47d2f3748cf461479e72fdc17097d90d to your computer and use it in GitHub Desktop.
/**
* Утилитарная функция для генерации случайного целого числа в заданном диапазоне.
* @param {number} min - Минимальное возможное значение (включительно).
* @param {number} max - Максимальное возможное значение (включительно).
* @returns {number} Случайное целое число.
*/
function getRandomInt(min, max) {
min = Math.ceil(min);
max = Math.floor(max);
return Math.floor(Math.random() * (max - min + 1)) + min;
}
/**
* Создает и заполняет двумерный массив (матрицу) случайными числами.
* @param {number} rows - Количество строк в матрице.
* @param {number} cols - Количество столбцов в матрице.
* @param {number} minVal - Минимальное значение для случайных чисел.
* @param {number} maxVal - Максимальное значение для случайных чисел.
* @returns {number[][]} Сгенерированный двумерный массив.
*/
function createMatrix(rows, cols, minVal, maxVal) {
const matrix = [];
for (let i = 0; i < rows; i++) {
const row = [];
for (let j = 0; j < cols; j++) {
row.push(getRandomInt(minVal, maxVal));
}
matrix.push(row);
}
return matrix;
}
/**
* Находит наименьшее положительное число в строке.
* @param {number[]} row - Массив чисел (строка матрицы).
* @returns {number | string} Наименьшее положительное число или строка "нет", если таких чисел нет.
*/
function findMinPositive(row) {
const positives = row.filter(num => num > 0);
if (positives.length === 0) {
return "нет"; // Обработка пограничного случая, когда в строке нет положительных чисел.
}
return Math.min(...positives);
}
/**
* Рассчитывает минимальное количество замен, необходимых для того,
* чтобы в строке не было трех последовательных положительных или отрицательных чисел.
* Ноль не считается ни положительным, ни отрицательным.
* @param {number[]} row - Массив чисел (строка матрицы).
* @returns {number} Минимальное количество замен.
*/
function countReplacements(row) {
if (row.length < 3) {
return 0; // Замены не требуются, если в строке меньше 3 элементов.
}
let replacements = 0;
// Создаем массив знаков для удобства. 1 для >0, -1 для <0, 0 для 0.
const signs = row.map(num => Math.sign(num));
for (let i = 0; i <= signs.length - 3; i++) {
const sign1 = signs[i];
const sign2 = signs[i + 1];
const sign3 = signs[i + 2];
// Проверяем, что все три знака одинаковы и не равны нулю.
if (sign1 !== 0 && sign1 === sign2 && sign2 === sign3) {
replacements++;
// Чтобы избежать повторного подсчета той же последовательности,
// мы "пропускаем" следующие два элемента, так как одна замена
// (например, среднего элемента) уже решает проблему для этой тройки.
i += 2;
}
}
return replacements;
}
/**
* Основная функция для выполнения скрипта.
*/
function main() {
// --- 1. Инициализация ---
const ROWS = 10;
const COLS = 10;
const MIN_RANDOM_VAL = -100;
const MAX_RANDOM_VAL = 100;
// --- 2. Создание массива ---
const matrix = createMatrix(ROWS, COLS, MIN_RANDOM_VAL, MAX_RANDOM_VAL);
// --- 3. Поиск глобального минимума и его строки ---
let globalMin = Infinity;
let minRowIndex = -1;
matrix.forEach((row, index) => {
const rowMin = Math.min(...row);
if (rowMin < globalMin) {
globalMin = rowMin;
minRowIndex = index;
}
});
// --- 4. Вывод результатов в консоль ---
console.log("Сгенерированный массив и анализ строк:");
console.log("=".repeat(120));
matrix.forEach((row, index) => {
// Выполняем вычисления для текущей строки
const minPositive = findMinPositive(row);
const replacements = countReplacements(row);
// Форматируем вывод для читаемости
const marker = (index === minRowIndex) ? '*' : ' '; // Метка для строки с минимальным элементом
const formattedRow = row.map(num => String(num).padStart(5, ' ')).join('');
const minPositiveStr = `Наим. полож.: ${String(minPositive).padEnd(4, ' ')}`;
const replacementsStr = `Замен: ${replacements}`;
// Выводим отформатированную строку
console.log(`${marker} [${formattedRow} ] | ${minPositiveStr} | ${replacementsStr}`);
});
console.log("=".repeat(120));
console.log(`* - отмечена строка, содержащая минимальное число во всем массиве (${globalMin}).`);
}
// Запуск скрипта
main();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment