Добро пожаловать на новую статью по решению алгоритмических задач, в которой я собрал для вас список новых задач из разных источников разной сложности, чтобы каждый смог попробовать в себя в этом увлекательном деле!
Цель статьи заключается в тренировке практик по применению различных алгоритмов, в поддержании навыка "Писать код" в тонусе ну и, само собой, немного поразвлечься!
Что было раньше:
В предыдущей части (нажмите на строку) мы решили:
- Grasshopper - Grade book (Кузнечик - Классный журнал) (Нажмите на строку)
- Power (Степень) (Нажмите на строку)
- Reflecting Light (Отражение света) (Нажмите на строку)
- Reverse complement (DNA ) (Обратная комплементарная последовательность) (Нажмите на строку)
- Simple Fun #117: Winner String (Простая забава #117: Строка победителя) (Нажмите на строку)
- Formula 1 Race (Гонка Формулы 1) (Нажмите на строку)
В этой части вас ждут еще более интересные алгоритмические задачи. Давайте приступим!
Решение новых задач:
Пояснение сложности задач у разных платформ:
Codewars
8 kyu - Самая простая задача
7 kyu - ...
6 kyu - ...
5 kyu - ...
4 kyu - ...
3 kyu - ...
2 kyu - ...
1 kyu - Самая сложная задач
Задача 1
Платформа: CodeWars
Название задачи: Count Odd Numbers below n (Подсчитайте нечетные числа ниже n)
Ссылка на задачу: https://www.codewars.com/kata/59342039eb450e39970000a6 (Нажмите на строку)
Сложность: 8 (8 / 8) kyu
Уже решили (На момент написания статьи): 14,552 из 54,785
Тэги: Производительность, Математика
Оригинальное описание задачи:
Given a number n
, return the number of positive odd numbers below n
, EASY!
Examples (Input -> Output)
7 -> 3 (because odd numbers below 7 are [1, 3, 5])
15 -> 7 (because odd numbers below 15 are [1, 3, 5, 7, 9, 11, 13])
Expect large Inputs!
Пояснение задачи:
Задача заключается в подсчете количества нечётных положительных чисел, меньших данного числа nn.
Задача 2
Платформа: CodeWars
Название задачи: Multiply the number (Умножьте это число)
Ссылка на задачу: https://www.codewars.com/kata/5708f682c69b48047b000e07 (Нажмите на строку)
Сложность: 8 (8 / 8) kyu
Уже решили (На момент написания статьи): 9,084 из 21,859
Тэги: Фундаментальные
Оригинальное описание задачи:
Jack really likes his number five: the trick here is that you have to multiply each number by 5 raised to the number of digits of each numbers, so, for example:
3 --> 15 ( 3 * 5¹)
10 --> 250 ( 10 * 5²)
200 --> 25000 (200 * 5³)
0 --> 0 ( 0 * 5¹)
-3 --> -15 ( -3 * 5¹)
Пояснение задачи:
Задача заключается в умножении каждого числа на 5, возведённое в степень, равную количеству цифр этого числа.
Например:
Для числа 3: 3×5(1)=153×51=15
Для числа 10: 10×5(2)=25010×52=250
Для числа 200: 200×5(3)=25000200×53=25000
Для числа 0: 0×5(1)=0×51=0
Для отрицательного числа -3: −3×5(1)= −15
То есть, сначала считаем количество цифр в числе, затем возводим 5 в эту степень и умножаем на исходное число.
Задача 3
Платформа: CodeWars
Название задачи: Matryoshka Dolls (Матрешки)
Ссылка на задачу: https://www.codewars.com/kata/6510238b4840140017234427 (Нажмите на строку)
Сложность: 7 (7 / 8) kyu
Уже решили (На момент написания статьи): 198 из 288
Тэги: Списки, Алгоритмы
Оригинальное описание задачи:
Matryoshka dolls are traditionally wooden dolls that can be nested by fitting smaller dolls into larger ones. Similarly, we can nest lists by placing smaller lists into larger ones, following specific rules.
Rules for Nesting:
- List A can be nested inside List B if:
- The minimum value in List A is greater than the minimum value in List B.
- The maximum value in List A is smaller than the maximum value in List B.
Example 1:
- List A: [2, 3, 9, 5]
- List B: [10, 2, 1]
- Explanation:
- min(A) = 2 > 1 = min(B)
- max(A) = 9 < 10 = max(B)
- Result: A can be nested inside B.
Example 2:
- List A: [4, 5]
- List B: [6, 3]
- Explanation:
- min(A) = 4 > 3 = min(B)
- max(A) = 5 < 6 = max(B)
- Result: A can be nested inside B.
Example 3:
- List A: [7, 1]
- List B: [7, 6, 5, 4, 3, 2]
- Explanation:
- Both lists share the same maximum value (7).
- Result: A cannot be nested properly inside B.
Example 4:
- List A: [1, 5]
- List B: [2, 6]
- Explanation:
- Elements in the lists overlap, making nesting impossible.
- Result: A cannot be nested inside B.
Example 5:
- List A: [1,2,3,4]
- List B: [0,3,5]
- List C: [2,2,3]]
- Explanation:
- List C and List A meet the criteria because 2 > 1 and 3 < 4.
- List A and List B also meet the criteria because 1 > 0 and 4 < 5.
- Result: List B can be nested inside List A, and List A can be nested inside List C.
Additional Notes:
- Sublists can be nested in either ascending (smallest to largest) or descending (largest to smallest) order.
- Strict nesting is required; no two lists can share the same maximum or minimum values.
Пояснение задачи:
Матрешки — это деревянные куклы, которые вкладываются одна в другую.
Аналогично, списки можно вложить друг в друга, следуя определенным правилам.
Правила вложения списков:
Список A можно вложить в список B, если:
Минимальное значение в списке A больше минимального значения в списке B.
Максимальное значение в списке A меньше максимального значения в списке B.
Примеры:
Список A: [2, 3, 9, 5]
Список B: [10, 2, 1]
Объяснение: min(A) = 2 > 1 = min(B) max(A) = 9 < 10 = max(B)
Результат: A можно вложить в B.
Список A: [4, 5]
Список B: [6, 3]
Объяснение: min(A) = 4 > 3 = min(B) max(A) = 5 < 6 = max(B)
Результат: A можно вложить в B.
Список A: [7, 1]
Список B: [7, 6, 5, 4, 3, 2]
Объяснение: Оба списка имеют одинаковое максимальное значение (7).
Результат: A нельзя правильно вложить в B.
Список A: [1, 5]
Список B: [2, 6]
Объяснение: Элементы в списках пересекаются, делая вложение невозможным.
Результат: A нельзя вложить в B.
Список A: [1,2,3,4]
Список B: [0,3,5]
Список C: [2,2,3]
Объяснение: Списки C и A соответствуют критериям, потому что 2 > 1 и 3 < 4. Списки A и B также соответствуют критериям, потому что 1 > 0 и 4 < 5.
Результат: Список B можно вложить в список A, а список A можно вложить в список C.
Дополнительные замечания:
Подсписки могут быть вложены либо в порядке возрастания (от самого маленького до самого большого), либо в порядке убывания (от самого большого до самого маленького).
Требуется строгое вложение; никакие два списка не могут иметь одинаковые максимальные или минимальные значения.
Задача 4
Платформа: CodeWars
Название задачи: Flatten Me (Расплющи меня)
Ссылка на задачу: https://www.codewars.com/kata/55a5bef147d6be698b0000cd (Нажмите на строку)
Сложность: 7 (7 / 8) kyu
Уже решили (На момент написания статьи): 724 из 724
Тэги: Фундаментальные
Оригинальное описание задачи:
In this kata, your task is to create a function that takes a single list as an argument and returns a flattened list. The input list will have a maximum of one level of nesting (list(s) inside of a list).
# no nesting
[1, 2, 3]
# one level of nesting
[1, [2, 3]]
Пояснение задачи:
Задача заключается в создании функции, которая разворачивает одномерный список.
Входной список может содержать элементы любого типа, включая другие списки.
Но глубина вложенности ограничена одним уровнем.
Это значит, что вложенные списки не могут содержать другие списки.
Примеры:
Для списка [1, 2, 3] функция вернёт сам список, так как он уже плоский.
Для списка [1, [2, 3], 4] функция развернёт вложенный список и вернёт [1, 2, 3, 4].
Для списка ['!', '?'] функция вернёт тот же список, так как он уже плоский.
Для списка [[True, False], ['!'], ['?'], [71, '@']] функция вернёт [True, False, '!', '?', 71, '@'].
Таким образом, задача сводится к обработке одномерного списка и разворачиванию вложенных списков.
Задача 5
Платформа: CodeWars
Название задачи: Hungarian Vowel Harmony (harder) (Венгерская гармония гласных (более тяжелая))
Ссылка на задачу: https://www.codewars.com/kata/57fe5b7108d102fede00137a (Нажмите на строку)
Сложность: 6 (6 / 8) kyu
Уже решили (На момент написания статьи): 232 из 498
Тэги: Строки, Фундаментальные
Оригинальное описание задачи:
Vowel harmony is a phenomenon in some languages. It means that "A vowel or vowels in a word are changed to sound the same (thus "in harmony.")" (wikipedia). This kata is based on vowel harmony in Hungarian.
Task:
Your goal is to create a function instrumental()
which returns the valid form of a valid Hungarian word w
in instrumental case i. e. append the correct suffix -vel
or -val
to the word w
based on vowel harmony rules.
Vowel Harmony Rules (simplified)
Front vowels: e, é, i, í, ö, !7;, ü, $9;
Back vowels: a, á, o, ó, u, ú
Vowel pairs (short -> long): a -> á
, e -> é
, i -> í
, o -> ó
, u -> ú
, ö -> !7;
, ü -> $9;
Digraphs: sz
, zs
, cs
Word ends with a vowel
- Change the ending vowel from short to long form.
- Append the suffix:
vel
if the ending vowel is a front vowel
val
if the ending vowel is a back vowel
Word ends with a consonant
Step one
- Default case: Double the ending consonant and continue with step two.
- Special case: If the word ends with a digraph then double the first letter (e. g.
sz
-> ssz
)
Step two
Append the suffix:
el
if the last vowel is a front vowel
al
if the last vowel is a back vowel
Examples:
instrumental("fa") == "fával"
instrumental("teve") == "tevével"
instrumental("bet$9;") == "bet$9;vel"
instrumental("ablak") == "ablakkal"
instrumental("szék") == "székkel"
instrumental("otthon") == "otthonnal"
instrumental("kar") == "karral"
instrumental("rács") == "ráccsal"
instrumental("kosz") == "kosszal"
Preconditions:
- All strings are unicode strings.
- The tests don't contain:
- exceptional cases like
kávé -> kávéval
- words ending with doubled consonants (e. g.
tett
)
- words ending with
y
- words ending with
u
, i
Пояснение задачи:
Задача заключается в создании функции instrumental(), которая добавляет правильное окончание к венгерскому слову в инструментальном падеже согласно правилам гармонии гласных.
Гармония гласных — это явление, при котором гласные звуки в слове согласуются друг с другом.
Правила гармонии гласных (упрощенно):
Передние гласные: e, é, i, í, ö, !7;, ü, $9;
Задние гласные: a, á, o, ó, u, ú
Парные гласные (краткая -> длинная форма): a -> á
, e -> é
, i -> í
, o -> ó
, u -> ú
, ö -> !7;
, ü -> $9;
Диграфы: sz, zs, cs
Правила образования инструментального падежа:
Если слово заканчивается на гласную: Измените конечную гласную на её длинную форму.
Добавьте суффикс: vel, если конечная гласная передняя. val, если конечная гласная задняя.
Если слово заканчивается на согласную:
Удвойте конечный согласный звук.
Примените следующие правила:
Если слово заканчивается на диграф, удвойте первую букву диграфа (например, sz -> ssz).
Добавьте суффикс: el, если последняя гласная передняя. al, если последняя гласная задняя.
Примеры:
instrumental("fa") == "fával"
instrumental("teve") == "tevével"
instrumental("bet$9;") == "bet$9;vel"
instrumental("ablak") == "ablakkal"
instrumental("szék") == "székkel"
instrumental("otthon") == "otthonnal"
instrumental("kar") == "karral"
instrumental("rács") == "ráccsal"
instrumental("kosz") == "kosszal"
Предусловия: Все строки представлены в Unicode. Тесты не содержат исключительных случаев, таких как удвоенные согласные или окончания на y.
Задача 6
Платформа: CodeWars
Название задачи: The maximum and minimum difference -- Challenge version (Максимальная и минимальная разница - Сложная версия)
Ссылка на задачу: https://www.codewars.com/kata/583c592928a0c0449d000099 (Нажмите на строку)
Сложность: 5 (5 / 8) kyu
Уже решили (На момент написания статьи): 198 из 434
Тэги: Алгоритмы
Оригинальное описание задачи:
When no more interesting kata can be resolved, I just choose to create the new kata, to solve their own, to enjoy the process --myjinxin2015 said
Description:
Given two array of integers(arr1
,arr2
). Your task is going to find a pair of numbers(an element in arr1, and another element in arr2), their difference is as big as possible(absolute value); Again, you should to find a pair of numbers, their difference is as small as possible. Return the maximum and minimum difference values by an array: [ max difference, min difference ]
For example:
Given arr1 = [3,10,5], arr2 = [20,7,15,8]
should return [17,2] because 20 - 3 = 17, 10 - 8 = 2
Note:
- arr1 and arr2 contains only integers(positive, negative or 0);
- arr1 and arr2 may have different lengths, they always has at least one element;
- All inputs are valid.
- This is a challenge version, Please optimize your algorithm to avoid time out ;-)
- If you feel difficult, please try the simple version.
About testcases
- Basic test: 5 testcases
- Random test1: 100 testcases, arr1 and arr2 contains 1-20 elements
- Random test2: 300 testcases, arr1 and arr2 contains 10000 elements
Some Examples
max_and_min([3,10,5],[20,7,15,8]) # -> (17,2)
max_and_min([3],[20]) # -> (17,17)
max_and_min([3,10,5],[3,10,5]) # -> (7,0)
max_and_min([1,2,3,4,5],[6,7,8,9,10]) # -> (9,1)
Пояснение задачи:
Задача заключается в нахождении максимальной и минимальной разниц между элементами двух массивов.
Для этого нужно найти пару чисел (одно из первого массива, другое из второго), разница которых будет максимальной и минимальной.
Примеры:
Для массивов arr1 = [3, 10, 5] и arr2 = [20, 7, 15, 8] ответ будет [17, 2], так как:
Максимальная разница: 20 - 3 = 17
Минимальная разница: 10 - 8 = 2
Основные условия:
Массивы могут содержать положительные, отрицательные числа или ноль.
Длина массивов может различаться, но каждый массив содержит хотя бы один элемент.
Все входные данные валидные.
Необходимо оптимизировать алгоритм, чтобы избежать тайм-аута.
Тестовые кейсы:
Базовые тесты: 5 кейсов.
Случайные тесты: 100 кейсов с массивами длины от 1 до 20 элементов.
Сложные случайные тесты: 300 кейсов с массивами длины 10000 элементов.
Примеры:
max_and_min([3,10,5],[20,7,15,8]) → (17,2)
max_and_min([3],[20]) → (17,17)
max_and_min([3,10,5],[3,10,5]) → (7,0)
max_and_min([1,2,3,4,5],[6,7,8,9,10]) → (9,1)
Новое в конфигурации Algo1C:

https://github.com/SalavatovNabiulla/Algo1C
- 0.5 : Добавлена возможность выбирать контекст исполнения кода, например: НаСервере или НаКлиенте
- 0.4 : Исправлена ошибка при выводе содержимого исключения
- 0.3 : Добавлена возможность сохранять и загружать задачи; Внесены небольшие изменения в интерфейс
- 0.2 : Исправлена ошибка при выводе результата (Отдельная благодарность SAShikutkin)
Заключение:
Codewars
8 kyu - Самая простая задача
7 kyu - ...
6 kyu - ...
5 kyu - ...
4 kyu - ...
3 kyu - ...
2 kyu - ...
1 kyu - Самая сложная задач
Платформа: CodeWars
Название задачи: Count Odd Numbers below n (Подсчитайте нечетные числа ниже n)
Ссылка на задачу: https://www.codewars.com/kata/59342039eb450e39970000a6 (Нажмите на строку)
Сложность: 8 (8 / 8) kyu
Уже решили (На момент написания статьи): 14,552 из 54,785
Тэги: Производительность, Математика
Оригинальное описание задачи:
Given a number
n
, return the number of positive odd numbers belown
, EASY!Examples (Input -> Output)
7 -> 3 (because odd numbers below 7 are [1, 3, 5]) 15 -> 7 (because odd numbers below 15 are [1, 3, 5, 7, 9, 11, 13])
Expect large Inputs!
Пояснение задачи:
Задача заключается в подсчете количества нечётных положительных чисел, меньших данного числа nn.
Платформа: CodeWars
Название задачи: Multiply the number (Умножьте это число)
Ссылка на задачу: https://www.codewars.com/kata/5708f682c69b48047b000e07 (Нажмите на строку)
Сложность: 8 (8 / 8) kyu
Уже решили (На момент написания статьи): 9,084 из 21,859
Тэги: Фундаментальные
Оригинальное описание задачи:
Jack really likes his number five: the trick here is that you have to multiply each number by 5 raised to the number of digits of each numbers, so, for example:
3 --> 15 ( 3 * 5¹) 10 --> 250 ( 10 * 5²) 200 --> 25000 (200 * 5³) 0 --> 0 ( 0 * 5¹) -3 --> -15 ( -3 * 5¹)
Пояснение задачи:
Задача заключается в умножении каждого числа на 5, возведённое в степень, равную количеству цифр этого числа.
Например:
Для числа 3: 3×5(1)=153×51=15
Для числа 10: 10×5(2)=25010×52=250
Для числа 200: 200×5(3)=25000200×53=25000
Для числа 0: 0×5(1)=0×51=0
Для отрицательного числа -3: −3×5(1)= −15
То есть, сначала считаем количество цифр в числе, затем возводим 5 в эту степень и умножаем на исходное число.
Платформа: CodeWars
Название задачи: Matryoshka Dolls (Матрешки)
Ссылка на задачу: https://www.codewars.com/kata/6510238b4840140017234427 (Нажмите на строку)
Сложность: 7 (7 / 8) kyu
Уже решили (На момент написания статьи): 198 из 288
Тэги: Списки, Алгоритмы
Оригинальное описание задачи:
Matryoshka dolls are traditionally wooden dolls that can be nested by fitting smaller dolls into larger ones. Similarly, we can nest lists by placing smaller lists into larger ones, following specific rules.
Rules for Nesting:
- List A can be nested inside List B if:
- The minimum value in List A is greater than the minimum value in List B.
- The maximum value in List A is smaller than the maximum value in List B.
Example 1:
- List A: [2, 3, 9, 5]
- List B: [10, 2, 1]
- Explanation:
- min(A) = 2 > 1 = min(B)
- max(A) = 9 < 10 = max(B)
- Result: A can be nested inside B.
Example 2:
- List A: [4, 5]
- List B: [6, 3]
- Explanation:
- min(A) = 4 > 3 = min(B)
- max(A) = 5 < 6 = max(B)
- Result: A can be nested inside B.
Example 3:
- List A: [7, 1]
- List B: [7, 6, 5, 4, 3, 2]
- Explanation:
- Both lists share the same maximum value (7).
- Result: A cannot be nested properly inside B.
Example 4:
- List A: [1, 5]
- List B: [2, 6]
- Explanation:
- Elements in the lists overlap, making nesting impossible.
- Result: A cannot be nested inside B.
Example 5:
- List A: [1,2,3,4]
- List B: [0,3,5]
- List C: [2,2,3]]
- Explanation:
- List C and List A meet the criteria because 2 > 1 and 3 < 4.
- List A and List B also meet the criteria because 1 > 0 and 4 < 5.
- Result: List B can be nested inside List A, and List A can be nested inside List C.
Additional Notes:
- Sublists can be nested in either ascending (smallest to largest) or descending (largest to smallest) order.
- Strict nesting is required; no two lists can share the same maximum or minimum values.
Пояснение задачи:
Матрешки — это деревянные куклы, которые вкладываются одна в другую.
Аналогично, списки можно вложить друг в друга, следуя определенным правилам.
Правила вложения списков:
Список A можно вложить в список B, если:
Минимальное значение в списке A больше минимального значения в списке B.
Максимальное значение в списке A меньше максимального значения в списке B.
Примеры:
Список A: [2, 3, 9, 5]
Список B: [10, 2, 1]
Объяснение: min(A) = 2 > 1 = min(B) max(A) = 9 < 10 = max(B)
Результат: A можно вложить в B.
Список A: [4, 5]
Список B: [6, 3]
Объяснение: min(A) = 4 > 3 = min(B) max(A) = 5 < 6 = max(B)
Результат: A можно вложить в B.
Список A: [7, 1]
Список B: [7, 6, 5, 4, 3, 2]
Объяснение: Оба списка имеют одинаковое максимальное значение (7).
Результат: A нельзя правильно вложить в B.
Список A: [1, 5]
Список B: [2, 6]
Объяснение: Элементы в списках пересекаются, делая вложение невозможным.
Результат: A нельзя вложить в B.
Список A: [1,2,3,4]
Список B: [0,3,5]
Список C: [2,2,3]
Объяснение: Списки C и A соответствуют критериям, потому что 2 > 1 и 3 < 4. Списки A и B также соответствуют критериям, потому что 1 > 0 и 4 < 5.
Результат: Список B можно вложить в список A, а список A можно вложить в список C.
Дополнительные замечания:
Подсписки могут быть вложены либо в порядке возрастания (от самого маленького до самого большого), либо в порядке убывания (от самого большого до самого маленького).
Требуется строгое вложение; никакие два списка не могут иметь одинаковые максимальные или минимальные значения.
Платформа: CodeWars
Название задачи: Flatten Me (Расплющи меня)
Ссылка на задачу: https://www.codewars.com/kata/55a5bef147d6be698b0000cd (Нажмите на строку)
Сложность: 7 (7 / 8) kyu
Уже решили (На момент написания статьи): 724 из 724
Тэги: Фундаментальные
Оригинальное описание задачи:
In this kata, your task is to create a function that takes a single list as an argument and returns a flattened list. The input list will have a maximum of one level of nesting (list(s) inside of a list).
# no nesting [1, 2, 3] # one level of nesting [1, [2, 3]]
Пояснение задачи:
Задача заключается в создании функции, которая разворачивает одномерный список.
Входной список может содержать элементы любого типа, включая другие списки.
Но глубина вложенности ограничена одним уровнем.
Это значит, что вложенные списки не могут содержать другие списки.
Примеры:
Для списка [1, 2, 3] функция вернёт сам список, так как он уже плоский.
Для списка [1, [2, 3], 4] функция развернёт вложенный список и вернёт [1, 2, 3, 4].
Для списка ['!', '?'] функция вернёт тот же список, так как он уже плоский.
Для списка [[True, False], ['!'], ['?'], [71, '@']] функция вернёт [True, False, '!', '?', 71, '@'].
Таким образом, задача сводится к обработке одномерного списка и разворачиванию вложенных списков.
Платформа: CodeWars
Название задачи: Hungarian Vowel Harmony (harder) (Венгерская гармония гласных (более тяжелая))
Ссылка на задачу: https://www.codewars.com/kata/57fe5b7108d102fede00137a (Нажмите на строку)
Сложность: 6 (6 / 8) kyu
Уже решили (На момент написания статьи): 232 из 498
Тэги: Строки, Фундаментальные
Оригинальное описание задачи:
Vowel harmony is a phenomenon in some languages. It means that "A vowel or vowels in a word are changed to sound the same (thus "in harmony.")" (wikipedia). This kata is based on vowel harmony in Hungarian.
Task:
Your goal is to create a function
instrumental()
which returns the valid form of a valid Hungarian wordw
in instrumental case i. e. append the correct suffix-vel
or-val
to the wordw
based on vowel harmony rules.Vowel Harmony Rules (simplified)
Front vowels:
e, é, i, í, ö, !7;, ü, $9;
Back vowels:
a, á, o, ó, u, ú
Vowel pairs (short -> long):
a -> á
,e -> é
,i -> í
,o -> ó
,u -> ú
,ö -> !7;
,ü -> $9;
Digraphs:
sz
,zs
,cs
Word ends with a vowel
- Change the ending vowel from short to long form.
- Append the suffix:
vel
if the ending vowel is a front vowelval
if the ending vowel is a back vowelWord ends with a consonant
Step one
- Default case: Double the ending consonant and continue with step two.
- Special case: If the word ends with a digraph then double the first letter (e. g.
sz
->ssz
)Step two
Append the suffix:
el
if the last vowel is afront vowel
al
if the last vowel is aback vowel
Examples:
instrumental("fa") == "fával" instrumental("teve") == "tevével" instrumental("bet$9;") == "bet$9;vel" instrumental("ablak") == "ablakkal" instrumental("szék") == "székkel" instrumental("otthon") == "otthonnal" instrumental("kar") == "karral" instrumental("rács") == "ráccsal" instrumental("kosz") == "kosszal"
Preconditions:
- All strings are unicode strings.
- The tests don't contain:
- exceptional cases like
kávé -> kávéval
- words ending with doubled consonants (e. g.
tett
)- words ending with
y
- words ending with
u
,i
Пояснение задачи:
Задача заключается в создании функции instrumental(), которая добавляет правильное окончание к венгерскому слову в инструментальном падеже согласно правилам гармонии гласных.
Гармония гласных — это явление, при котором гласные звуки в слове согласуются друг с другом.
Правила гармонии гласных (упрощенно):
Передние гласные:e, é, i, í, ö, !7;, ü, $9;
Задние гласные:a, á, o, ó, u, ú
Парные гласные (краткая -> длинная форма):a -> á
,e -> é
,i -> í
,o -> ó
,u -> ú
,ö -> !7;
,ü -> $9;
Диграфы: sz, zs, cs
Правила образования инструментального падежа:
Если слово заканчивается на гласную: Измените конечную гласную на её длинную форму.
Добавьте суффикс: vel, если конечная гласная передняя. val, если конечная гласная задняя.
Если слово заканчивается на согласную:
Удвойте конечный согласный звук.
Примените следующие правила:
Если слово заканчивается на диграф, удвойте первую букву диграфа (например, sz -> ssz).
Добавьте суффикс: el, если последняя гласная передняя. al, если последняя гласная задняя.
Примеры:instrumental("fa") == "fával" instrumental("teve") == "tevével" instrumental("bet$9;") == "bet$9;vel" instrumental("ablak") == "ablakkal" instrumental("szék") == "székkel" instrumental("otthon") == "otthonnal" instrumental("kar") == "karral" instrumental("rács") == "ráccsal" instrumental("kosz") == "kosszal"
Предусловия: Все строки представлены в Unicode. Тесты не содержат исключительных случаев, таких как удвоенные согласные или окончания на y.
Платформа: CodeWars
Название задачи: The maximum and minimum difference -- Challenge version (Максимальная и минимальная разница - Сложная версия)
Ссылка на задачу: https://www.codewars.com/kata/583c592928a0c0449d000099 (Нажмите на строку)
Сложность: 5 (5 / 8) kyu
Уже решили (На момент написания статьи): 198 из 434
Тэги: Алгоритмы
Оригинальное описание задачи:
When no more interesting kata can be resolved, I just choose to create the new kata, to solve their own, to enjoy the process --myjinxin2015 said
Description:
Given two array of integers(
arr1
,arr2
). Your task is going to find a pair of numbers(an element in arr1, and another element in arr2), their difference is as big as possible(absolute value); Again, you should to find a pair of numbers, their difference is as small as possible. Return the maximum and minimum difference values by an array:[ max difference, min difference ]
For example:
Given arr1 = [3,10,5], arr2 = [20,7,15,8] should return [17,2] because 20 - 3 = 17, 10 - 8 = 2
Note:
- arr1 and arr2 contains only integers(positive, negative or 0);
- arr1 and arr2 may have different lengths, they always has at least one element;
- All inputs are valid.
- This is a challenge version, Please optimize your algorithm to avoid time out ;-)
- If you feel difficult, please try the simple version.
About testcases
- Basic test: 5 testcases
- Random test1: 100 testcases, arr1 and arr2 contains 1-20 elements
- Random test2: 300 testcases, arr1 and arr2 contains 10000 elements
Some Examples
max_and_min([3,10,5],[20,7,15,8]) # -> (17,2) max_and_min([3],[20]) # -> (17,17) max_and_min([3,10,5],[3,10,5]) # -> (7,0) max_and_min([1,2,3,4,5],[6,7,8,9,10]) # -> (9,1)
Пояснение задачи:
Задача заключается в нахождении максимальной и минимальной разниц между элементами двух массивов.
Для этого нужно найти пару чисел (одно из первого массива, другое из второго), разница которых будет максимальной и минимальной.
Примеры:
Для массивов arr1 = [3, 10, 5] и arr2 = [20, 7, 15, 8] ответ будет [17, 2], так как:
Максимальная разница: 20 - 3 = 17
Минимальная разница: 10 - 8 = 2
Основные условия:
Массивы могут содержать положительные, отрицательные числа или ноль.
Длина массивов может различаться, но каждый массив содержит хотя бы один элемент.
Все входные данные валидные.
Необходимо оптимизировать алгоритм, чтобы избежать тайм-аута.
Тестовые кейсы:
Базовые тесты: 5 кейсов.
Случайные тесты: 100 кейсов с массивами длины от 1 до 20 элементов.
Сложные случайные тесты: 300 кейсов с массивами длины 10000 элементов.
Примеры:
max_and_min([3,10,5],[20,7,15,8]) → (17,2)
max_and_min([3],[20]) → (17,17)
max_and_min([3,10,5],[3,10,5]) → (7,0)
max_and_min([1,2,3,4,5],[6,7,8,9,10]) → (9,1)
https://github.com/SalavatovNabiulla/Algo1C
- 0.5 : Добавлена возможность выбирать контекст исполнения кода, например: НаСервере или НаКлиенте
- 0.4 : Исправлена ошибка при выводе содержимого исключения
- 0.3 : Добавлена возможность сохранять и загружать задачи; Внесены небольшие изменения в интерфейс
- 0.2 : Исправлена ошибка при выводе результата (Отдельная благодарность SAShikutkin)
Ну что ж, пока на этом всё, надеюсь, статья была увлекательной для вас, благодарю за внимание.
Подключайтесь к решению алгоритмических задач вместе со мной, делитесь вашим мнением и решениями в комментариях, сохраняя при этом позитивный настрой!
Увидимся в новой статье!