Обратить строку. Напишите функцию, которая принимает строку в качестве входных данных и возвращает ее в обратном порядке.

function reverseString(str) {
  // Split the string into an array of characters
  const chars = str.split('');

  // Reverse the order of the characters in the array
  const reversedChars = chars.reverse();

  // Join the characters back into a string
  const reversedStr = reversedChars.join('');

  // Return the reversed string
  return reversedStr;
}

Проверка палиндрома: напишите функцию, которая проверяет, является ли заданная строка палиндромом (читается одинаково вперед и назад).

function isPalindrome(str) {
  // Remove non-alphanumeric characters and convert to lowercase
  const formattedStr = str.replace(/[^A-Za-z0-9]/g, '').toLowerCase();

  // Reverse the formatted string
  const reversedStr = formattedStr.split('').reverse().join('');

  // Check if the original and reversed strings are equal
  return formattedStr === reversedStr;
}

Факториал. Напишите функцию, которая вычисляет факториал заданного числа. Факториал числа n — это произведение всех положительных целых чисел, меньших или равных n.

function factorial(num) {
  if (num === 0) {
    return 1;
  }
  return num * factorial(num - 1);
}

Сумма массива. Напишите функцию, которая вычисляет сумму всех чисел в массиве.

const sumArray = arr => arr.reduce((sum, num) => sum + num, 0);

Найти максимальное число. Напишите функцию, которая находит максимальное число в массиве.

const findMaximumNumber = arr => Math.max(...arr);

Удалить дубликаты. Напишите функцию, которая удаляет повторяющиеся элементы из массива и возвращает новый массив без дубликатов.

function removeDuplicates(arr) {
  return [...new Set(arr)];
}

//older browsers

function removeDuplicates(arr) {
  const uniqueArr = [];

  for (let i = 0; i < arr.length; i++) {
    if (!uniqueArr.includes(arr[i])) {
      uniqueArr.push(arr[i]);
    }
  }

  return uniqueArr;
}

Проверить простое число. Напишите функцию, которая проверяет, является ли заданное число простым (делится только на 1 и само на себя).

function findPrimeNumbers(n) {
  const primes = [];

  for (let num = 2; num <= n; num++) {
    let isPrime = true;

    for (let i = 2; i < num; i++) {

Найти самое длинное слово. Напишите функцию, которая принимает предложение в качестве входных данных и возвращает самое длинное слово в предложении.

function findLongestWord(sentence) {
  const words = sentence.split(' ');
  let longestWord = '';

  for (const word of words) {
    if (word.length > longestWord.length) {
      longestWord = word;
    }
  }

  return longestWord;
}

Проверка анаграммы. Напишите функцию, которая проверяет, являются ли две строки анаграммами (содержат одинаковые символы в разном порядке).

function checkAnagram(str1, str2) {
  const sortedStr1 = str1.split('').sort().join('');
  const sortedStr2 = str2.split('').sort().join('');

  return sortedStr1 === sortedStr2;
}

Регистр заглавий: напишите функцию, которая преобразует заданную строку в регистр заглавий (первая буква каждого слова заглавная).

function toTitleCase(sentence) {
  const words = sentence.split(' ');

  for (let i = 0; i < words.length; i++) {
    const firstLetter = words[i][0].toUpperCase();
    const restOfWord = words[i].slice(1).toLowerCase();
    words[i] = firstLetter + restOfWord;
  }

  return words.join(' ');
}

Обратить целое число. Напишите функцию, которая принимает целое число в качестве входных данных и возвращает обратное значение этого целого числа.

function reverseInteger(num) {
  const reversed = parseInt(num.toString().split('').reverse().join(''));
  return Math.sign(num) * reversed;
}

Подсчет символов. Напишите функцию, которая подсчитывает количество вхождений каждого символа в заданной строке.

function countCharacters(str) {
  const charCount = {};

  for (const char of str) {
    charCount[char] = charCount[char] + 1 || 1;
  }

  return charCount;
}

Найти пропущенное число. Напишите функцию, которая находит пропущенное число в заданном массиве последовательных чисел.

function findMissingNumber(arr) {
  const n = arr.length + 1;
  const expectedSum = (n * (n + 1)) / 2;
  const actualSum = arr.reduce((sum, num) => sum + num, 0);
  return expectedSum - actualSum;
}

Подтвердить адрес электронной почты. Напишите функцию, которая проверяет, является ли данная строка действительным адресом электронной почты.

function validateEmail(email) {
  const regex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
  return regex.test(email);
}

Удалить четные числа. Напишите функцию, которая удаляет все четные числа из заданного массива и возвращает новый массив только с нечетными числами.

const removeEvenNumbers = arr => arr.filter(num => num % 2 !== 0);

Проверка числа Армстронга. Напишите функцию, которая проверяет, является ли заданное число числом Армстронга (сумма кубов его цифр равна самому числу).

function isArmstrongNumber(num) {
  const numString = num.toString();
  const numDigits = numString.length;
  let sum = 0;

  for (const digit of numString) {
    sum += parseInt(digit) ** numDigits;
  }
  return sum === num;
}

Двоичное число в десятичное. Напишите функцию, которая преобразует двоичное число в его десятичный эквивалент.

function binaryToDecimal(binary) {
  return parseInt(binary, 2);
}

Найдите все возможные анаграммы данного слова:

function getAnagrams(word) {
  // Base case: If the word has only one or zero characters, return an array with the word itself
  if (word.length <= 1) {
    return [word];
  }

  const anagrams = [];

  // Iterate through each character in the word
  for (let i = 0; i < word.length; i++) {
    // Extract the current character
    const currentChar = word[i];

    // Exclude the current character from the remaining word
    const remainingChars = word.slice(0, i) + word.slice(i + 1);

    // Recursively find anagrams of the remaining characters
    const subAnagrams = getAnagrams(remainingChars);

    // Append the current character to each sub-anagram
    for (let j = 0; j < subAnagrams.length; j++) {
      anagrams.push(currentChar + subAnagrams[j]);
    }
  }

  return anagrams;
}

Лифт: когда пользователь вводит число, функция добавляет это число в массив и возвращает отсортированный массив.

function addAndSortNumber(number, array) {
  array.push(number);
  return array.sort((a, b) => a - b);
}

//without sort

function addAndSortNumber(number, array) {
  if (array.length === 0) {
    array.push(number);
  } else {
    let index = 0;
    while (index < array.length && array[index] < number) {
      index++;
    }
    array.splice(index, 0, number);
  }
  return array;
}

Серия Фибоначчи:

function generateFibonacciSeries(n) {
  const series = [0, 1]; // Initialize the series with the first two numbers

  // Generate the Fibonacci series up to n
  while (series[series.length - 1] + series[series.length - 2] <= n) {
    const nextNumber = series[series.length - 1] + series[series.length - 2];
    series.push(nextNumber);
  }

  return series;
}

Подсчет гласных: напишите функцию, которая подсчитывает количество гласных в заданной строке. Рассмотрим как прописные, так и строчные гласные (a, e, i, o, u).

function countVowels(str) {
  const vowels = 'aeiouAEIOU';
  let count = 0;

  for (let i = 0; i < str.length; i++) {
    if (vowels.includes(str[i])) {
      count++;
    }
  }

  return count;
}

Объединить отсортированные массивы: напишите функцию, которая объединяет два отсортированных массива в один отсортированный массив. Входные массивы уже отсортированы по возрастанию.

function mergeSortedArrays(arr1, arr2) {
  const mergedArray = [];
  let i = 0; // Pointer for arr1
  let j = 0; // Pointer for arr2

  while (i < arr1.length && j < arr2.length) {
    if (arr1[i] <= arr2[j]) {
      mergedArray.push(arr1[i]);
      i++;
    } else {
      mergedArray.push(arr2[j]);
      j++;
    }
  }

  // If there are any remaining elements in arr1 or arr2, append them to the mergedArray
  while (i < arr1.length) {
    mergedArray.push(arr1[i]);
    i++;
  }

  while (j < arr2.length) {
    mergedArray.push(arr2[j]);
    j++;
  }

  return mergedArray;
}