Приветствую читателей новой подборки задач по программированию — здесь вы найдёте интересные и разнообразные задания различной сложности, подходящие как новичкам, так и опытным разработчикам. Цель статьи — дать возможность потренироваться в применении различных алгоритмов, поддерживать навыки написания качественного кода и, конечно, весело провести время, решая интересные головоломки.
Что было раньше:
В предыдущей части мы решили:
- Hello Happy Codevarrior! (Привет, счастливый Кодовый воин!)
- Find the Slope (Найти склон)
- Word values (Значения слов)
- Merge overlapping strings (Объединить перекрывающиеся строки)
- A Rule of Divisibility by 13 (Правило делимости на 13)
- Prize Draw (Розыгрыш призов)
Решение новых задач:
Задача 1
Платформа: CodeWars
Название задачи: Be Concise III - Sum Squares (Будьте лаконичны III - Суммируйте квадраты)
Ссылка на задачу: https://www.codewars.com/kata/56f8fe6a2e6c0dc83b0008a7
Сложность: 8 kyu
Уже решили (На момент написания статьи): 3 498 из 12 195
Тэги: Fundamentals
Оригинальное описание задачи:
Be Concise III - Sum Squares
You are given a program sumSquares that takes an array as input and returns the sum of the squares of each item in an array.
For example:
sumSquares([1,2,3,4,5]) === 55 // 1 ** 2 + 2 ** 2 + 3 ** 2 + 4 ** 2 + 5 ** 2
sumSquares([7,3,9,6,5]) === 200
sumSquares([11,13,15,18,2]) === 843
Shorten the code such that it meets the requirements.
A few hints:
1. Try researching about built-in Array methods; they may help shorten your code a lot
Good luck!
Пояснение задачи:
Задача состоит в написании функции, принимающей на вход массив чисел и возвращающей сумму квадратов элементов массива.
Основные моменты:
- Необходимо вычислить квадраты каждого элемента массива.
- Затем суммировать полученные квадраты.
Подход:
Для решения задачи эффективно использовать встроенные методы JavaScript-объекта `Array`, такие как `map` и `reduce`.
- Метод `map` позволяет применить функцию к каждому элементу массива, преобразуя каждый элемент в квадрат числа.
- Метод `reduce` удобно использовать для последовательного сложения значений.
Пример решения:
const sumSquares = arr => arr.map(x => x * x).reduce((acc, curr) => acc + curr);
Пояснение: - `arr.map(x => x * x)` — создает новый массив, где каждый элемент заменяется на его квадрат.
- `reduce((acc, curr) => acc + curr)` — суммирует элементы полученного массива.
Примеры:
sumSquares([1, 2, 3, 4, 5]) === 55 // 1² + 2² + 3² + 4² + 5² = 55
sumSquares([7, 3, 9, 6, 5]) === 200 // 49 + 9 + 81 + 36 + 25 = 200
sumSquares([11, 13, 15, 18, 2]) === 843 // 121 + 169 + 225 + 324 + 4 = 843
Задача 2
Платформа: CodeWars
Название задачи: Freudian translator (Переводчик-фрейдист)
Ссылка на задачу: https://www.codewars.com/kata/5713bc89c82eff33c60009f7
Сложность: 8 kyu
Уже решили (На момент написания статьи): 11 284 из 28 422
Тэги: Fundamentals
Оригинальное описание задачи:
You probably know that number 42 is "the answer to life, the universe and everything" according to Douglas Adams' "The Hitchhiker's Guide to the Galaxy". For Freud, the answer was quite different...
In the society he lived in, people - women in particular - had to repress their sexual needs and desires. This was simply how the society was at the time. Freud then wanted to study the illnesses created by this, and so he digged to the root of their desires. This led to some of the most important psychoanalytic theories to this day, Freud being the father of psychoanalysis.
Now, basically, when a person hears about Freud, s/he hears "sex" because for Freud, everything was related to, and explained by sex.
In this kata, the function will take a string as its argument, and return a string with every word replaced by the explanation to everything, according to Freud.
Note that an empty string, or no arguments, should return an empty string.
Пояснение задачи:
Задача заключается в преобразовании входной строки следующим образом:
- Каждое слово исходной строки заменяется на фразу «сексуальные потребности и желания».
- Если строка пустая или отсутствует вовсе, возвращаем пустую строку.
Пример работы функции
Входная строка: "hello world" Результат: «сексуальные потребности и желания сексуальные потребности и желания»
Входная строка: «The Hitchhiker’s Guide to the Galaxy» Результат: «сексуальные потребности и желания The Hitchhiker’s Guide to the Galaxy сексуальные потребности и желания»
Ключевые моменты:
- Входная строка состоит из отдельных слов, разделённых пробелами.
- Каждое слово должно быть заменено на выражение «сексуальные потребности и желания».
- Строка должна оставаться в том же формате, с учётом пробелов и заглавных букв.
Задача 3
Платформа: CodeWars
Название задачи: Music 1: How Many Quarter Notes? (Музыка 1: Сколько четвертных нот?)
Ссылка на задачу: https://www.codewars.com/kata/69c2f04a1294ffc95c526d9e
Сложность: 7 kyu
Уже решили (На момент написания статьи): 108 из 436
Тэги: Strings
Оригинальное описание задачи:
Given a time signature (as a string), you must find the amount of quarter notes that can be fit into one measure, which will be returned as an unsigned integer. If a non-integer number of quarter notes can be fit into a measure, the value should be floored. DO NOT RETURN A NON INTEGER.
The Given Time Signature:
- Will not be malformed
- Will have a top number below 4096
- Will have a bottom number below 256
All valid time signatures must have a bottom number that is a power of 2. If the given signature is invalid, return `None` in Python, `null` in TypeScript, return `-1` in C.
If less then one quarter note can be fit in a measure, return `0`;
Examples:
"3/4" → `3`
"7/8" → `3`
"11/8" → `5`
"10/7" → `None`/`null`/`-1`
"3/16" → `0`
Пояснение задачи:
Задача состоит в следующем:
Дана временная подпись (строка вида «числитель/дробь»), представляющая собой метр музыкального произведения (например, «3/4», «7/8»).
Требуется определить максимальное количество четвертных нот, которое может поместиться в одну музыкальную меру (такту).
Алгоритм решения:
1. Разбор временной подписи:
- Временная подпись представлена в виде дроби, где числитель и знаменатель разделены слешем («/»).
- Числитель — это количество долей в такте.
- Знаменатель — это длительность одной доли (например, 4 означает четверть ноту).
2. Проверка валидности:
- Дробь должна быть правильной (числитель и знаменатель — целые положительные числа).
- Знаменатель должен быть степенью двойки (это обязательное условие для музыкальных метрик).
- Оба числа ограничены сверху (числитель до 4096, знаменатель до 256).
3. Вычисление количества четвертных нот:
- Для вычисления количества четвертных нот в одном такте нужно разделить числитель на знаменатель.
- Если результат деления меньше единицы, возвращаем 0.
- Если дробное значение получается, округляем вниз (floor).
4. Обработка некорректных временных подписей:
- Если знаменатель не является степенью двойки, либо числитель или знаменатель выходят за пределы ограничений, возвращаем специальное значение (в зависимости от используемого языка):
- Python: `None` - TypeScript: `null` - C: `-1`
Примеры:
"3/4" → 3(числитель 3, знаменатель 4, 3 четвертных ноты)
"7/8" → 3 (здесь 7 четвертных нот помещаются в один такт)
"11/8" → 5 (здесь 5 четвертных нот укладываются в такт)
"10/7" → None (знаменатель не степень двойки, значит неверный формат)
"3/16" → 0 (менее одной четверти не поместится в такт)
Задача 4
Платформа: CodeWars
Название задачи: Sum of odd numbers (Сумма нечетных чисел)
Ссылка на задачу: https://www.codewars.com/kata/55fd2d567d94ac3bc9000064
Сложность: 7 kyu
Уже решили (На момент написания статьи): 184 920 из 456 696
Тэги: Arrays, Lists, Mathematics, Fundamentals
Оригинальное описание задачи:
Given the triangle of consecutive odd numbers:
1
3 5
7 9 11
13 15 17 19
21 23 25 27 29
Calculate the sum of the numbers in the nth row of this triangle (starting at index 1) e.g.: (Input --> Output)
1 --> 1
2 --> 3 + 5 = 8
Пояснение задачи:
Задача состоит в том, чтобы по заданному номеру строки `n` (начиная с единицы) вычислить сумму всех чисел, расположенных в этой строке треугольной структуры, составленной из последовательных нечётных чисел.
Пример треугольника:
3 5
7 9 11
13 15 17 19
21 23 25 27 29
Пояснение
Каждая строка содержит чётное количество чисел, начиная с некоторого нечётного числа.
Первая строка — это число 1, вторая строка содержит числа 3 и 5, третья строка — 7, 9 и 11 и т.д.
Чтобы найти сумму чисел в n-й строке, можно заметить закономерность:
- Первое число в n-й строке равно (2n-1) (это первое нечётное число в строке).
- Последнее число в строке будет следующим нечётным числом после предыдущего последнего числа предыдущей строки, которое можно выразить через формулу 2n^2 - 1.
Таким образом, сумма чисел в n-й строке равна сумме арифметической прогрессии от 2n-1 до 2n^2-1, включительно.
Формула суммы чисел в n-й строке:
Сумма арифметической прогрессии чисел a_1, a_2, ..., a_k выражается формулой:
S = ½{k}{2} ... (a_1 + a_k) где k — количество членов, a_1 — первый член, a_k — последний член.
Количество чисел в n-й строке равно 2n, а значит, сумма чисел в n-й строке:
S_n = ½ {2n}{2} ... ((2n-1) + (2n^2-1)) = n ... (2n-1 + 2n^2-1) = n ... (2n^2+2n-2) = 2n(n+1)(n-1)
Пример:
- Для n=1: Сумма первой строки: 1 Формула даёт: 2 ... 1 ... (1+1) ... (1-1) = 0
Задача 5
Платформа: CodeWars
Название задачи: Find the missing letter (Найдите пропавшую букву)
Ссылка на задачу: https://www.codewars.com/kata/5839edaa6754d6fec10000a2
Сложность: 6 kyu
Уже решили (На момент написания статьи): 106 275 из 305 591
Тэги: Mathematics, Algorithms
Оригинальное описание задачи:
Find the missing letter
Write a method that takes an array of consecutive (increasing) letters as input and that returns the missing letter in the array.
You will always get an valid array. And it will be always exactly one letter be missing.
The length of the array will always be at least 2.
The array will always contain letters in only one case.
Example:
if-not:swift,factor
['a','b','c','d','f'] -> 'e'
['O','Q','R','S'] -> 'P'
(Use the English alphabet with 26 letters!)
Have fun coding it and please don't forget to vote and rank this kata! :-) I have also created other katas.
Take a look if you enjoyed this kata!
Пояснение задачи:
Требуется написать функцию, принимающую на вход упорядоченный набор буквенных символов (в виде строки или массива), и возвращающую отсутствующую букву в последовательности.
Основные условия задачи:
- Набор букв состоит из последовательных символов алфавита (возрастающий порядок).
- Всегда ровно одна буква отсутствует.
- Длина набора будет минимум два символа.
- Буквы представлены только заглавными или строчными символами, и набор всегда однородный (только заглавные или только строчные буквы).
- Входные данные корректны и всегда содержат ровно одну пропущенную букву.
Пример:
- Вход: `['a', 'b', 'c', 'd', 'f']` Выход: `'e'`
- Вход: `['O', 'Q', 'R', 'S']` Выход: `'P'`
- Вход: "abcdf" (факторинговый вариант) Выход: `CHAR: 'e'
Алгоритм решения:
1. Определить разницу между первой и последней буквой последовательности.
2. Вычислить количество символов в алфавите, исходя из разницы и длины исходного набора.
3. Найти отсутствующий символ, сравнивая индексы букв в алфавите.
Дополнительно:
- Для факторингового варианта нужно предварительно привести строку к массиву символов.
- Задача подразумевает использование стандартного английского алфавита, состоящего из 26 букв.
Заключение:
Платформа: CodeWars
Название задачи: Be Concise III - Sum Squares (Будьте лаконичны III - Суммируйте квадраты)
Ссылка на задачу: https://www.codewars.com/kata/56f8fe6a2e6c0dc83b0008a7
Сложность: 8 kyu
Уже решили (На момент написания статьи): 3 498 из 12 195
Тэги: Fundamentals
Оригинальное описание задачи:
Be Concise III - Sum Squares
You are given a program sumSquares that takes an array as input and returns the sum of the squares of each item in an array.
For example:
sumSquares([1,2,3,4,5]) === 55 // 1 ** 2 + 2 ** 2 + 3 ** 2 + 4 ** 2 + 5 ** 2
sumSquares([7,3,9,6,5]) === 200
sumSquares([11,13,15,18,2]) === 843
Shorten the code such that it meets the requirements.
A few hints:
1. Try researching about built-in Array methods; they may help shorten your code a lot
Good luck!
Пояснение задачи:
Задача состоит в написании функции, принимающей на вход массив чисел и возвращающей сумму квадратов элементов массива.
Основные моменты:
- Необходимо вычислить квадраты каждого элемента массива.
- Затем суммировать полученные квадраты.
Подход:
Для решения задачи эффективно использовать встроенные методы JavaScript-объекта `Array`, такие как `map` и `reduce`.
- Метод `map` позволяет применить функцию к каждому элементу массива, преобразуя каждый элемент в квадрат числа.
- Метод `reduce` удобно использовать для последовательного сложения значений.
Пример решения:
const sumSquares = arr => arr.map(x => x * x).reduce((acc, curr) => acc + curr);
Пояснение: - `arr.map(x => x * x)` — создает новый массив, где каждый элемент заменяется на его квадрат.
- `reduce((acc, curr) => acc + curr)` — суммирует элементы полученного массива.
Примеры:
sumSquares([1, 2, 3, 4, 5]) === 55 // 1² + 2² + 3² + 4² + 5² = 55
sumSquares([7, 3, 9, 6, 5]) === 200 // 49 + 9 + 81 + 36 + 25 = 200
sumSquares([11, 13, 15, 18, 2]) === 843 // 121 + 169 + 225 + 324 + 4 = 843
Платформа: CodeWars
Название задачи: Freudian translator (Переводчик-фрейдист)
Ссылка на задачу: https://www.codewars.com/kata/5713bc89c82eff33c60009f7
Сложность: 8 kyu
Уже решили (На момент написания статьи): 11 284 из 28 422
Тэги: Fundamentals
Оригинальное описание задачи:
You probably know that number 42 is "the answer to life, the universe and everything" according to Douglas Adams' "The Hitchhiker's Guide to the Galaxy". For Freud, the answer was quite different...
In the society he lived in, people - women in particular - had to repress their sexual needs and desires. This was simply how the society was at the time. Freud then wanted to study the illnesses created by this, and so he digged to the root of their desires. This led to some of the most important psychoanalytic theories to this day, Freud being the father of psychoanalysis.
Now, basically, when a person hears about Freud, s/he hears "sex" because for Freud, everything was related to, and explained by sex.
In this kata, the function will take a string as its argument, and return a string with every word replaced by the explanation to everything, according to Freud.
Note that an empty string, or no arguments, should return an empty string.
Пояснение задачи:
Задача заключается в преобразовании входной строки следующим образом:
- Каждое слово исходной строки заменяется на фразу «сексуальные потребности и желания».
- Если строка пустая или отсутствует вовсе, возвращаем пустую строку.
Пример работы функции
Входная строка: "hello world" Результат: «сексуальные потребности и желания сексуальные потребности и желания»
Входная строка: «The Hitchhiker’s Guide to the Galaxy» Результат: «сексуальные потребности и желания The Hitchhiker’s Guide to the Galaxy сексуальные потребности и желания»
Ключевые моменты:
- Входная строка состоит из отдельных слов, разделённых пробелами.
- Каждое слово должно быть заменено на выражение «сексуальные потребности и желания».
- Строка должна оставаться в том же формате, с учётом пробелов и заглавных букв.
Платформа: CodeWars
Название задачи: Music 1: How Many Quarter Notes? (Музыка 1: Сколько четвертных нот?)
Ссылка на задачу: https://www.codewars.com/kata/69c2f04a1294ffc95c526d9e
Сложность: 7 kyu
Уже решили (На момент написания статьи): 108 из 436
Тэги: Strings
Оригинальное описание задачи:
Given a time signature (as a string), you must find the amount of quarter notes that can be fit into one measure, which will be returned as an unsigned integer. If a non-integer number of quarter notes can be fit into a measure, the value should be floored. DO NOT RETURN A NON INTEGER.
The Given Time Signature:
- Will not be malformed
- Will have a top number below 4096
- Will have a bottom number below 256
All valid time signatures must have a bottom number that is a power of 2. If the given signature is invalid, return `None` in Python, `null` in TypeScript, return `-1` in C.
If less then one quarter note can be fit in a measure, return `0`;
Examples:
"3/4" → `3`
"7/8" → `3`
"11/8" → `5`
"10/7" → `None`/`null`/`-1`
"3/16" → `0`
Пояснение задачи:
Задача состоит в следующем:
Дана временная подпись (строка вида «числитель/дробь»), представляющая собой метр музыкального произведения (например, «3/4», «7/8»).
Требуется определить максимальное количество четвертных нот, которое может поместиться в одну музыкальную меру (такту).
Алгоритм решения:
1. Разбор временной подписи:
- Временная подпись представлена в виде дроби, где числитель и знаменатель разделены слешем («/»).
- Числитель — это количество долей в такте.
- Знаменатель — это длительность одной доли (например, 4 означает четверть ноту).
2. Проверка валидности:
- Дробь должна быть правильной (числитель и знаменатель — целые положительные числа).
- Знаменатель должен быть степенью двойки (это обязательное условие для музыкальных метрик).
- Оба числа ограничены сверху (числитель до 4096, знаменатель до 256).
3. Вычисление количества четвертных нот:
- Для вычисления количества четвертных нот в одном такте нужно разделить числитель на знаменатель.
- Если результат деления меньше единицы, возвращаем 0.
- Если дробное значение получается, округляем вниз (floor).
4. Обработка некорректных временных подписей:
- Если знаменатель не является степенью двойки, либо числитель или знаменатель выходят за пределы ограничений, возвращаем специальное значение (в зависимости от используемого языка):
- Python: `None` - TypeScript: `null` - C: `-1`
Примеры:
"3/4" → 3(числитель 3, знаменатель 4, 3 четвертных ноты)
"7/8" → 3 (здесь 7 четвертных нот помещаются в один такт)
"11/8" → 5 (здесь 5 четвертных нот укладываются в такт)
"10/7" → None (знаменатель не степень двойки, значит неверный формат)
"3/16" → 0 (менее одной четверти не поместится в такт)
Платформа: CodeWars
Название задачи: Sum of odd numbers (Сумма нечетных чисел)
Ссылка на задачу: https://www.codewars.com/kata/55fd2d567d94ac3bc9000064
Сложность: 7 kyu
Уже решили (На момент написания статьи): 184 920 из 456 696
Тэги: Arrays, Lists, Mathematics, Fundamentals
Оригинальное описание задачи:
Given the triangle of consecutive odd numbers:
1
3 5
7 9 11
13 15 17 19
21 23 25 27 29
Calculate the sum of the numbers in the nth row of this triangle (starting at index 1) e.g.: (Input --> Output)
1 --> 1
2 --> 3 + 5 = 8
Пояснение задачи:
Задача состоит в том, чтобы по заданному номеру строки `n` (начиная с единицы) вычислить сумму всех чисел, расположенных в этой строке треугольной структуры, составленной из последовательных нечётных чисел.
Пример треугольника:
3 5
7 9 11
13 15 17 19
21 23 25 27 29
Пояснение
Каждая строка содержит чётное количество чисел, начиная с некоторого нечётного числа.
Первая строка — это число 1, вторая строка содержит числа 3 и 5, третья строка — 7, 9 и 11 и т.д.
Чтобы найти сумму чисел в n-й строке, можно заметить закономерность:
- Первое число в n-й строке равно (2n-1) (это первое нечётное число в строке).
- Последнее число в строке будет следующим нечётным числом после предыдущего последнего числа предыдущей строки, которое можно выразить через формулу 2n^2 - 1.
Таким образом, сумма чисел в n-й строке равна сумме арифметической прогрессии от 2n-1 до 2n^2-1, включительно.
Формула суммы чисел в n-й строке:
Сумма арифметической прогрессии чисел a_1, a_2, ..., a_k выражается формулой:
S = ½{k}{2} ... (a_1 + a_k) где k — количество членов, a_1 — первый член, a_k — последний член.
Количество чисел в n-й строке равно 2n, а значит, сумма чисел в n-й строке:
S_n = ½ {2n}{2} ... ((2n-1) + (2n^2-1)) = n ... (2n-1 + 2n^2-1) = n ... (2n^2+2n-2) = 2n(n+1)(n-1)
Пример:
- Для n=1: Сумма первой строки: 1 Формула даёт: 2 ... 1 ... (1+1) ... (1-1) = 0
Платформа: CodeWars
Название задачи: Find the missing letter (Найдите пропавшую букву)
Ссылка на задачу: https://www.codewars.com/kata/5839edaa6754d6fec10000a2
Сложность: 6 kyu
Уже решили (На момент написания статьи): 106 275 из 305 591
Тэги: Mathematics, Algorithms
Оригинальное описание задачи:
Find the missing letter
Write a method that takes an array of consecutive (increasing) letters as input and that returns the missing letter in the array.
You will always get an valid array. And it will be always exactly one letter be missing.
The length of the array will always be at least 2.
The array will always contain letters in only one case.
Example:
if-not:swift,factor
['a','b','c','d','f'] -> 'e'
['O','Q','R','S'] -> 'P'
(Use the English alphabet with 26 letters!)
Have fun coding it and please don't forget to vote and rank this kata! :-) I have also created other katas.
Take a look if you enjoyed this kata!
Пояснение задачи:
Требуется написать функцию, принимающую на вход упорядоченный набор буквенных символов (в виде строки или массива), и возвращающую отсутствующую букву в последовательности.
Основные условия задачи:
- Набор букв состоит из последовательных символов алфавита (возрастающий порядок).
- Всегда ровно одна буква отсутствует.
- Длина набора будет минимум два символа.
- Буквы представлены только заглавными или строчными символами, и набор всегда однородный (только заглавные или только строчные буквы).
- Входные данные корректны и всегда содержат ровно одну пропущенную букву.
Пример:
- Вход: `['a', 'b', 'c', 'd', 'f']` Выход: `'e'`
- Вход: `['O', 'Q', 'R', 'S']` Выход: `'P'`
- Вход: "abcdf" (факторинговый вариант) Выход: `CHAR: 'e'
Алгоритм решения:
1. Определить разницу между первой и последней буквой последовательности.
2. Вычислить количество символов в алфавите, исходя из разницы и длины исходного набора.
3. Найти отсутствующий символ, сравнивая индексы букв в алфавите.
Дополнительно:
- Для факторингового варианта нужно предварительно привести строку к массиву символов.
- Задача подразумевает использование стандартного английского алфавита, состоящего из 26 букв.
Итак, пожалуй, на этом всё. Надеюсь, вам понравилось знакомство с предложенными задачами — спасибо за внимание! Буду рад видеть вас среди тех, кто готов решать алгоритмические головоломки вместе со мной. Оставляйте комментарии, обменивайтесь идеями и подходами, сохраняя позитивный настрой. До встречи в следующей статье!
Вступайте в нашу телеграмм-группу Инфостарт