Приготовьтесь к новому алгоритмическому челленджу! В этой статье я собрал для вас свежую подборку задач из разных источников и уровней сложности — от лёгких разминок до настоящих интеллектуальных битв. Здесь каждый найдёт свой вызов: новички смогут освоить базовые паттерны, а опытные разработчики — отточить мастерство на нетривиальных кейсах.
Наша миссия: прокачать алгоритмическое мышление, поддерживать кодовую форму в идеальном тонусе и, конечно же, получить удовольствие от решения умных головоломок!
Что было раньше:
В предыдущей части мы решили:
- How good are you really? (Насколько ты хорош на самом деле?)
- Calculate average ()
- Sequence to 1 (Последовательность действий до 1)
- Shortest direction on circle (Кратчайшее направление по окружности)
- Multiplication table (Таблица умножения)
- Going to zero or to infinity? (Стремится к нулю или к бесконечности?)
Решение новых задач:
Задача 1
Платформа: CodeWars
Название задачи: Circles in Polygons (Круги в многоугольниках)
Ссылка на задачу: https://www.codewars.com/kata/5a026a9cffe75fbace00007f
Сложность: 8 kyu
Уже решили (На момент написания статьи): 3 591 из 9 306
Тэги: Mathematics, Puzzles
Оригинальное описание задачи:
You own a box-making company that can produce boxes in the shape of any regular polygon.
Many customers use these boxes to transport circular objects - such as tin cans, glasses, tyres, or CDs.
To assist them, you decided to print on every box the diameter of the largest circle that can fit inside the box.
Input
- The number of equal sides of the regular polygon (sides ≥ 3),
- The length of each side of the polygon.
Output
Return the diameter of the largest circular item that can fit inside the polygon, accurate up to 0.001.
Examples
A box of 4 sides and a side length of 10 can hold a circular item of diameter 10.
A box of 8 sides and a side length of 9 can hold a circular item of diameter approx. 21.72792206.
Пояснение задачи:
Задача заключается в вычислении диаметра наибольшего круга, который возможно разместить внутри правильного многоугольника (регулярной фигуры с равными сторонами и углами).
Пояснение
Для решения задачи нам потребуется:
1. Определить радиус вписанной окружности (окружность, касающаяся всех сторон многоугольника) для данного правильного многоугольника. Этот радиус будет являться половиной искомого диаметра круга.
Радиус вписанной окружности (r) зависит от количества сторон "n" и длины стороны "a" многоугольника.
Формула для радиуса вписанной окружности выглядит следующим образом: r = ÷{a}{2 \tan(÷{\pi}{n})} Здесь \tan(÷{\pi}{n}) — тангенс угла, образованного стороной и биссектрисой угла между двумя соседними сторонами.
2. Найти диаметр круга, который равен удвоенному радиусу вписанной окружности.
Примеры
- Для квадрата (4 стороны, сторона 10):
r = ÷{10}{2 ... \tan(÷{\pi}{4})} = ÷{10}{2 ... 1} = 5
Диаметр = 2 * 5 = 10
- Для восьмиугольника (8 сторон, сторона 9):
r = ÷{9}{2... \tan( ÷{\pi}{8})} ≈ ÷{9}{2) ... 0.414213562} ≈ 10.98076211
Диаметр = 2 * 10.98076211 ÷ 21.96152422, округляем до 21.728.
Таким образом, задача сводится к вычислению радиуса вписанной окружности, умножению его на два и округлению результата до трёх знаков после запятой.
Задача 2
Платформа: CodeWars
Название задачи: The Feast of Many Beasts (Пир множества зверей)
Ссылка на задачу: https://www.codewars.com/kata/5aa736a455f906981800360d
Сложность: 8 kyu
Уже решили (На момент написания статьи): 104 058 из 210 207
Тэги: Strings, Fundamentals
Оригинальное описание задачи:
All of the animals are having a feast! Each animal is bringing one dish. There is just one rule: the dish must start and end with the same letters as the animal's name. For example, the great blue heron is bringing garlic naan and the chickadee is bringing chocolate cake.
Write a function `feast` that takes the animal's name and dish as arguments and returns true or false to indicate whether the beast is allowed to bring the dish to the feast.
Assume that `beast` and `dish` are always lowercase strings, and that each has at least two letters. `beast` and `dish` may contain hyphens and spaces, but these will not appear at the beginning or end of the string. They will not contain numerals.
Пояснение задачи:
Задача заключается в проверке соответствия названия блюда правилам праздника:
- Блюдо должно начинаться и заканчиваться теми же буквами, что и название животного.
- Название животного и название блюда всегда строчные буквы (маленькие латинские буквы).
- Названия содержат минимум два символа.
- Между названием животного и блюдом могут встречаться пробелы и дефисы, но они не учитываются в начале и конце строки.
- Пробелы и дефисы внутри слова игнорируются, важен только первый и последний символы.
Пример пояснения:
Пример 1:
Животное: **elephant**, блюдо: elephant ear pie
- Первая буква животного (`'e'`) совпадает с первой буквой блюда (`'e'`).
- Последняя буква животного (`'t'`) совпадает с последней буквой блюда (`'t'`).
Результат: `True`
Пример 2:
Животное: zebra, блюдо: zebrasaurus
- Первая буква животного (`'z'`) совпадает с первой буквой блюда (`'z'`).
- Последняя буква животного (`'a'`) НЕ совпадает с последней буквой блюда (`'s'`).
Результат: `False`
Пример 3:
Животное: panda, блюдо: pan de pan
- Первая буква животного (`'p'`) совпадает с первой буквой блюда (`'p'`).
- Последняя буква животного (`'a'`) совпадает с последней буквой блюда (`'a'`).
Результат: `True`
Подход к решению
Для проверки соответствия достаточно извлечь первую и последнюю буквы названия животного и сравнить их с первыми и последними буквами названия блюда.
Важно учесть, что между этими буквами могут находиться любые символы (пробелы, дефисы), поэтому достаточно проверить только крайние позиции строк.
Задача 3
Платформа: CodeWars
Название задачи: The Coupon Code (Код купона)
Ссылка на задачу: https://www.codewars.com/kata/539de388a540db7fec000642
Сложность: 7 kyu
Уже решили (На момент написания статьи): 32 166 из 250 971
Тэги: Date Time, Strings, Fundamentals
Оригинальное описание задачи:
Story
Your online store likes to give out coupons for special occasions.
Some customers try to cheat the system by entering invalid codes or using expired coupons.
Task
Your mission:
Write a function called `checkCoupon` which verifies that a coupon code is valid and not expired.
A coupon is no more valid on the day AFTER the expiration date.
All dates will be passed as strings in this format: "MONTH DATE, YEAR".
For the correct code and the entered code to match, both their values and data types must be the same.
This means that e.g. `false` and `0` are not the same, and neither are "123" and "123".
Examples:
("123", "123", "July 9, 2015", "July 9, 2015") ===> true
(0, false, "July 9, 2015", "July 9, 2015") ===> false
("123", "123", "July 9, 2015", "July 2, 2015") ===> false
Пояснение задачи:
Задача: Функция `checkCoupon` должна проверять валидность купона и его срок годности.
Основные требования:
- Купон считается действительным только до даты истечения включительно.
- Дата истечения указана в формате `"МЕСЯЦ ДАТА, ГОД"` (например, `"Июль 9, 2015"`).
- Проверка включает сравнение:
- Значений купонов (строковые значения должны точно совпадать).
- Типов данных (например, `0` и `false` — разные типы).
- Срока действия купона (сравнивается дата истечения с текущей датой).
Примеры:
Пример 1:
корректный код и дата истечения совпадают checkCoupon("123", "123", "Июль 9, 2015", "Июль 9, 2015") Вернет True
Пример 2: неверный тип данных checkCoupon(0, False, "Июль 9, 2015", "Июль 9, 2015") Вернет False
Пример 3: дата истечения уже прошла checkCoupon("123", "123", "Июль 9, 2015", "Июль 2, 2015") Вернет False
Пояснение:
- Входные параметры:
- `code`: строковое значение купона. - `enteredCode`: введенный пользователем код. - `expirationDate`: строковая дата истечения купона. - `currentDate`: текущая дата (также строка формата "МЕСЯЦ ДАТА, ГОД").
- Алгоритм проверки:
1. Сравнить значения купонов (`code` и `enteredCode`) на точное совпадение.
2. Проверить, что тип данных совпадает.
3. Проверить, что текущая дата меньше или равна дате истечения купона.
Дополнительные замечания:
- Важно учитывать различия типов данных и корректно сравнивать строки и числа.
- Следует аккуратно обрабатывать даты, учитывая различие между разными форматами представления дат.
Задача 4
Платформа: CodeWars
Название задачи: Always perfect (Всегда идеально)
Ссылка на задачу: https://www.codewars.com/kata/55f3facb78a9fd5b26000036
Сложность: 7 kyu
Уже решили (На момент написания статьи): 1 524 из 11 774
Тэги: Strings, Arrays, Mathematics, Regular Expressions, Fundamentals
Оригинальное описание задачи:
While surfing in web I found interesting math problem called "Always perfect". That means if you add 1 to the product of four consecutive numbers the answer is ALWAYS a perfect square.
For example we have: 1,2,3,4 and the product will be 1X2X3X4=24. If we add 1 to the product that would become 25, since the result number is a perfect square the square root of 25 would be 5.
So now lets write a function which takes numbers separated by commas in string format and returns the number which is a perfect square and the square root of that number.
If string contains other characters than number or it has more or less than 4 numbers separated by comma function returns "incorrect input".
If string contains 4 numbers but not consecutive it returns "not consecutive".
Пояснение задачи:
Задача формулируется следующим образом:
Необходимо реализовать функцию, принимающую строку, содержащую четыре числа, разделённые запятыми, и проверяющую, выполняется ли условие задачи: произведение четырёх последовательных чисел плюс единица всегда является полным квадратом.
Основные требования:
- Входная строка должна содержать ровно четыре числа, разделённых запятой.
- Числа должны быть целыми положительными числами.
- Проверяется корректность ввода (числа и количество чисел):
- Если входная строка содержит некорректный ввод (не числа, неправильный формат, меньше или больше четырёх чисел), функция возвращает сообщение «incorrect input».
- Если числа не являются последовательными, возвращается сообщение «not consecutive».
Пример работы функции:
Правильный ввод: - Строка "1,2,3,4" → Результат: `(25, 5)` (произведение чисел 1·2·3·4 = 24 + 1 = 25, корень из 25 равен 5)
- Строка "1,2,3,5" → Результат: «not consecutive»
- Строка "1,2,3,4,5" → Результат: «incorrect input»
- Строка "a,b,c,d" → Результат: «incorrect input»
Неправильный ввод:
- Строка "1,2,3" → Результат: «incorrect input»
- Строка "1,2,3,4,5" → Результат: «incorrect input»
- Строка "1,2,3,4,5,6" → Результат: «incorrect input»
- Строка "1,2,a,4" → Результат: «incorrect input»
Функция должна корректно обрабатывать некорректные входные данные и проверять, являются ли числа последовательными.
Задача 5
Платформа: CodeWars
Название задачи: Seven "ate" nine! (Семь "съела" девять!)
Ссылка на задачу: https://www.codewars.com/kata/59e61c577905df540000016b
Сложность: 6 kyu
Уже решили (На момент написания статьи): 644 из 2 909
Тэги: Regular Expressions, Fundamentals
Оригинальное описание задачи:
Seven is a hungry number and its favourite food is number 9.
Whenever it spots 9 through the hoops of 8, it eats it!
Well, not anymore, because you are going to help the 9 by locating that particular sequence (7,8,9) in an array of digits and tell 7 to come after 9 instead.
Seven "ate" nine, no more! (If 9 is not in danger, just return the same array)
Пояснение задачи:
Задача формулируется следующим образом:
Необходимо обработать массив цифр (чисел), заменяя найденную последовательность `(7, 8, 9)` на новую последовательность `(9, 7, 8)`, предотвращая таким образом «поедание» девятки семеркой.
Если последовательность `(7, 8, 9)` отсутствует в исходном массиве, возвращаем исходный массив без изменений.
Пример работы алгоритма
Исходный массив:
`[4, 7, 8, 9, 2, 3]` - Последовательность `(7, 8, 9)` найдена.
- После замены получаем:
`[4, 9, 7, 8, 2, 3]` Исходный массив: `[1, 2, 3, 4, 5, 6]`
- Последовательности `(7, 8, 9)` нет, возвращаем исходный массив.
Исходный массив: `[7, 8, 9, 1, 2, 3]`
- Последовательность `(7, 8, 9)` найдена.
- После замены получаем: `[9, 7, 8, 1, 2, 3]`
Таким образом, задача сводится к поиску заданной последовательности и её корректному преобразованию, либо возврату исходного массива, если последовательность не найдена.
Задача 6
Платформа: CodeWars
Название задачи: Backwards Read Primes (Простые числа с обратным чтением)
Ссылка на задачу: https://www.codewars.com/kata/5539fecef69c483c5a000015
Сложность: 6 kyu
Уже решили (На момент написания статьи): 7 846 из 58 092
Тэги: Mathematics, Algorithms
Оригинальное описание задачи:
Backwards-read-primes are primes that when read backwards in base 10 (from right to left) are a different prime. (This rules out primes which are palindromes.)
Examples:
13 17 31 37 71 73
`13` is such because it's prime and read from right to left writes `31` which is prime too. Same for the others.
Task
Find all Backwards-read-primes between two positive given numbers (both inclusive), the second one always being greater than or equal to the first one. The resulting array or the resulting string will be ordered following the natural order of the prime numbers.
Examples
(in general form):
(start = 2, end = 100) => [13, 17, 31, 37, 71, 73, 79, 97]
(start = 9900, end = 10000) => [9923, 9931, 9941, 9967]
(start = 501, end = 599) => []
See "Sample Tests" for your language. Notes - Forth: Return only the first backwards-read prime between start and end or `0` if you don't find any - Ruby: Don't use the `Prime` class, it's disabled.
Пояснение задачи:
Задача состоит в поиске всех простых чисел («обращённо-простых»), удовлетворяющих следующим условиям:
- Число является простым.
- Если прочитать его цифры справа налево, получится другое простое число.
- Исключаются палиндромные числа (числа, читающиеся одинаково слева направо и справа налево).
Примеры:
- Для диапазона от 2 до 100: 2 ≤ n ≤ 100
Ответ: `[13, 17, 31, 37, 71, 73, 79, 97]`
- Для диапазона от 9900 до 10000: 9900 ≤ n ≤ 10000
Ответ: `[9923, 9931, 9941, 9967]`
- Для диапазона от 501 до 599: 501 ≤ n \≤ 599
Ответ: пустой массив, так как нет подходящих чисел.
Дополнительные условия:
- В некоторых языках (например, Forth) требуется вернуть только первое подходящее число или ноль (`0`), если подходящих чисел нет.
- В языке Ruby запрещено использовать встроенный класс `Prime`, нужно реализовать проверку простоты самостоятельно.
Подход к решению:
Основная идея — последовательно проверять каждое число в заданном диапазоне:
1. Проверяем, является ли число простым.
2. Читаем число справа налево и проверяем, является ли новое число простым.
3. Исключаем числа, являющиеся палиндромами.
После проверки добавляем подходящие числа в итоговый список.
Заключение:
Платформа: CodeWars
Название задачи: Circles in Polygons (Круги в многоугольниках)
Ссылка на задачу: https://www.codewars.com/kata/5a026a9cffe75fbace00007f
Сложность: 8 kyu
Уже решили (На момент написания статьи): 3 591 из 9 306
Тэги: Mathematics, Puzzles
Оригинальное описание задачи:
You own a box-making company that can produce boxes in the shape of any regular polygon.
Many customers use these boxes to transport circular objects - such as tin cans, glasses, tyres, or CDs.
To assist them, you decided to print on every box the diameter of the largest circle that can fit inside the box.
Input
- The number of equal sides of the regular polygon (sides ≥ 3),
- The length of each side of the polygon.
Output
Return the diameter of the largest circular item that can fit inside the polygon, accurate up to 0.001.
Examples
A box of 4 sides and a side length of 10 can hold a circular item of diameter 10.
A box of 8 sides and a side length of 9 can hold a circular item of diameter approx. 21.72792206.
Пояснение задачи:
Задача заключается в вычислении диаметра наибольшего круга, который возможно разместить внутри правильного многоугольника (регулярной фигуры с равными сторонами и углами).
Пояснение
Для решения задачи нам потребуется:
1. Определить радиус вписанной окружности (окружность, касающаяся всех сторон многоугольника) для данного правильного многоугольника. Этот радиус будет являться половиной искомого диаметра круга.
Радиус вписанной окружности (r) зависит от количества сторон "n" и длины стороны "a" многоугольника.
Формула для радиуса вписанной окружности выглядит следующим образом: r = ÷{a}{2 \tan(÷{\pi}{n})} Здесь \tan(÷{\pi}{n}) — тангенс угла, образованного стороной и биссектрисой угла между двумя соседними сторонами.
2. Найти диаметр круга, который равен удвоенному радиусу вписанной окружности.
Примеры
- Для квадрата (4 стороны, сторона 10):
r = ÷{10}{2 ... \tan(÷{\pi}{4})} = ÷{10}{2 ... 1} = 5
Диаметр = 2 * 5 = 10
- Для восьмиугольника (8 сторон, сторона 9):
r = ÷{9}{2... \tan( ÷{\pi}{8})} ≈ ÷{9}{2) ... 0.414213562} ≈ 10.98076211
Диаметр = 2 * 10.98076211 ÷ 21.96152422, округляем до 21.728.
Таким образом, задача сводится к вычислению радиуса вписанной окружности, умножению его на два и округлению результата до трёх знаков после запятой.
Платформа: CodeWars
Название задачи: The Feast of Many Beasts (Пир множества зверей)
Ссылка на задачу: https://www.codewars.com/kata/5aa736a455f906981800360d
Сложность: 8 kyu
Уже решили (На момент написания статьи): 104 058 из 210 207
Тэги: Strings, Fundamentals
Оригинальное описание задачи:
All of the animals are having a feast! Each animal is bringing one dish. There is just one rule: the dish must start and end with the same letters as the animal's name. For example, the great blue heron is bringing garlic naan and the chickadee is bringing chocolate cake.
Write a function `feast` that takes the animal's name and dish as arguments and returns true or false to indicate whether the beast is allowed to bring the dish to the feast.
Assume that `beast` and `dish` are always lowercase strings, and that each has at least two letters. `beast` and `dish` may contain hyphens and spaces, but these will not appear at the beginning or end of the string. They will not contain numerals.
Пояснение задачи:
Задача заключается в проверке соответствия названия блюда правилам праздника:
- Блюдо должно начинаться и заканчиваться теми же буквами, что и название животного.
- Название животного и название блюда всегда строчные буквы (маленькие латинские буквы).
- Названия содержат минимум два символа.
- Между названием животного и блюдом могут встречаться пробелы и дефисы, но они не учитываются в начале и конце строки.
- Пробелы и дефисы внутри слова игнорируются, важен только первый и последний символы.
Пример пояснения:
Пример 1:
Животное: **elephant**, блюдо: elephant ear pie
- Первая буква животного (`'e'`) совпадает с первой буквой блюда (`'e'`).
- Последняя буква животного (`'t'`) совпадает с последней буквой блюда (`'t'`).
Результат: `True`
Пример 2:
Животное: zebra, блюдо: zebrasaurus
- Первая буква животного (`'z'`) совпадает с первой буквой блюда (`'z'`).
- Последняя буква животного (`'a'`) НЕ совпадает с последней буквой блюда (`'s'`).
Результат: `False`
Пример 3:
Животное: panda, блюдо: pan de pan
- Первая буква животного (`'p'`) совпадает с первой буквой блюда (`'p'`).
- Последняя буква животного (`'a'`) совпадает с последней буквой блюда (`'a'`).
Результат: `True`
Подход к решению
Для проверки соответствия достаточно извлечь первую и последнюю буквы названия животного и сравнить их с первыми и последними буквами названия блюда.
Важно учесть, что между этими буквами могут находиться любые символы (пробелы, дефисы), поэтому достаточно проверить только крайние позиции строк.
Платформа: CodeWars
Название задачи: The Coupon Code (Код купона)
Ссылка на задачу: https://www.codewars.com/kata/539de388a540db7fec000642
Сложность: 7 kyu
Уже решили (На момент написания статьи): 32 166 из 250 971
Тэги: Date Time, Strings, Fundamentals
Оригинальное описание задачи:
Story
Your online store likes to give out coupons for special occasions.
Some customers try to cheat the system by entering invalid codes or using expired coupons.
Task
Your mission:
Write a function called `checkCoupon` which verifies that a coupon code is valid and not expired.
A coupon is no more valid on the day AFTER the expiration date.
All dates will be passed as strings in this format: "MONTH DATE, YEAR".
For the correct code and the entered code to match, both their values and data types must be the same.
This means that e.g. `false` and `0` are not the same, and neither are "123" and "123".
Examples:
("123", "123", "July 9, 2015", "July 9, 2015") ===> true
(0, false, "July 9, 2015", "July 9, 2015") ===> false
("123", "123", "July 9, 2015", "July 2, 2015") ===> false
Пояснение задачи:
Задача: Функция `checkCoupon` должна проверять валидность купона и его срок годности.
Основные требования:
- Купон считается действительным только до даты истечения включительно.
- Дата истечения указана в формате `"МЕСЯЦ ДАТА, ГОД"` (например, `"Июль 9, 2015"`).
- Проверка включает сравнение:
- Значений купонов (строковые значения должны точно совпадать).
- Типов данных (например, `0` и `false` — разные типы).
- Срока действия купона (сравнивается дата истечения с текущей датой).
Примеры:
Пример 1:
корректный код и дата истечения совпадают checkCoupon("123", "123", "Июль 9, 2015", "Июль 9, 2015") Вернет True
Пример 2: неверный тип данных checkCoupon(0, False, "Июль 9, 2015", "Июль 9, 2015") Вернет False
Пример 3: дата истечения уже прошла checkCoupon("123", "123", "Июль 9, 2015", "Июль 2, 2015") Вернет False
Пояснение:
- Входные параметры:
- `code`: строковое значение купона. - `enteredCode`: введенный пользователем код. - `expirationDate`: строковая дата истечения купона. - `currentDate`: текущая дата (также строка формата "МЕСЯЦ ДАТА, ГОД").
- Алгоритм проверки:
1. Сравнить значения купонов (`code` и `enteredCode`) на точное совпадение.
2. Проверить, что тип данных совпадает.
3. Проверить, что текущая дата меньше или равна дате истечения купона.
Дополнительные замечания:
- Важно учитывать различия типов данных и корректно сравнивать строки и числа.
- Следует аккуратно обрабатывать даты, учитывая различие между разными форматами представления дат.
Платформа: CodeWars
Название задачи: Always perfect (Всегда идеально)
Ссылка на задачу: https://www.codewars.com/kata/55f3facb78a9fd5b26000036
Сложность: 7 kyu
Уже решили (На момент написания статьи): 1 524 из 11 774
Тэги: Strings, Arrays, Mathematics, Regular Expressions, Fundamentals
Оригинальное описание задачи:
While surfing in web I found interesting math problem called "Always perfect". That means if you add 1 to the product of four consecutive numbers the answer is ALWAYS a perfect square.
For example we have: 1,2,3,4 and the product will be 1X2X3X4=24. If we add 1 to the product that would become 25, since the result number is a perfect square the square root of 25 would be 5.
So now lets write a function which takes numbers separated by commas in string format and returns the number which is a perfect square and the square root of that number.
If string contains other characters than number or it has more or less than 4 numbers separated by comma function returns "incorrect input".
If string contains 4 numbers but not consecutive it returns "not consecutive".
Пояснение задачи:
Задача формулируется следующим образом:
Необходимо реализовать функцию, принимающую строку, содержащую четыре числа, разделённые запятыми, и проверяющую, выполняется ли условие задачи: произведение четырёх последовательных чисел плюс единица всегда является полным квадратом.
Основные требования:
- Входная строка должна содержать ровно четыре числа, разделённых запятой.
- Числа должны быть целыми положительными числами.
- Проверяется корректность ввода (числа и количество чисел):
- Если входная строка содержит некорректный ввод (не числа, неправильный формат, меньше или больше четырёх чисел), функция возвращает сообщение «incorrect input».
- Если числа не являются последовательными, возвращается сообщение «not consecutive».
Пример работы функции:
Правильный ввод: - Строка "1,2,3,4" → Результат: `(25, 5)` (произведение чисел 1·2·3·4 = 24 + 1 = 25, корень из 25 равен 5)
- Строка "1,2,3,5" → Результат: «not consecutive»
- Строка "1,2,3,4,5" → Результат: «incorrect input»
- Строка "a,b,c,d" → Результат: «incorrect input»
Неправильный ввод:
- Строка "1,2,3" → Результат: «incorrect input»
- Строка "1,2,3,4,5" → Результат: «incorrect input»
- Строка "1,2,3,4,5,6" → Результат: «incorrect input»
- Строка "1,2,a,4" → Результат: «incorrect input»
Функция должна корректно обрабатывать некорректные входные данные и проверять, являются ли числа последовательными.
Платформа: CodeWars
Название задачи: Seven "ate" nine! (Семь "съела" девять!)
Ссылка на задачу: https://www.codewars.com/kata/59e61c577905df540000016b
Сложность: 6 kyu
Уже решили (На момент написания статьи): 644 из 2 909
Тэги: Regular Expressions, Fundamentals
Оригинальное описание задачи:
Seven is a hungry number and its favourite food is number 9.
Whenever it spots 9 through the hoops of 8, it eats it!
Well, not anymore, because you are going to help the 9 by locating that particular sequence (7,8,9) in an array of digits and tell 7 to come after 9 instead.
Seven "ate" nine, no more! (If 9 is not in danger, just return the same array)
Пояснение задачи:
Задача формулируется следующим образом:
Необходимо обработать массив цифр (чисел), заменяя найденную последовательность `(7, 8, 9)` на новую последовательность `(9, 7, 8)`, предотвращая таким образом «поедание» девятки семеркой.
Если последовательность `(7, 8, 9)` отсутствует в исходном массиве, возвращаем исходный массив без изменений.
Пример работы алгоритма
Исходный массив:
`[4, 7, 8, 9, 2, 3]` - Последовательность `(7, 8, 9)` найдена.
- После замены получаем:
`[4, 9, 7, 8, 2, 3]` Исходный массив: `[1, 2, 3, 4, 5, 6]`
- Последовательности `(7, 8, 9)` нет, возвращаем исходный массив.
Исходный массив: `[7, 8, 9, 1, 2, 3]`
- Последовательность `(7, 8, 9)` найдена.
- После замены получаем: `[9, 7, 8, 1, 2, 3]`
Таким образом, задача сводится к поиску заданной последовательности и её корректному преобразованию, либо возврату исходного массива, если последовательность не найдена.
Платформа: CodeWars
Название задачи: Backwards Read Primes (Простые числа с обратным чтением)
Ссылка на задачу: https://www.codewars.com/kata/5539fecef69c483c5a000015
Сложность: 6 kyu
Уже решили (На момент написания статьи): 7 846 из 58 092
Тэги: Mathematics, Algorithms
Оригинальное описание задачи:
Backwards-read-primes are primes that when read backwards in base 10 (from right to left) are a different prime. (This rules out primes which are palindromes.)
Examples:
13 17 31 37 71 73
`13` is such because it's prime and read from right to left writes `31` which is prime too. Same for the others.
Task
Find all Backwards-read-primes between two positive given numbers (both inclusive), the second one always being greater than or equal to the first one. The resulting array or the resulting string will be ordered following the natural order of the prime numbers.
Examples
(in general form):
(start = 2, end = 100) => [13, 17, 31, 37, 71, 73, 79, 97]
(start = 9900, end = 10000) => [9923, 9931, 9941, 9967]
(start = 501, end = 599) => []
See "Sample Tests" for your language. Notes - Forth: Return only the first backwards-read prime between start and end or `0` if you don't find any - Ruby: Don't use the `Prime` class, it's disabled.
Пояснение задачи:
Задача состоит в поиске всех простых чисел («обращённо-простых»), удовлетворяющих следующим условиям:
- Число является простым.
- Если прочитать его цифры справа налево, получится другое простое число.
- Исключаются палиндромные числа (числа, читающиеся одинаково слева направо и справа налево).
Примеры:
- Для диапазона от 2 до 100: 2 ≤ n ≤ 100
Ответ: `[13, 17, 31, 37, 71, 73, 79, 97]`
- Для диапазона от 9900 до 10000: 9900 ≤ n ≤ 10000
Ответ: `[9923, 9931, 9941, 9967]`
- Для диапазона от 501 до 599: 501 ≤ n \≤ 599
Ответ: пустой массив, так как нет подходящих чисел.
Дополнительные условия:
- В некоторых языках (например, Forth) требуется вернуть только первое подходящее число или ноль (`0`), если подходящих чисел нет.
- В языке Ruby запрещено использовать встроенный класс `Prime`, нужно реализовать проверку простоты самостоятельно.
Подход к решению:
Основная идея — последовательно проверять каждое число в заданном диапазоне:
1. Проверяем, является ли число простым.
2. Читаем число справа налево и проверяем, является ли новое число простым.
3. Исключаем числа, являющиеся палиндромами.
После проверки добавляем подходящие числа в итоговый список.
На этом наш сегодняшний алгоритмический спринт завершён. Надеюсь, задачи зажгли в вас искру интеллектуального азарта и подарили несколько моментов "эврика!".
Ваш ход: присоединяйтесь к обсуждению в комментариях — делитесь своими решениями, нестандартными подходами и инсайтами, которые обнаружили в процессе. Давайте создадим живое пространство для обмена опытом, где каждый комментарий — это новый угол зрения на знакомые алгоритмы.
Оставайтесь любопытными, держите код в тонусе — и до следующих алгоритмических вызовов!
Вступайте в нашу телеграмм-группу Инфостарт