Skip to content

Commit

Permalink
Merge pull request #6 from generalofgotei/module4-task1
Browse files Browse the repository at this point in the history
  • Loading branch information
keksobot authored Dec 8, 2024
2 parents 5f25571 + 0066812 commit c408980
Show file tree
Hide file tree
Showing 3 changed files with 224 additions and 0 deletions.
1 change: 1 addition & 0 deletions index.html
Original file line number Diff line number Diff line change
Expand Up @@ -234,5 +234,6 @@ <h2 class="data-error__title">Не удалось загрузить данны
</section>
</template>
<script src="js/functions.js"></script>
<script src="js/main.js"></script>
</body>
</html>
65 changes: 65 additions & 0 deletions js/function.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
const checkStringLength = (str, length) => str.length <= length;
console.log(checkStringLength('тестовая строка', 5));

Check failure on line 2 in js/function.js

View workflow job for this annotation

GitHub Actions / Check

Unexpected console statement

function checkPalindrome(str) {
const normalizeStr = str.replaceAll(' ', '').toLowerCase();
let emptyStr = '';
for (let i = normalizeStr.length - 1; i >= 0; i--) {
emptyStr += normalizeStr[i];
}
return normalizeStr === emptyStr;
}

console.log('\n--- Тесты для palindromeChecker ---');

Check failure on line 13 in js/function.js

View workflow job for this annotation

GitHub Actions / Check

Unexpected console statement
console.log(

Check failure on line 14 in js/function.js

View workflow job for this annotation

GitHub Actions / Check

Unexpected console statement
`Строка является палиндромом: ${checkPalindrome('топот') === true}`
);
console.log(

Check failure on line 17 in js/function.js

View workflow job for this annotation

GitHub Actions / Check

Unexpected console statement
`Строка является палиндромом с разным регистром: ${
checkPalindrome('ДовОд') === true
}`
);
console.log(

Check failure on line 22 in js/function.js

View workflow job for this annotation

GitHub Actions / Check

Unexpected console statement
`Строка не является палиндромом: ${checkPalindrome('Кекс') === false}`
);
console.log(

Check failure on line 25 in js/function.js

View workflow job for this annotation

GitHub Actions / Check

Unexpected console statement
`Строка является палиндромом: ${
checkPalindrome('Лёша на полке клопа нашёл ') === true
}`
);

function extractNumber (str) {
str = String(str);
let extractedStr = '';
for (let i = 0; i <= str.length - 1; i++) {
const symbol = parseInt(str[i], 10);
if (!Number.isNaN(symbol)) {
extractedStr += symbol;
}
}
return Number(extractedStr) || NaN;
}

console.log('\n--- Тесты для extractNumber---');

Check failure on line 43 in js/function.js

View workflow job for this annotation

GitHub Actions / Check

Unexpected console statement
console.log(

Check failure on line 44 in js/function.js

View workflow job for this annotation

GitHub Actions / Check

Unexpected console statement
`Аргумент начинается с числа: ${extractNumber('2023 год') === 2023}`
);
console.log(

Check failure on line 47 in js/function.js

View workflow job for this annotation

GitHub Actions / Check

Unexpected console statement
`Аргумент заканчивается на число: ${
extractNumber('ECMAScript 2022') === 2022
}`
);
console.log(

Check failure on line 52 in js/function.js

View workflow job for this annotation

GitHub Actions / Check

Unexpected console statement
`Аргумент содержит несколько чисел, в том числе и с плавающей точкой: ${
extractNumber('1 кефир, 0.5 батона') === 105
}`
);
console.log(
`Аргумент заканчивается на число с нолями: ${
extractNumber('агент 007') === 7
}`
);
console.log(`Аргумент строка без чисел: ${isNaN(extractNumber('а я томат'))}`);
console.log(`Аргумент число: ${extractNumber(2023) === 2023}`);
console.log(`Аргумент отрицательное число: ${extractNumber(-1) === 1}`);
console.log(`Аргумент число с плавающей точкой: ${extractNumber(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 OBJECT_QTY = 25;

// диапазон ID фото
const IdPhotoRange = {
MIN: 1,
MAX: 25
};

// диапазон ID комментария
const IdMessageRange = {
MIN: 1,
MAX: 1111
};

// диапазон URL фотографий
const UrlRange = {
MIN: 1,
MAX: 25
};

// диапазон количества лайков
const LikesRange = {
MIN: 15,
MAX: 200
};

// диапазон количества комментариев
const CommentsRange = {
MIN: 0,
MAX: 30
};

// диапазон количества сообщений
const MessageRange = {
MIN: 1,
MAX: 2
};

// Диапазон номера картинки для аватара
const AvatarRange = {
MIN: 1,
MAX: 6
};

// Набор описаний фотографий
const DESCRIPTION = [
"Закат на берегу моря",
"Старинная улочка европейского города",
"Котенок спит на кровати",
"Заснеженные склоны Хибин",
"Букет цветов на столе",
"Велосипед пристегнутый на велопарковке",
"Чашка горячего кофе",
"Осенний парк с опавшей листвой",
"Маяк на скалистом берегу",
"Шмель на цветке",
"Деревенский домик в глухом лесу",
"Отражение звезд на поверхности Ладоги",
"Птенцы в гнезде",
"Радуга над зеленым полем после дождя",
"Следы на песчаном пляже"
];

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

// Имена авторов комментариев
const AUTHOR_NAME = [
"Довакин",
"Алдуин",
"Шеппард",
"Геральт",
"Супер Марио",
"Соник",
"Кратос",
"Солид Снейк",
"Клод Страйф",
"Лара Крофт",
"Наруто",
"Элли",
"Джоель",
"Сэм Фишер"
];

// Функция получения случайного положительного числа
const getRandomInt = (min, max) => {
min = Math.ceil(min);
max = Math.floor(max);
return Math.floor(Math.random() * (max - min + 1) + min);
};

// Функция получения уникального случайного положительного числа
const getRandomUniqueInt = (min, max) => {
const unAvailableInt = [];
return () => {
let currentInt = getRandomInt(min, max);
if (unAvailableInt.length >= (max - min + 1)) {
return null
}
while (unAvailableInt.includes(currentInt)) {
currentInt = getRandomInt(min, max)
};
unAvailableInt.push(currentInt);
return currentInt
}
};

// Функция выбора случайного элемента массива
const getRandomArrElement = (array) => array[getRandomInt(0, array.length - 1)];

// Функция получения ID фото
const getPhotoId = getRandomUniqueInt(IdPhotoRange.MIN, IdPhotoRange.MAX);

// Функция получения Url фото
const getRandomUrl = getRandomUniqueInt(UrlRange.MIN, UrlRange.MAX);

// Функция получения ID комментария
const getMessageId = getRandomUniqueInt(IdMessageRange.MIN, IdMessageRange.MAX);

// Функция создания комментария
const createComment = () => {
const messagesQty = [];
while (messagesQty.length < getRandomInt(MessageRange.MIN, MessageRange.MAX)) {
messagesQty.push(getRandomArrElement(MESSAGE));
}
return {
id: getMessageId(),
avatar: `img/avatar-${getRandomInt(AvatarRange.MIN, AvatarRange.MAX)}.svg`,
message: messagesQty.join(' '),
name: getRandomArrElement(AUTHOR_NAME)
};
};

// Функция генерирования объекта
const generateObj = () => {
const comments = Array.from({length: getRandomInt(CommentsRange.MIN, CommentsRange.MAX)}, createComment);
return {
id: getPhotoId(),
url: `photos/${getRandomUrl()}.jpg`,
description: getRandomArrElement(DESCRIPTION),
likes: getRandomInt(LikesRange.MIN, LikesRange.MAX),
comments
}
};

// Готовый массив сгенерированных объектов
const completeArr = Array.from({length: OBJECT_QTY}, generateObj);

// Проверка с выводов в таблицу (удалить перед сдачей)
console.table(completeArr);

0 comments on commit c408980

Please sign in to comment.