Добро пожаловать на новый выпуск рубрики "Algo1C", в которой я стараюсь регулярно находить новые задачи по программированию и делиться их решениями с вами!
Цель рубрики заключается в тренировке практик по применению различных алгоритмов, в поддержании навыка "Писать код" в тонусе ну и само собой немного поразвлечься!
Что было раньше:
В предыдущей части (нажмите на строку) мы решили:
- SQL easy regex extraction (SQL: Легкое выделение с помощью регулярных выражений) (Нажмите на строку)
- Guess the Word: Count Matching Letters (Угадай слово: Посчитай схожие буквы) (Нажмите на строку)
- Simple Fun #18: Candles (Простое веселье #18: Свечи) (Нажмите на строку)
- ScholarStem: Unit 6- Baby count! (Scholar stem: Задача 6 - Количество младенцев) (Нажмите на строку)
- We Have Liftoff (Полетели) (Нажмите на строку)
В этой части вас ждут еще более интересные алгоритмические задачи. Давайте приступим!
Дисклеймер:
Перед началом просмотра решения задачи хочу призвать каждого к самостоятельному решению самой задачи, для того чтобы после вы могли сравнить своё решение с решением из этой статьи и обсудить это в комментариях, буду рад послушать ваше мнение. При этом большая просьба сохранять позитивный настрой и доброжелательность!
Решение новых задач:
Задача 1
Платформа: CodeWars
Название задачи: Multiples of 3 or 5 (Кратные 3 или 5)
Ссылка на задачу: https://www.codewars.com/kata/514b92a657cdc65150000006 (Нажмите на строку)
Сложность: 6 kyu (6 / 8)
Уже решили (На момент написания статьи): 142,273 из 432,446
Тэги: Математика, Алгоритмы
Оригинальное описание задачи:
If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23.
Finish the solution so that it returns the sum of all the multiples of 3 or 5 below the number passed in.
Additionally, if the number is negative, return 0.
Note: If the number is a multiple of both 3 and 5, only count it once.
Courtesy of projecteuler.net (Problem 1)
Пояснение задачи:
В условиях задачи сказано что если собрать список из всех натуральных чисел меньше 10, которые при этом являются кратными 3 или 5, то мы в итоге получим числа 3, 5, 6 и 9, которые в сумме дадут 23. От нас с вами требуется точно таким же образом получить сумму всех кратных 3 или 5 чисел меньше исходного числа.
Также поясняется что если исходное число отрицательное то нам стоит вернуть 0.
Вдобавок ко всему также уточняется что если число одновременно кратно и 3 и 5 то такое число мы считаем лишь 1 раз!
Решение задачи:
(Нажмите на спойлер чтобы увидеть решение)
Задача 2
Платформа: CodeWars
Название задачи: Array.diff (Различие массивов)
Ссылка на задачу: https://www.codewars.com/kata/523f5d21c841566fde000009 (Нажмите на строку)
Сложность: 6 kyu (6 / 8)
Уже решили (На момент написания статьи): 120,535 из 289,999
Тэги: Массивы, Фундаментальное, Алгоритмы
Оригинальное описание задачи:
Your goal in this kata is to implement a difference function, which subtracts one list from another and returns the result.
It should remove all values from list a
, which are present in list b
keeping their order.
array_diff([1,2],[1]) == [2]
If a value is present in b
, all of its occurrences must be removed from the other:
array_diff([1,2,2,2,3],[2]) == [1,3]
Пояснение задачи:
По условию задачи нам сказано что нам будут даваться два массива. От нас с вами требуется собрать новый массив из элементов первого массива, который не должен содержать в себе значения из второго массива. Также поясняется что если значение из второго массива повторяется несколько раз в первом массиве, все вхождения должны быть исключены в любом случае!
Например: Даны массивы [1, 2] и [1], в результате нам нужно будет вернуть массив [2]
Решение задачи:
(Нажмите на спойлер чтобы увидеть решение)
Задача 3
Платформа: CodeWars
Название задачи: Find The Parity Outlier (Найди нарушитель равенства)
Ссылка на задачу: https://www.codewars.com/kata/5526fc09a1bbd946250002dc (Нажмите на строку)
Сложность: 6 kyu (6 / 8)
Уже решили (На момент написания статьи): 75,080 из 218,479
Тэги: Алгоритмы
Оригинальное описание задачи:
You are given an array (which will have a length of at least 3, but could be very large) containing integers. The array is either entirely comprised of odd integers or entirely comprised of even integers except for a single integer N
. Write a method that takes the array as an argument and returns this "outlier" N
.
Examples
[2, 4, 0, 100, 4, 11, 2602, 36] --> 11 (the only odd number)
[160, 3, 1719, 19, 11, 13, -21] --> 160 (the only even number)
Пояснение задачи:
Судя по описанию задачи нам с вами будет дан массив, длина которого как минимум будет равна 3 но может быть и больше, содержащий какие-то числа. Также сказано что все числа во всем массиве будут либо четными либо нечетными за исключением одного числа. Наша с вами задачи заключается в том чтобы найти это самое число, нарушающее общий порядок четности/нечетности.
Например если дан массив [2, 4, 0, 100, 4, 11, 2602, 36] то числом нарушителем будет 11, ибо оно является единственными нечетными числом. Точно также если взять массив [160, 3, 1719, 19, 11, 13, -21] то единственными нарушителем будет число 160 ибо оно является единственными четными числом!
Решение задачи:
(Нажмите на спойлер чтобы увидеть решение)
Задача 4
Платформа: CodeWars
Название задачи: Counting Duplicates (Подсчёт дубликатов)
Ссылка на задачу: https://www.codewars.com/kata/54bf1c2cd5b56cc47f0007a1 (Нажмите на строку)
Сложность: 6 kyu (6 / 8)
Уже решили (На момент написания статьи): 90,746 из 234,518
Тэги: Строки, Фундаментальные
Оригинальное описание задачи:
Count the number of Duplicates
Write a function that will return the count of distinct case-insensitive alphabetic characters and numeric digits that occur more than once in the input string. The input string can be assumed to contain only alphabets (both uppercase and lowercase) and numeric digits.
Example
"abcde" -> 0 # no characters repeats more than once
"aabbcde" -> 2 # 'a' and 'b'
"aabBcde" -> 2 # 'a' occurs twice and 'b' twice (`b` and `B`)
"indivisibility" -> 1 # 'i' occurs six times
"Indivisibilities" -> 2 # 'i' occurs seven times and 's' occurs twice
"aA11" -> 2 # 'a' and '1'
"ABBA" -> 2 # 'A' and 'B' each occur twice
Пояснение задачи:
По условию задачи нам будет дана какая-то строка, которая может содержать буквы любого регистра а также цифры. От нас с вами требуется посчитать количество повторяющихся символов, независимо от их регистра или типа, и вернуть их количество (не их дубликатов).
Например если дана строка "abcde" то вернуть нам придется 0 ибо дубликатов нет. Также если дана строка "indivisibility" то вернуть нужно будет 1 ибо только один символ повторяется множество раз!
Решение задачи:
(Нажмите на спойлер чтобы увидеть решение)
Задача 5
Платформа: CodeWars
Название задачи: Duplicate Encoder (Кодировка дубликатов)
Ссылка на задачу: https://www.codewars.com/kata/54b42f9314d9229fd6000d9c (Нажмите на строку)
Сложность: 6 kyu (6 / 8)
Уже решили (На момент написания статьи): 87,097 из 224,980
Тэги: Строки, Массивы, Фундаментальные
Оригинальное описание задачи:
The goal of this exercise is to convert a string to a new string where each character in the new string is "("
if that character appears only once in the original string, or ")"
if that character appears more than once in the original string. Ignore capitalization when determining if a character is a duplicate.
Examples
"din" => "((("
"recede" => "()()()"
"Success" => ")())())"
"(( @" => "))(("
Notes
Assertion messages may be unclear about what they display in some languages. If you read "...It Should encode XXX"
, the "XXX"
is the expected result, not the input!
Пояснение задачи:
Целью задачи является кодировка исходной строки с использованием скобок. В качестве правил кодировки в условиях задачи нам сказано что если символ строки встречается во всей строке лишь 1 раз то его мы заменяем на открывающую скобку а если он встречается несколько раз то наоборот, заменяем на закрывающую. Также в условиях задачи поясняется что регистр не имеет значения, символы "S" и "s" нужно расценивать как одно и тоже.
Например дана строка "din", как мы можем заметить, каждый символ встречается лишь 1 раз, поэтому каждый из них будет заменен на "(". В конечном итоге получим строку "(((". Или, например строка "Success", в закодированном виде будет выглядеть вот так ")())())"
Решение задачи:
(Нажмите на спойлер чтобы увидеть решение)
Новое в конфигурации Algo1C:
Заключение:
Платформа: CodeWars
Название задачи: Multiples of 3 or 5 (Кратные 3 или 5)
Ссылка на задачу: https://www.codewars.com/kata/514b92a657cdc65150000006 (Нажмите на строку)
Сложность: 6 kyu (6 / 8)
Уже решили (На момент написания статьи): 142,273 из 432,446
Тэги: Математика, Алгоритмы
Оригинальное описание задачи:
If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23.
Finish the solution so that it returns the sum of all the multiples of 3 or 5 below the number passed in.
Additionally, if the number is negative, return 0.
Note: If the number is a multiple of both 3 and 5, only count it once.
Courtesy of projecteuler.net (Problem 1)
Пояснение задачи:
В условиях задачи сказано что если собрать список из всех натуральных чисел меньше 10, которые при этом являются кратными 3 или 5, то мы в итоге получим числа 3, 5, 6 и 9, которые в сумме дадут 23. От нас с вами требуется точно таким же образом получить сумму всех кратных 3 или 5 чисел меньше исходного числа.
Также поясняется что если исходное число отрицательное то нам стоит вернуть 0.
Вдобавок ко всему также уточняется что если число одновременно кратно и 3 и 5 то такое число мы считаем лишь 1 раз!
Решение задачи:
Платформа: CodeWars
Название задачи: Array.diff (Различие массивов)
Ссылка на задачу: https://www.codewars.com/kata/523f5d21c841566fde000009 (Нажмите на строку)
Сложность: 6 kyu (6 / 8)
Уже решили (На момент написания статьи): 120,535 из 289,999
Тэги: Массивы, Фундаментальное, Алгоритмы
Оригинальное описание задачи:
Your goal in this kata is to implement a difference function, which subtracts one list from another and returns the result.
It should remove all values from list
a
, which are present in listb
keeping their order.array_diff([1,2],[1]) == [2]
If a value is present in
b
, all of its occurrences must be removed from the other:array_diff([1,2,2,2,3],[2]) == [1,3]
Пояснение задачи:
По условию задачи нам сказано что нам будут даваться два массива. От нас с вами требуется собрать новый массив из элементов первого массива, который не должен содержать в себе значения из второго массива. Также поясняется что если значение из второго массива повторяется несколько раз в первом массиве, все вхождения должны быть исключены в любом случае!
Например: Даны массивы [1, 2] и [1], в результате нам нужно будет вернуть массив [2]
Решение задачи:
Платформа: CodeWars
Название задачи: Find The Parity Outlier (Найди нарушитель равенства)
Ссылка на задачу: https://www.codewars.com/kata/5526fc09a1bbd946250002dc (Нажмите на строку)
Сложность: 6 kyu (6 / 8)
Уже решили (На момент написания статьи): 75,080 из 218,479
Тэги: Алгоритмы
Оригинальное описание задачи:
You are given an array (which will have a length of at least 3, but could be very large) containing integers. The array is either entirely comprised of odd integers or entirely comprised of even integers except for a single integer
N
. Write a method that takes the array as an argument and returns this "outlier"N
.Examples
[2, 4, 0, 100, 4, 11, 2602, 36] --> 11 (the only odd number) [160, 3, 1719, 19, 11, 13, -21] --> 160 (the only even number)
Пояснение задачи:
Судя по описанию задачи нам с вами будет дан массив, длина которого как минимум будет равна 3 но может быть и больше, содержащий какие-то числа. Также сказано что все числа во всем массиве будут либо четными либо нечетными за исключением одного числа. Наша с вами задачи заключается в том чтобы найти это самое число, нарушающее общий порядок четности/нечетности.
Например если дан массив [2, 4, 0, 100, 4, 11, 2602, 36] то числом нарушителем будет 11, ибо оно является единственными нечетными числом. Точно также если взять массив [160, 3, 1719, 19, 11, 13, -21] то единственными нарушителем будет число 160 ибо оно является единственными четными числом!
Решение задачи:
Платформа: CodeWars
Название задачи: Counting Duplicates (Подсчёт дубликатов)
Ссылка на задачу: https://www.codewars.com/kata/54bf1c2cd5b56cc47f0007a1 (Нажмите на строку)
Сложность: 6 kyu (6 / 8)
Уже решили (На момент написания статьи): 90,746 из 234,518
Тэги: Строки, Фундаментальные
Оригинальное описание задачи:
Count the number of Duplicates
Write a function that will return the count of distinct case-insensitive alphabetic characters and numeric digits that occur more than once in the input string. The input string can be assumed to contain only alphabets (both uppercase and lowercase) and numeric digits.
Example
"abcde" -> 0
# no characters repeats more than once
"aabbcde" -> 2# 'a' and 'b'
"aabBcde" -> 2# 'a' occurs twice and 'b' twice (`b` and `B`)
"indivisibility" -> 1# 'i' occurs six times
"Indivisibilities" -> 2# 'i' occurs seven times and 's' occurs twice
"aA11" -> 2# 'a' and '1'
"ABBA" -> 2# 'A' and 'B' each occur twice
Пояснение задачи:
По условию задачи нам будет дана какая-то строка, которая может содержать буквы любого регистра а также цифры. От нас с вами требуется посчитать количество повторяющихся символов, независимо от их регистра или типа, и вернуть их количество (не их дубликатов).
Например если дана строка "abcde" то вернуть нам придется 0 ибо дубликатов нет. Также если дана строка "indivisibility" то вернуть нужно будет 1 ибо только один символ повторяется множество раз!
Решение задачи:
Платформа: CodeWars
Название задачи: Duplicate Encoder (Кодировка дубликатов)
Ссылка на задачу: https://www.codewars.com/kata/54b42f9314d9229fd6000d9c (Нажмите на строку)
Сложность: 6 kyu (6 / 8)
Уже решили (На момент написания статьи): 87,097 из 224,980
Тэги: Строки, Массивы, Фундаментальные
Оригинальное описание задачи:
The goal of this exercise is to convert a string to a new string where each character in the new string is
"("
if that character appears only once in the original string, or")"
if that character appears more than once in the original string. Ignore capitalization when determining if a character is a duplicate.Examples
"din" => "(((" "recede" => "()()()" "Success" => ")())())" "(( @" => "))(("
Notes
Assertion messages may be unclear about what they display in some languages. If you read
"...It Should encode XXX"
, the"XXX"
is the expected result, not the input!
Пояснение задачи:
Целью задачи является кодировка исходной строки с использованием скобок. В качестве правил кодировки в условиях задачи нам сказано что если символ строки встречается во всей строке лишь 1 раз то его мы заменяем на открывающую скобку а если он встречается несколько раз то наоборот, заменяем на закрывающую. Также в условиях задачи поясняется что регистр не имеет значения, символы "S" и "s" нужно расценивать как одно и тоже.
Например дана строка "din", как мы можем заметить, каждый символ встречается лишь 1 раз, поэтому каждый из них будет заменен на "(". В конечном итоге получим строку "(((". Или, например строка "Success", в закодированном виде будет выглядеть вот так ")())())"
Решение задачи:
Ну что ж, пока на этом всё, надеюсь статья была увлекательной для вас, благодарю за внимание.
Подключайтесь к решению алгоритмических задач вместе со мной, делитесь вашим мнением и решениями в комментариях, сохраняя при этом позитивный настрой!
Увидимся в новой статье!