Добро пожаловать на новый выпуск рубрики "Algo1C", в которой я стараюсь регулярно находить новые задачи по программированию и делиться их решениями с вами!
Цель рубрики заключается в тренировке практик по применению различных алгоритмов, в поддержании навыка "Писать код" в тонусе, ну и, само собой, немного поразвлечься!
Что было раньше:
В предыдущей части (нажмите на строку) мы решили:
- The furthest distance of index (Самая большая дистанция между индексами) (Нажмите на строку)
- Ball Upwards (Мяч вверх) (Нажмите на строку)
- Ideal electron distribution (Идеальное распределение электронов) (Нажмите на строку)
- You Got Change? (У тебя есть сдача?) (Нажмите на строку)
- Battle of the characters (Easy) (Битва символов (Легко)) (Нажмите на строку)
В этой части вас ждут еще более интересные алгоритмические задачи. Давайте приступим!
Дисклеймер:
Перед началом просмотра решения задачи хочу призвать каждого к самостоятельному решению самой задачи, для того чтобы после вы могли сравнить своё решение с решением из этой статьи и обсудить это в комментариях, буду рад послушать ваше мнение. При этом большая просьба сохранять позитивный настрой и доброжелательность!
Решение новых задач:
Задача 1
Платформа: CodeWars
Название задачи: Frog's Dinner (Ужин лягушки)
Ссылка на задачу: https://www.codewars.com/kata/65f361be2b30ec19b78d758f (Нажмите на строку)
Сложность: 7 (7 / 8)
Уже решили (На момент написания статьи): 728 из 1,329
Тэги: Математика, Алгоритмы, Головоломки
Оригинальное описание задачи:
Thanks for checking out my kata - in the below problem - the highest n can be is 200.
Example summation of a number - summation of the number 5 1+2+3+4+5 = 15 summation of the number 6 1+2+3+4+5+6 = 21
You are sat with two frogs on a log, Chris and Tom. They are arguing about who ate the most flies (Poor flies, but what you going to do!). Chris says "I ate the summation of n number of flies!".
Tom replies "Take half the number you ate then round it down and work out the summation of that, that is how many I ate"!
Cat then hops onto the log looking pleased with herself "Well, I ate the summation of both your dinners combined." Loz who came late to this meeting of amphibians is very confused, he asks "So how many did each of you eat?"
Write a function called frogContest which returns a string "Chris ate {number} flies, Tom ate {number} flies and Cat ate {number} flies"
{number} is the integer value of the amount of flies eaten by each.
Пояснение задачи:
Суть задачи заключается в том что нужно рассчитать, сколько мух съели три персонажа: Крис, Том и Кошка.
Крис съедает сумму чисел от 1 до n (где n ≤ 200).
Том съедает сумму чисел от 1 до округленного вниз значения половины количества мух, съеденных Крисом.
Кошка съедает сумму мух, съеденных Крисом и Томом.
В качестве ответа мы должны будем возвращать строку, описывающую, сколько мух съел каждый персонаж.
Решение задачи:
(Нажмите на спойлер чтобы увидеть решение)
Задача 2
Платформа: CodeWars
Название задачи: Negation of a Value (Отрицание значения)
Ссылка на задачу: https://www.codewars.com/kata/58f6f87a55d759439b000073 (Нажмите на строку)
Сложность: 7 (7 / 8)
Уже решили (На момент написания статьи): 877 из 2,121
Тэги: Логика, Алгоритмы, Фундаментальные
Оригинальное описание задачи:
In programming you know the use of the logical negation operator (!), it reverses the meaning of a condition.
!false = true
!!false = false
Your task is to complete the function 'negationValue()' that takes a string of negations with a value and returns what the value would be if those negations were applied to it.
negation_value("!", False) #=> True
negation_value("!!!!!", True) #=> False
negation_value("!!", []) #=> False
Do not use the eval()
function or the Function()
constructor in JavaScript.
Note: Always return a boolean value, even if there're no negations.
Пояснение задачи:
Наша с вами задача заключается в том чтобы реализовать функцию, которая принимает на вход строку, состоящую из символов “!” (операторы отрицания), и произвольное значение.
Функция должна применить к этому значению заданное количество отрицаний и вернуть итоговое логическое значение (Истина или Ложь).
При этом нужно учесть, что отрицания применяются по порядку, и любые значения (не только логические) должны быть преобразованы в логические в конечном результате
Решение задачи:
(Нажмите на спойлер чтобы увидеть решение)
Задача 3
Платформа: CodeWars
Название задачи: Colored Hexes! (Цветные HEX-значения)
Ссылка на задачу: https://www.codewars.com/kata/57e17750621bca9e6f00006f (Нажмите на строку)
Сложность: 7 (7 / 8)
Уже решили (На момент написания статьи): 287 из 582
Тэги: Фундаментальные
Оригинальное описание задачи:
You're looking through different hex codes, and having trouble telling the difference between #000001 and #100000
We need a way to tell which is red, and which is blue!
That's where you create hex color !!!
It should read an RGB input, and return whichever value (red, blue, or green) is of greatest concentration!
But, if multiple colors are of equal concentration, you should return their mix!
red + blue = magenta
green + red = yellow
blue + green = cyan
red + blue + green = white
One last thing, if the string given is empty, or has all 0's, return black!
Examples:
codes = "087 255 054" -> "green"
codes = "181 181 170" -> "yellow"
codes = "000 000 000" -> "black"
codes = "001 001 001" -> "white"
Пояснение задачи:
Суть задачи заключается в том чтобы написать функцию, которая принимает на вход строку, представляющую RGB-значения (например, “255 0 0” или “0 0 0”), или ничего (тогда используются значения “0 0 0” по умолчанию).
Она должна определить, какое из трех значений (красный, зеленый, синий) является наибольшим (или все равны нулю).
Затем должна формировать строку из “1” и “0” в зависимости от того, является ли значение цвета наибольшим (или не равно нулю).
По этой строке возвращается соответствующее название цвета из заданного набора (black, white, red, yellow, green, cyan, blue, magenta).
Решение задачи:
(Нажмите на спойлер чтобы увидеть решение)
Задача 4
Платформа: CodeWars
Название задачи: Showing X to Y of Z Products (Отображение от X до Y Z продуктов.)
Ссылка на задачу: https://www.codewars.com/kata/545cff101288c1d2da0006fb (Нажмите на строку)
Сложность: 7 (7 / 8)
Уже решили (На момент написания статьи): 983 из 2,254
Тэги: Алгоритмы
Оригинальное описание задачи:
A category page displays a set number of products per page, with pagination at the bottom allowing the user to move from page to page.
Given that you know the page you are on, how many products are in the category in total, and how many products are on any given page, how would you output a simple string showing which products you are viewing..
Examples
In a category of 30 products with 10 products per page, on page 1 you would see
'Showing 1 to 10 of 30 Products.'
In a category of 26 products with 10 products per page, on page 3 you would see
'Showing 21 to 26 of 26 Products.'
In a category of 8 products with 10 products per page, on page 1 you would see
'Showing 1 to 8 of 8 Products.'
Пояснение задачи:
Цель задачи заключается в том чтобы написать функцию, которая должна принимать номер текущей страницы, общее количество продуктов и количество продуктов на странице.
На основании этих данных функция должна формировать строку, указывающую диапазон отображаемых продуктов и общее количество продуктов.
Например, “Showing 1 to 10 of 30 Products.” или “Showing 21 to 26 of 26 Products.”
Необходимо корректно обрабатывать случаи, когда общее количество продуктов меньше количества продуктов на странице, и ситуации, когда текущая страница не является первой или последней.
Решение задачи:
(Нажмите на спойлер чтобы увидеть решение)
Задача 5
Платформа: CodeWars
Название задачи: Simple Fun #360: Calculate 1 to n Using The Fewest Numbers (Простая забава #360: Вычислите от 1 до n, используя наименьшее количество чисел)
Ссылка на задачу: https://www.codewars.com/kata/59dad2177997cb2a1300008d (Нажмите на строку)
Сложность: 6 (6 / 8)
Уже решили (На момент написания статьи): 47 из 81
Тэги: Алгоритмы
Оригинальное описание задачи:
You are given a positive integer n
. Now we want to choose some numbers from 1 to n, and then doing some addition and subtraction(or doing nothing), all these numbers are used at most once. Eventually, all the numbers from 1 to n can be calculated.
Your task is to find the minimum amount of numbers you need to complete such calculations.
Still not understand the task? Look at the following example ;-)
Example
For n = 1
, the output should be 1
.
The number 1 is the only option and requires no addition and subtraction.
For n = 4
, the output should be 2
.
We can choose two numbers: 1
and 3
.
1 == 1
3 - 1 == 2
3 == 3
3 + 1 == 4
All number from 1 to 4 can be calculated.
For n = 10
, the output should be 3
.
We can choose three numbers: 1, 3
and 6
.
1 == 1
3 - 1 == 2
3 == 3
3 + 1 == 4
6 - 1 == 5
6 == 6
6 + 1 == 7
6 + 3 - 1 == 8
6 + 3 == 9
6 + 3 + 1 == 10
All numbers from 1 to 10 can be calculated.
Note
-
0 < n < 10^10
-
In order to avoid timeout, be aware of the code's performance ;-)
-
Happy Coding ^_^
Пояснение задачи:
Суть задачи заключается в том чтобы найти минимальное количество чисел, которые нужно выбрать из диапазона от 1 до n (включительно), чтобы с помощью сложения и вычитания (каждое число используется не более одного раза) можно было получить любое число из этого же диапазона.
Например для числа 10 мы должны будем вернуть 3 по следующему принципу:
Мы можем отобрать три числа: 1, 3 и 6.
1 == 1
3 - 1 == 2
3 == 3
3 + 1 == 4
6 - 1 == 5
6 == 6
6 + 1 == 7
6 + 3 - 1 == 8
6 + 3 == 9
6 + 3 + 1 == 10
Все числа от 1 до 10 могут быть вычислены.
Решение задачи:
(Нажмите на спойлер чтобы увидеть решение)
Новое в конфигурации Algo1C:
Заключение:
Платформа: CodeWars
Название задачи: Frog's Dinner (Ужин лягушки)
Ссылка на задачу: https://www.codewars.com/kata/65f361be2b30ec19b78d758f (Нажмите на строку)
Сложность: 7 (7 / 8)
Уже решили (На момент написания статьи): 728 из 1,329
Тэги: Математика, Алгоритмы, Головоломки
Оригинальное описание задачи:
Thanks for checking out my kata - in the below problem - the highest n can be is 200.
Example summation of a number - summation of the number 5 1+2+3+4+5 = 15 summation of the number 6 1+2+3+4+5+6 = 21
You are sat with two frogs on a log, Chris and Tom. They are arguing about who ate the most flies (Poor flies, but what you going to do!). Chris says "I ate the summation of n number of flies!".
Tom replies "Take half the number you ate then round it down and work out the summation of that, that is how many I ate"!
Cat then hops onto the log looking pleased with herself "Well, I ate the summation of both your dinners combined." Loz who came late to this meeting of amphibians is very confused, he asks "So how many did each of you eat?"
Write a function called frogContest which returns a string "Chris ate {number} flies, Tom ate {number} flies and Cat ate {number} flies"
{number} is the integer value of the amount of flies eaten by each.
Пояснение задачи:
Суть задачи заключается в том что нужно рассчитать, сколько мух съели три персонажа: Крис, Том и Кошка.
Крис съедает сумму чисел от 1 до n (где n ≤ 200).
Том съедает сумму чисел от 1 до округленного вниз значения половины количества мух, съеденных Крисом.
Кошка съедает сумму мух, съеденных Крисом и Томом.
В качестве ответа мы должны будем возвращать строку, описывающую, сколько мух съел каждый персонаж.
Решение задачи:
Платформа: CodeWars
Название задачи: Negation of a Value (Отрицание значения)
Ссылка на задачу: https://www.codewars.com/kata/58f6f87a55d759439b000073 (Нажмите на строку)
Сложность: 7 (7 / 8)
Уже решили (На момент написания статьи): 877 из 2,121
Тэги: Логика, Алгоритмы, Фундаментальные
Оригинальное описание задачи:
In programming you know the use of the logical negation operator (!), it reverses the meaning of a condition.
!false = true !!false = false
Your task is to complete the function 'negationValue()' that takes a string of negations with a value and returns what the value would be if those negations were applied to it.
negation_value("!", False) #=> True negation_value("!!!!!", True) #=> False negation_value("!!", []) #=> False
Do not use the
eval()
function or theFunction()
constructor in JavaScript.Note: Always return a boolean value, even if there're no negations.
Пояснение задачи:
Наша с вами задача заключается в том чтобы реализовать функцию, которая принимает на вход строку, состоящую из символов “!” (операторы отрицания), и произвольное значение.
Функция должна применить к этому значению заданное количество отрицаний и вернуть итоговое логическое значение (Истина или Ложь).
При этом нужно учесть, что отрицания применяются по порядку, и любые значения (не только логические) должны быть преобразованы в логические в конечном результате
Решение задачи:
Платформа: CodeWars
Название задачи: Colored Hexes! (Цветные HEX-значения)
Ссылка на задачу: https://www.codewars.com/kata/57e17750621bca9e6f00006f (Нажмите на строку)
Сложность: 7 (7 / 8)
Уже решили (На момент написания статьи): 287 из 582
Тэги: Фундаментальные
Оригинальное описание задачи:
You're looking through different hex codes, and having trouble telling the difference between #000001 and #100000
We need a way to tell which is red, and which is blue!
That's where you create hex color !!!
It should read an RGB input, and return whichever value (red, blue, or green) is of greatest concentration!
But, if multiple colors are of equal concentration, you should return their mix!
red + blue = magenta green + red = yellow blue + green = cyan red + blue + green = white
One last thing, if the string given is empty, or has all 0's, return black!
Examples:
codes = "087 255 054" -> "green" codes = "181 181 170" -> "yellow" codes = "000 000 000" -> "black" codes = "001 001 001" -> "white"
Пояснение задачи:
Суть задачи заключается в том чтобы написать функцию, которая принимает на вход строку, представляющую RGB-значения (например, “255 0 0” или “0 0 0”), или ничего (тогда используются значения “0 0 0” по умолчанию).
Она должна определить, какое из трех значений (красный, зеленый, синий) является наибольшим (или все равны нулю).
Затем должна формировать строку из “1” и “0” в зависимости от того, является ли значение цвета наибольшим (или не равно нулю).
По этой строке возвращается соответствующее название цвета из заданного набора (black, white, red, yellow, green, cyan, blue, magenta).
Решение задачи:
Платформа: CodeWars
Название задачи: Showing X to Y of Z Products (Отображение от X до Y Z продуктов.)
Ссылка на задачу: https://www.codewars.com/kata/545cff101288c1d2da0006fb (Нажмите на строку)
Сложность: 7 (7 / 8)
Уже решили (На момент написания статьи): 983 из 2,254
Тэги: Алгоритмы
Оригинальное описание задачи:
A category page displays a set number of products per page, with pagination at the bottom allowing the user to move from page to page.
Given that you know the page you are on, how many products are in the category in total, and how many products are on any given page, how would you output a simple string showing which products you are viewing..
Examples
In a category of 30 products with 10 products per page, on page 1 you would see
'Showing 1 to 10 of 30 Products.'
In a category of 26 products with 10 products per page, on page 3 you would see
'Showing 21 to 26 of 26 Products.'
In a category of 8 products with 10 products per page, on page 1 you would see
'Showing 1 to 8 of 8 Products.'
Пояснение задачи:
Цель задачи заключается в том чтобы написать функцию, которая должна принимать номер текущей страницы, общее количество продуктов и количество продуктов на странице.
На основании этих данных функция должна формировать строку, указывающую диапазон отображаемых продуктов и общее количество продуктов.
Например, “Showing 1 to 10 of 30 Products.” или “Showing 21 to 26 of 26 Products.”
Необходимо корректно обрабатывать случаи, когда общее количество продуктов меньше количества продуктов на странице, и ситуации, когда текущая страница не является первой или последней.
Решение задачи:
Платформа: CodeWars
Название задачи: Simple Fun #360: Calculate 1 to n Using The Fewest Numbers (Простая забава #360: Вычислите от 1 до n, используя наименьшее количество чисел)
Ссылка на задачу: https://www.codewars.com/kata/59dad2177997cb2a1300008d (Нажмите на строку)
Сложность: 6 (6 / 8)
Уже решили (На момент написания статьи): 47 из 81
Тэги: Алгоритмы
Оригинальное описание задачи:
You are given a positive integer
n
. Now we want to choose some numbers from 1 to n, and then doing some addition and subtraction(or doing nothing), all these numbers are used at most once. Eventually, all the numbers from 1 to n can be calculated.Your task is to find the minimum amount of numbers you need to complete such calculations.
Still not understand the task? Look at the following example ;-)
Example
For
n = 1
, the output should be1
.The number 1 is the only option and requires no addition and subtraction.
For
n = 4
, the output should be2
.We can choose two numbers:
1
and3
.1 == 1 3 - 1 == 2 3 == 3 3 + 1 == 4 All number from 1 to 4 can be calculated.
For
n = 10
, the output should be3
.We can choose three numbers:
1, 3
and6
.1 == 1 3 - 1 == 2 3 == 3 3 + 1 == 4 6 - 1 == 5 6 == 6 6 + 1 == 7 6 + 3 - 1 == 8 6 + 3 == 9 6 + 3 + 1 == 10 All numbers from 1 to 10 can be calculated.
Note
0 < n < 10^10
In order to avoid timeout, be aware of the code's performance ;-)
Happy Coding
^_^
Пояснение задачи:
Суть задачи заключается в том чтобы найти минимальное количество чисел, которые нужно выбрать из диапазона от 1 до n (включительно), чтобы с помощью сложения и вычитания (каждое число используется не более одного раза) можно было получить любое число из этого же диапазона.
Например для числа 10 мы должны будем вернуть 3 по следующему принципу:
Мы можем отобрать три числа: 1, 3 и 6.
1 == 1
3 - 1 == 2
3 == 3
3 + 1 == 4
6 - 1 == 5
6 == 6
6 + 1 == 7
6 + 3 - 1 == 8
6 + 3 == 9
6 + 3 + 1 == 10
Все числа от 1 до 10 могут быть вычислены.
Решение задачи:
Ну что ж, пока на этом всё, надеюсь статья была увлекательной для вас, благодарю за внимание.
Подключайтесь к решению алгоритмических задач вместе со мной, делитесь вашим мнением и решениями в комментариях, сохраняя при этом позитивный настрой!
Увидимся в новой статье!