Skip to content

Commit

Permalink
Merge pull request #3 from harl-i/module4-task1
Browse files Browse the repository at this point in the history
  • Loading branch information
keksobot authored Dec 9, 2024
2 parents 85c9010 + b6fd41a commit d92e409
Show file tree
Hide file tree
Showing 2 changed files with 158 additions and 54 deletions.
54 changes: 0 additions & 54 deletions js/functions.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,19 +3,6 @@ function checkStringLength(string, maxLength) {
return string.length <= maxLength;
}

console.log('\n--- Тесты для checkStringLength ---');
console.log(
`Проверяемая строка короче или равна 20 символам: ${checkStringLength('проверяемая строка', 20) === true}`
);

console.log(
`Проверяемая строка короче или равна 18 символам: ${checkStringLength('проверяемая строка', 18) === true}`
);

console.log(
`Проверяемая строка короче или равна 10 символам: ${checkStringLength('проверяемая строка', 10) === true}`
);

//Задача №2. Функция для проверки, является ли строка палиндромом.
function checkPalindrome(string) {

Check failure on line 7 in js/functions.js

View workflow job for this annotation

GitHub Actions / Check

'checkPalindrome' is defined but never used
const formattedString = string.replaceAll(' ', '').toLowerCase();
Expand All @@ -27,22 +14,6 @@ function checkPalindrome(string) {
return reverseString === formattedString;
}

console.log('\n--- Тесты для checkPalindrome ---');
console.log(
`Строка является палиндромом: ${checkPalindrome('топот') === true}`
);
console.log(
`Строка является палиндромом с разным регистром: ${checkPalindrome('ДовОд') === true
}`
);
console.log(
`Строка не является палиндромом: ${checkPalindrome('Кекс') === false}`
);
console.log(
`Строка является палиндромом: ${checkPalindrome('Лёша на полке клопа нашёл ') === true
}`
);

//Задача №3. Извлечение цифр из строк.
function parseToPositiveInt(string) {

Check failure on line 18 in js/functions.js

View workflow job for this annotation

GitHub Actions / Check

'parseToPositiveInt' is defined but never used
const stringForloop = string.toString();
Expand All @@ -56,28 +27,3 @@ function parseToPositiveInt(string) {

return formattedString !== '' ? +formattedString : NaN;
}

console.log('\n--- Тесты для extractNumber---');
console.log(
`Аргумент начинается с числа: ${parseToPositiveInt('2023 год') === 2023}`
);
console.log(
`Аргумент заканчивается на число: ${
parseToPositiveInt('ECMAScript 2022') === 2022
}`
);
console.log(
`Аргумент содержит несколько чисел, в том числе и с плавющей точкой: ${
parseToPositiveInt('1 кефир, 0.5 батона') === 105
}`
);
console.log(
`Аргумент закначивается на число с нолями: ${
parseToPositiveInt('агент 007') === 7
}`
);
console.log(`Аргумент строка без чисел: ${isNaN(parseToPositiveInt('а я томат'))}`);
console.log(`Аргумент число: ${parseToPositiveInt(2023) === 2023}`);
console.log(`Аргумент отрицательное число: ${parseToPositiveInt(-1) === 1}`);
console.log(`Аргумент число с плавющей точкой: ${parseToPositiveInt(1.5) === 15}`);

158 changes: 158 additions & 0 deletions js/main.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,158 @@
const OBJECTS_COUNT = {
MIN: 0,
MAX: 26
};

const COMMENTS_COUNT = {
MIN: 0,
MAX: 30
};

const AVATARS_COUNT = {
MIN: 0,
MAX: 6
};

const SENTENCES_COUNT = {
MIN: 0,
MAX: 4
};

const LIKES_COUNT = {
MIN: 15,
MAX: 200
};

const RANDOM_VALUE = {
MIN: 0,
MAX: 100000
};

const PHOTO_DESCRIPTIONS = ['Закат над океаном',
'Густой лес в тумане', 'Старая каменная башня', 'Поле с подсолнухами', 'Заснеженные горы на рассвете',
'Уличное кафе в Париже', 'Тихий пляж с белым песком', 'Пейзаж с речкой и мостиком', 'Яркий фейерверк ночью',
'Городская улица в дождь', 'Цветущий сад весной', 'Корабль в открытом море', 'Тропа в осеннем лесу',
'Кошка на подоконнике', 'Ночное небо с луной', 'Живописный водопад', 'Рынок со свежими фруктами',
'Древние руины в пустыне', 'Скала у побережья', 'Группа воздушных шаров в небе', 'Кофе и книги на столе',
'Пастбище с коровами', 'Детский парк с аттракционами', 'Чайный домик в Японии', 'Маяк на скалистом берегу',
'Озеро с отражением леса', 'Снежная деревня зимой', 'Песчаные дюны в пустыне', 'Романтический мост в вечернем свете',
'Улица с цветными домами', 'Яхты в маленькой гавани', 'Кристально чистое горное озеро', 'Поле с маковыми цветами',
'Маленькая хижина в горах', 'Закат в тропиках', 'Стадо оленей на рассвете', 'Городской парк с фонтаном',
'Облачный горизонт над мегаполисом', 'Гребной канал с лодками', 'Старинный замок в горах'];

const MESSAGES = ['Всё отлично! В целом всё неплохо. Но не всё.',
'Когда вы делаете фотографию, хорошо бы убирать палец из кадра. В конце концов это просто непрофессионально.',
'Моя бабушка случайно чихнула с фотоаппаратом в руках и у неё получилась фотография лучше.',
'Я поскользнулся на банановой кожуре и уронил фотоаппарат на кота и у меня получилась фотография лучше.',
'Лица у людей на фотке перекошены, как будто их избивают.', 'Как можно было поймать такой неудачный момент?!'];


const NAMES = ['Алексей', 'Мария', 'Иван', 'Екатерина', 'Дмитрий', 'Ольга', 'Николай', 'Анна', 'Сергей', 'Елена',
'Владимир', 'Татьяна', 'Артур', 'Наталья', 'Павел', 'Ирина', 'Кирилл', 'Светлана', 'Максим', 'Юлия'];

function getRandomPhotoObjects({ photoGeneratorParameters }) {
const {
paramCount,
paramGetRandomInteger,
paramGetUniqueValue,
paramDescriptions,
paramObjectsCount,
paramLikesCount,
} = photoGeneratorParameters;

const objects = [];
const getUniquePhotoIdValue = paramGetUniqueValue(paramGetRandomInteger, paramObjectsCount.MIN, paramObjectsCount.MAX);
const getUniqueUrlValue = paramGetUniqueValue(paramGetRandomInteger, paramObjectsCount.MIN, paramObjectsCount.MAX);


for (let i = 0; i < paramCount; i++) {
const comments = getRandomComments();

const photoId = getUniquePhotoIdValue();
const url = getUniqueUrlValue();
const description = paramDescriptions[paramGetRandomInteger(0, paramDescriptions.length)];
const likes = paramGetRandomInteger(paramLikesCount.MIN, paramLikesCount.MAX);

objects.push({
photoId,
url,
description,
likes,
comments
});
}

return objects;
}

function getRandomComments() {
const comments = [];
const getUniqueCommentIdValue = getUniqueValue(getRandomInteger, RANDOM_VALUE.MIN, RANDOM_VALUE.MAX);
const commentsCount = getRandomInteger(COMMENTS_COUNT.MIN, COMMENTS_COUNT.MAX);

for (let j = 0; j < commentsCount; j++) {
const commentId = getUniqueCommentIdValue();
const avatar = `img/avatar-${getRandomInteger(AVATARS_COUNT.MIN, AVATARS_COUNT.MAX)}.svg`;
const commentsList = getRandomArrayElements(MESSAGES, getRandomInteger, SENTENCES_COUNT.MAX);
const name = getRandomArrayElements(NAMES, getRandomInteger);

comments.push({
commentId,
avatar,
commentsList,
name
});
}
return comments;
}

function getUniqueValue(getRandomInt, min, max) {
const previousValues = [];

return function () {
let currentValue = getRandomInt(min, max);
if (previousValues.length >= (max - min + 1)) {
return null;
}
while (previousValues.includes(currentValue)) {
currentValue = getRandomInteger(min, max);
}
previousValues.push(currentValue);
return currentValue;
};
}

function getRandomArrayElements(array, getRandomInt, maxLength = 1) {
const elements = [];
for (let i = 0; i < maxLength; i++) {
elements.push(array[getRandomInt(0, array.length)]);
}

return elements.join(' ');
}

function getRandomInteger(min, max) {
const lower = Math.ceil(Math.min(Math.abs(min), Math.abs(max)));
const upper = Math.floor(Math.max(Math.abs(min), Math.abs(max)));
const result = Math.random() * (upper - lower + 1) + lower;

return Math.floor(result);
}

const parameters = {
paramCount: OBJECTS_COUNT.MAX,
paramGetRandomInteger: getRandomInteger,
paramGetUniqueValue: getUniqueValue,
paramGetRandomArrayElements: getRandomArrayElements,
paramDescriptions: PHOTO_DESCRIPTIONS,
paramRandomValue: RANDOM_VALUE,
paramObjectsCount: OBJECTS_COUNT,
paramCommentsCount: COMMENTS_COUNT,
paramAvatarsCount: AVATARS_COUNT,
paramSentencesCount: SENTENCES_COUNT,
paramLikesCount: LIKES_COUNT,
paramMessages: MESSAGES,
paramNames: NAMES
};

const generatedObjects = getRandomPhotoObjects({photoGeneratorParameters: parameters});

Check failure on line 158 in js/main.js

View workflow job for this annotation

GitHub Actions / Check

'generatedObjects' is assigned a value but never used

0 comments on commit d92e409

Please sign in to comment.