Добро пожаловать на новый выпуск рубрики "Algo1C", в которой я стараюсь регулярно решать новые задачи по программированию и делиться своими решениями с вами!
Цель рубрики заключается в тренировке практик по применению различных алгоритмов и в поддержании навыка "Писать код" в тонусе!
Что было раньше:
В предыдущей части (нажмите на строку) мы решили:
- Jaden Casing Strings(Строки в стиле Джейдена) (Нажмите на строку)
- Sum of two lowest positive integers(Сумма двух наименьших положительных чисел) (Нажмите на строку)
- Credit Card Mask(Маска как у кредитной карты) (Нажмите на строку)
- Complementary DNA(Комплементарная ДНК) (Нажмите на строку)
- Exes and Ohs(Иксы и О) (Нажмите на строку)
В этой части вас ждут еще более интересные алгоритмические задачи. Давайте приступим!
Перед началом чтения решения задачи хочу призвать каждого к самостоятельному решению задачи, чтобы после вы могли сравнить своё решение с моим и обсудить это в комментариях. Буду рад послушать ваше мнение!
Решение новых задач:
Задача 1
Платформа: CodeWars
Название задачи: Polish alphabet (Польский алфавит)
Ссылка на задачу: https://www.codewars.com/kata/57ab2d6072292dbf7c000039 (Нажмите на строку)
Сложность: 8 kyu (8 / 8)
Тэги: Строки, Фундаментальные
Оригинальное описание задачи:
There are 32 letters in the Polish alphabet: 9 vowels and 23 consonants.
Your task is to change the letters with diacritics:
ą -> a,
ć -> c,
ę -> e,
ł -> l,
ń -> n,
ó -> o,
"7; -> s,
%8; -> z,
&0; -> z
For example:
"Jędrzej Błądziński" --> "Jedrzej Bladzinski"
Пояснение:
В условиях задачи нам объясняют как устроен польский алфавит. Он содержит 9 гласных и 23 согласных буквы. Суть задачи в другом. Некоторое буквы в польском алфавите имеют Диакритические знаки, как например ą -> a.
От нас с вами требуется заменить буквы с диакритическими знаками на их аналоги из английского алфавита.
Более чем понятно, даавайте попробуем решить:
Решение:
Для начала соберем все буквы с диакритическими символами в одно соответствие, чтобы с ними было удобно в дальнейшем работать. Затем от нас требуется пройтись по всем символам исходной строки с помощью цикла и в каждой итерации проверять текущий символ на его наличие в нашем изначально созданном соответствии. Затем, при необходимости меняя текущий символ, собираем новую строку уже без букв с диакритическими символами. Остается только вывести результат и проверить работает ли всё!
АналогиБукв = Новый Соответствие;
АналогиБукв.Вставить("ą","a");
АналогиБукв.Вставить("ć","c");
АналогиБукв.Вставить("ę","e");
АналогиБукв.Вставить("ł","l");
АналогиБукв.Вставить("ń","n");
АналогиБукв.Вставить("ó","o");
АналогиБукв.Вставить(""7;","s");
АналогиБукв.Вставить("%8;","z");
АналогиБукв.Вставить("&0;","z");
//
ИсходнаяСтрока = "Jędrzej Błądziński";
Вывод = "";
Для НомерСимвола = 1 По СтрДлина(ИсходнаяСтрока) Цикл
ТекущийСимвол = Сред(ИсходнаяСтрока,НомерСимвола,1);
Если АналогиБукв.Получить(ТекущийСимвол) <> Неопределено Тогда
ТекущийСимвол = АналогиБукв.Получить(ТекущийСимвол);
КонецЕсли;
Вывод = Вывод + ТекущийСимвол;
КонецЦикла;
Результат:
Jedrzej Bladzinski
Как мы можем заметить, всё работает так как мы и ожидали. Познавательная задача про специальные символы в польском языке!
Задача 2
Платформа: CodeWars
Название задачи: Simple Maths Test (Простая математическая проверка)
Ссылка на задачу: https://www.codewars.com/kata/5507309481b8bd3b7e001638 (Нажмите на строку)
Сложность: 7 kyu (7 / 8)
Тэги: Алгоритмы, Математика
Оригинальное описание задачи:
Create a function which checks a number for three different properties.
- is the number prime?
- is the number even?
- is the number a multiple of 10?
Each should return either true or false, which should be given as an array. Remark: The Haskell variant uses data Property
.
Examples:
number_property(7) # ==> [true, false, false]
number_property(10) # ==> [false, true, true]
The number will always be an integer, either positive or negative. Note that negative numbers cannot be primes, but they can be multiples of 10:
number_property(-7) # ==> [false, false, false]
number_property(-10) # ==> [false, true, true]
Пояснение:
Суть задачи заключается в том чтобы написать функцию, которая проверяет данное число на то является ли это число:
1) Простым
2) Четным
3) Кратным 10
Также в условиях задачи поясняется что исходное значение всегда обязательно будет числом а также может быть положительным или отрицательным.
В качестве результата мы будем возвращать массив с результатами, которые будут являться значениями типа Булево!
Звучит просто, давайте попробуем решить задачу:
Решение:
Перед началом решения давайте сначала создадим массив, в который будем собирать результаты проверок. Далее чтобы решить задачу давайте разделить её на этапы проверки.
Для начала проверим первое условие, является ли это число простым. Чтобы проверить это нам необходимо написать цикл, количество итераций которого будет равно количеству чисел между 2 и нашим числом исключая само число. Далее в каждой итерации получаем остаток от деления нашего числа на текущее число итерации и проверяем, есть ли остаток. Если это число делится на что-либо без остатка, значит это число не простое. Всё это обернем в условие для проверки на то, положительное это число или нет ибо отрицательное число не может быть простым!
Для проверки второго условия нам достаточно проверить есть ли остаток от деления нашего числа на 2. Если остатка нет, значит оно четное, все просто.
Для проверки третьего условия нам также достаточно проверить есть ли остаток от деления но уже не на 2 а на 10, так мы и выясним является ли это число кратным 10. В конечном итоге выводим собранный массив. Давайте проверим код:
ИсходноеЗначение = -7;
Вывод = Новый Массив;
Вывод.Добавить(Истина);
Вывод.Добавить(Истина);
Вывод.Добавить(Истина);
//
Если ИсходноеЗначение > 0 Тогда
Для ТекущееЧисло = 2 По ИсходноеЗначение - 1 Цикл
Если ИсходноеЗначение % ТекущееЧисло = 0 Тогда
Вывод[0] = Ложь;
КонецЕсли;
КонецЦикла;
Иначе
Вывод[0] = Ложь;
КонецЕсли;
//
Если ИсходноеЗначение % 2 <> 0 Тогда
Вывод[1] = Ложь;
КонецЕсли;
//
Если ИсходноеЗначение % 10 <> 0 Тогда
Вывод[2] = Ложь;
КонецЕсли;
//
Вывод = СтрСоединить(Вывод," ");
Результат:
Да Нет Нет
Как можем видеть, задача решена успешно, результат именно тот, какой мы и ожидали. Идём дальше!
Задача 3
Платформа: CodeWars
Название задачи: So Easy: Charge time calculation (Очень просто: Вычисление времени зарядки)
Ссылка на задачу: https://www.codewars.com/kata/57ea0ee4491a151fc5000acf (Нажмите на строку)
Сложность: 7 kyu (7 / 8)
Тэги: Головоломки
Оригинальное описание задачи:
To charge your mobile phone battery, do you know how much time it takes from 0% to 100%? It depends on your cell phone battery capacity and the power of the charger. A rough calculation method is:
0% --> 85% (fast charge)
(battery capacity(mAh) * 85%) / power of the charger(mA)
85% --> 95% (decreasing charge)
(battery capacity(mAh) * 10%) / (power of the charger(mA) * 50%)
95% --> 100% (trickle charge)
(battery capacity(mAh) * 5%) / (power of the charger(mA) * 20%)
For example: Your battery capacity is 1000 mAh and you use a charger 500 mA, to charge your mobile phone battery from 0% to 100% needs time:
Complete function calculateTime
that accepts two arguments battery
and charger
, return how many hours can charge the battery from 0% to 100%. The result should be a number, round to 2 decimal places (In Haskell, no need to round it).
0% --> 85% (fast charge) 1.7 (hour)
85% --> 95% (decreasing charge) 0.4 (hour)
95% --> 100% (trickle charge) 0.5 (hour)
total times = 1.7 + 0.4 + 0.5 = 2.6 (hour)
Пояснение:
Цель задачи заключается в том чтобы написать код, который вычисляет время зарядки вашего телефона, в зависимости от его характеристики, такой как объем батареи а также в зависимости от характеристики вашего зарядного устройства, такой как его мощность. Для расчета общего времени нам необходимо учесть 3 промежуточных времени:
1) Время зарядки от 0 до 85
2) Время зарядки от 85 до 95
3) Время зарядки от 95 до 100
Почему 3? Это связано с особенностью типа батарей, которые сейчас везде используются. Если интересно, можете посмотреть отрывок с Илоном Маском на подкасте Джо Рогана (Нажмите на строку), где он привёл интересную аналогию и объяснил, почему так происходит. Не суть важно, идём дальше. Вычислять время будем по заранее данной формуле, которая требует от нас умножить объем батареи на текущий порог (85, 10, 5) и разделить это на произведения мощности зарядного устройства на процент эффективности зарядки (для второго и третьего этапов зярядки).
Далее суммируем все три результата времени и выводим единым числом!
Думаю всем всё понятно, давайте попробуем решить:
Решение:
Решение будет максимально простым. Всё что от нас требуется так это повторить одну и ту же формулу 3 раза и каждый раз увеличивать результат Вывода.
В итоге получился вот такой код:
ОбъемБатареи = 1000;
МощностьЗарядногоУстройства = 500;
Вывод = 0;
//
Вывод = Вывод + ((ОбъемБатареи * 0.85)/(МощностьЗарядногоУстройства));
Вывод = Вывод + ((ОбъемБатареи * 0.10)/(МощностьЗарядногоУстройства * 0.50));
Вывод = Вывод + ((ОбъемБатареи * 0.05)/(МощностьЗарядногоУстройства * 0.20));
Результат:
2.6
Интересная и познавательная задача с простым решением!
Задача 4
Платформа: CodeWars
Название задачи: Special Number (Special Numbers Series #5) (Особенное число: Серия задач про особенные числа, пятая задача)
Ссылка на задачу: https://www.codewars.com/kata/5a55f04be6be383a50000187 (Нажмите на строку)
Сложность: 7 kyu (7 / 8)
Тэги: Фундаментальные, Математика
Оригинальное описание задачи:
Definition
A number is a Special Number if its digits only consists of 0, 1, 2, 3, 4 or 5
Given a number, determine if it is a special number or not.
Notes
-
The number passed will be positive (N > 0)
-
All single-digit numbers within the interval [1:5] are considered special numbers
Example:
2 ==> return "Special!!"
Explanation: It's a single-digit number within the interval [1:5]
9 ==> return "NOT!!"
Explanation: Although, it's a single-digit number but Outside the interval [1:5]
23 ==> return "Special!!"
Explanation: All the number's digits formed from the interval [0:5] digits
39 ==> return "NOT!!"
Explanation: Although there is a digit (3) within the interval,
the second digit is not (Must be ALL the number's Digits)
59 ==> return "NOT!!"
Explanation: Although there is a digit (5) within the interval,
the second digit is not (Must be ALL the number's Digits)
513 ==> return "Special!!"
709 ==> return "NOT!!"
Пояснение:
Суть задачи заключается в том чтобы выяснить является ли данном нам число "Особенным". Что это значит? По условию задачи нам дано что любое число, которое составлено лишь с использованием чисел от 0 до 5, является "Особенным".
Например:
Число 2 особенное, соответствует условиям
Число 9 не является особенным
Число 23 является особенным
И так далее...
Суть думаю ясна. Давайте попробуем решить:
Решение:
Для начала напишем цикл для перебора всех цифр исходного числа. Затем в каждой итерации будем проверять входит ли текущая цифра в нужным нам инвервал и затем, в зависимости от этого, поменяем результат. Далее уже в зависимости от результата, выведем строку с пояснением. Вот какой получился код:
ИсходноеЧисло = 23;
РезультатПроверки = Истина;
//
Для НомерЭлемента = 1 По СтрДлина(Строка(ИсходноеЧисло)) Цикл
Если Не (Число(Сред(Строка(ИсходноеЧисло),НомерЭлемента,1)) >= 0 И Число(Сред(Строка(ИсходноеЧисло),НомерЭлемента,1)) <= 5) Тогда
РезультатПроверки = Ложь;
КонецЕсли;
КонецЦикла;
//
Если РезультатПроверки Тогда
Вывод = "Особенное";
Иначе
Вывод = "Не особенное";
КонецЕсли;
Результат:
Особенное
Простая математическая задачка. В дальнейшем обязательно решим и другие задачи из этой серии!
Задача 5
Платформа: CodeWars
Название задачи: Century From Year (Век из года)
Ссылка на задачу: https://www.codewars.com/kata/5a3fe3dde1ce0e8ed6000097 (Нажмите на строку)
Сложность: 7 kyu (7 / 8)
Тэги: Фундаментальные, Математика
Оригинальное описание задачи:
Introduction
The first century spans from the year 1 up to and including the year 100, the second century - from the year 101 up to and including the year 200, etc.
Task
Given a year, return the century it is in.
Examples
1705 --> 18
1900 --> 19
1601 --> 17
2000 --> 20
2742 --> 28
Note: this kata uses strict construction as shown in the description and the examples, you can read more about it here
Пояснение:
Суть задачи заключается в том чтобы из данного нам года выяснить в какой век входит этот год.
Например:
1705-й год входит в 18-й век
1900-й год входит в 19-й век
1601-й год входит в 17-й век
2000-й год входит в 20-й век
2742-й год входит в 28-й век
Думаю всё просто, давайте попробуем решить:
Решение:
Для начала давайте разделим данный нам год на 100 и посмотрим есть ли там остаток. Если там остатка нет, значит век = исходный год / 100, если же есть остаток то снова же, делим без остатка и уже прибавляем единицу.
Например если дан год 1900 то 1900/100 = 19, это 19-й век. А вот если дан год 1901 то остаток 01, сбрасываем остаток и прибавляем 1, получаем 20-й век.
Вот какой в итоге получился код:
ИсходныйГод = 1901;
//
Если ИсходныйГод % 100 = 0 Тогда
Вывод = ИсходныйГод / 100;
Иначе
Вывод = Окр((ИсходныйГод/100))+1;
КонецЕсли;
Результат:
20
Простая и интересная получилась задачка!
Новое в конфигурации Algo1C:
Заключение:
Платформа: CodeWars
Название задачи: Polish alphabet (Польский алфавит)
Ссылка на задачу: https://www.codewars.com/kata/57ab2d6072292dbf7c000039 (Нажмите на строку)
Сложность: 8 kyu (8 / 8)
Тэги: Строки, Фундаментальные
Оригинальное описание задачи:
There are 32 letters in the Polish alphabet: 9 vowels and 23 consonants.
Your task is to change the letters with diacritics:
ą -> a, ć -> c, ę -> e, ł -> l, ń -> n, ó -> o, "7; -> s, %8; -> z, &0; -> z
For example:"Jędrzej Błądziński" --> "Jedrzej Bladzinski"
Пояснение:
В условиях задачи нам объясняют как устроен польский алфавит. Он содержит 9 гласных и 23 согласных буквы. Суть задачи в другом. Некоторое буквы в польском алфавите имеют Диакритические знаки, как например ą -> a.
От нас с вами требуется заменить буквы с диакритическими знаками на их аналоги из английского алфавита.
Более чем понятно, даавайте попробуем решить:
Решение:
Для начала соберем все буквы с диакритическими символами в одно соответствие, чтобы с ними было удобно в дальнейшем работать. Затем от нас требуется пройтись по всем символам исходной строки с помощью цикла и в каждой итерации проверять текущий символ на его наличие в нашем изначально созданном соответствии. Затем, при необходимости меняя текущий символ, собираем новую строку уже без букв с диакритическими символами. Остается только вывести результат и проверить работает ли всё!
АналогиБукв = Новый Соответствие;
АналогиБукв.Вставить("ą","a");
АналогиБукв.Вставить("ć","c");
АналогиБукв.Вставить("ę","e");
АналогиБукв.Вставить("ł","l");
АналогиБукв.Вставить("ń","n");
АналогиБукв.Вставить("ó","o");
АналогиБукв.Вставить(""7;","s");
АналогиБукв.Вставить("%8;","z");
АналогиБукв.Вставить("&0;","z");
//
ИсходнаяСтрока = "Jędrzej Błądziński";
Вывод = "";
Для НомерСимвола = 1 По СтрДлина(ИсходнаяСтрока) Цикл
ТекущийСимвол = Сред(ИсходнаяСтрока,НомерСимвола,1);
Если АналогиБукв.Получить(ТекущийСимвол) <> Неопределено Тогда
ТекущийСимвол = АналогиБукв.Получить(ТекущийСимвол);
КонецЕсли;
Вывод = Вывод + ТекущийСимвол;
КонецЦикла;
Результат:
Jedrzej Bladzinski
Как мы можем заметить, всё работает так как мы и ожидали. Познавательная задача про специальные символы в польском языке!
Платформа: CodeWars
Название задачи: Simple Maths Test (Простая математическая проверка)
Ссылка на задачу: https://www.codewars.com/kata/5507309481b8bd3b7e001638 (Нажмите на строку)
Сложность: 7 kyu (7 / 8)
Тэги: Алгоритмы, Математика
Оригинальное описание задачи:
Create a function which checks a number for three different properties.
- is the number prime?
- is the number even?
- is the number a multiple of 10?
Each should return either true or false, which should be given as an array. Remark: The Haskell variant uses
Examples:data Property
.number_property(7) # ==> [true, false, false] number_property(10) # ==> [false, true, true]
The number will always be an integer, either positive or negative. Note that negative numbers cannot be primes, but they can be multiples of 10:
number_property(-7) # ==> [false, false, false] number_property(-10) # ==> [false, true, true]
Пояснение:
Суть задачи заключается в том чтобы написать функцию, которая проверяет данное число на то является ли это число:
1) Простым
2) Четным
3) Кратным 10
Также в условиях задачи поясняется что исходное значение всегда обязательно будет числом а также может быть положительным или отрицательным.
В качестве результата мы будем возвращать массив с результатами, которые будут являться значениями типа Булево!
Звучит просто, давайте попробуем решить задачу:
Решение:
Перед началом решения давайте сначала создадим массив, в который будем собирать результаты проверок. Далее чтобы решить задачу давайте разделить её на этапы проверки.
Для начала проверим первое условие, является ли это число простым. Чтобы проверить это нам необходимо написать цикл, количество итераций которого будет равно количеству чисел между 2 и нашим числом исключая само число. Далее в каждой итерации получаем остаток от деления нашего числа на текущее число итерации и проверяем, есть ли остаток. Если это число делится на что-либо без остатка, значит это число не простое. Всё это обернем в условие для проверки на то, положительное это число или нет ибо отрицательное число не может быть простым!
Для проверки второго условия нам достаточно проверить есть ли остаток от деления нашего числа на 2. Если остатка нет, значит оно четное, все просто.
Для проверки третьего условия нам также достаточно проверить есть ли остаток от деления но уже не на 2 а на 10, так мы и выясним является ли это число кратным 10. В конечном итоге выводим собранный массив. Давайте проверим код:
ИсходноеЗначение = -7;
Вывод = Новый Массив;
Вывод.Добавить(Истина);
Вывод.Добавить(Истина);
Вывод.Добавить(Истина);
//
Если ИсходноеЗначение > 0 Тогда
Для ТекущееЧисло = 2 По ИсходноеЗначение - 1 Цикл
Если ИсходноеЗначение % ТекущееЧисло = 0 Тогда
Вывод[0] = Ложь;
КонецЕсли;
КонецЦикла;
Иначе
Вывод[0] = Ложь;
КонецЕсли;
//
Если ИсходноеЗначение % 2 <> 0 Тогда
Вывод[1] = Ложь;
КонецЕсли;
//
Если ИсходноеЗначение % 10 <> 0 Тогда
Вывод[2] = Ложь;
КонецЕсли;
//
Вывод = СтрСоединить(Вывод," ");
Результат:
Да Нет Нет
Как можем видеть, задача решена успешно, результат именно тот, какой мы и ожидали. Идём дальше!
Платформа: CodeWars
Название задачи: So Easy: Charge time calculation (Очень просто: Вычисление времени зарядки)
Ссылка на задачу: https://www.codewars.com/kata/57ea0ee4491a151fc5000acf (Нажмите на строку)
Сложность: 7 kyu (7 / 8)
Тэги: Головоломки
Оригинальное описание задачи:
To charge your mobile phone battery, do you know how much time it takes from 0% to 100%? It depends on your cell phone battery capacity and the power of the charger. A rough calculation method is:
0% --> 85% (fast charge) (battery capacity(mAh) * 85%) / power of the charger(mA) 85% --> 95% (decreasing charge) (battery capacity(mAh) * 10%) / (power of the charger(mA) * 50%) 95% --> 100% (trickle charge) (battery capacity(mAh) * 5%) / (power of the charger(mA) * 20%)
For example: Your battery capacity is 1000 mAh and you use a charger 500 mA, to charge your mobile phone battery from 0% to 100% needs time:
Complete function
calculateTime
that accepts two argumentsbattery
andcharger
, return how many hours can charge the battery from 0% to 100%. The result should be a number, round to 2 decimal places (In Haskell, no need to round it).0% --> 85% (fast charge) 1.7 (hour) 85% --> 95% (decreasing charge) 0.4 (hour) 95% --> 100% (trickle charge) 0.5 (hour) total times = 1.7 + 0.4 + 0.5 = 2.6 (hour)
Пояснение:
Цель задачи заключается в том чтобы написать код, который вычисляет время зарядки вашего телефона, в зависимости от его характеристики, такой как объем батареи а также в зависимости от характеристики вашего зарядного устройства, такой как его мощность. Для расчета общего времени нам необходимо учесть 3 промежуточных времени:
1) Время зарядки от 0 до 85
2) Время зарядки от 85 до 95
3) Время зарядки от 95 до 100
Почему 3? Это связано с особенностью типа батарей, которые сейчас везде используются. Если интересно, можете посмотреть отрывок с Илоном Маском на подкасте Джо Рогана (Нажмите на строку), где он привёл интересную аналогию и объяснил, почему так происходит. Не суть важно, идём дальше. Вычислять время будем по заранее данной формуле, которая требует от нас умножить объем батареи на текущий порог (85, 10, 5) и разделить это на произведения мощности зарядного устройства на процент эффективности зарядки (для второго и третьего этапов зярядки).
Далее суммируем все три результата времени и выводим единым числом!
Думаю всем всё понятно, давайте попробуем решить:
Решение:
Решение будет максимально простым. Всё что от нас требуется так это повторить одну и ту же формулу 3 раза и каждый раз увеличивать результат Вывода.
В итоге получился вот такой код:
ОбъемБатареи = 1000;
МощностьЗарядногоУстройства = 500;
Вывод = 0;
//
Вывод = Вывод + ((ОбъемБатареи * 0.85)/(МощностьЗарядногоУстройства));
Вывод = Вывод + ((ОбъемБатареи * 0.10)/(МощностьЗарядногоУстройства * 0.50));
Вывод = Вывод + ((ОбъемБатареи * 0.05)/(МощностьЗарядногоУстройства * 0.20));
Результат:
2.6
Интересная и познавательная задача с простым решением!
Платформа: CodeWars
Название задачи: Special Number (Special Numbers Series #5) (Особенное число: Серия задач про особенные числа, пятая задача)
Ссылка на задачу: https://www.codewars.com/kata/5a55f04be6be383a50000187 (Нажмите на строку)
Сложность: 7 kyu (7 / 8)
Тэги: Фундаментальные, Математика
Оригинальное описание задачи:
Definition
A number is a Special Number if its digits only consists of 0, 1, 2, 3, 4 or 5
Given a number, determine if it is a special number or not.
Notes
The number passed will be positive (N > 0)
All single-digit numbers within the interval [1:5] are considered special numbers
Example:2 ==> return "Special!!" Explanation: It's a single-digit number within the interval [1:5] 9 ==> return "NOT!!" Explanation: Although, it's a single-digit number but Outside the interval [1:5] 23 ==> return "Special!!" Explanation: All the number's digits formed from the interval [0:5] digits 39 ==> return "NOT!!" Explanation: Although there is a digit (3) within the interval, the second digit is not (Must be ALL the number's Digits) 59 ==> return "NOT!!" Explanation: Although there is a digit (5) within the interval, the second digit is not (Must be ALL the number's Digits) 513 ==> return "Special!!" 709 ==> return "NOT!!"
Пояснение:
Суть задачи заключается в том чтобы выяснить является ли данном нам число "Особенным". Что это значит? По условию задачи нам дано что любое число, которое составлено лишь с использованием чисел от 0 до 5, является "Особенным".
Например:
Число 2 особенное, соответствует условиям
Число 9 не является особенным
Число 23 является особенным
И так далее...
Суть думаю ясна. Давайте попробуем решить:
Решение:
Для начала напишем цикл для перебора всех цифр исходного числа. Затем в каждой итерации будем проверять входит ли текущая цифра в нужным нам инвервал и затем, в зависимости от этого, поменяем результат. Далее уже в зависимости от результата, выведем строку с пояснением. Вот какой получился код:
ИсходноеЧисло = 23;
РезультатПроверки = Истина;
//
Для НомерЭлемента = 1 По СтрДлина(Строка(ИсходноеЧисло)) Цикл
Если Не (Число(Сред(Строка(ИсходноеЧисло),НомерЭлемента,1)) >= 0 И Число(Сред(Строка(ИсходноеЧисло),НомерЭлемента,1)) <= 5) Тогда
РезультатПроверки = Ложь;
КонецЕсли;
КонецЦикла;
//
Если РезультатПроверки Тогда
Вывод = "Особенное";
Иначе
Вывод = "Не особенное";
КонецЕсли;
Результат:
Особенное
Простая математическая задачка. В дальнейшем обязательно решим и другие задачи из этой серии!
Платформа: CodeWars
Название задачи: Century From Year (Век из года)
Ссылка на задачу: https://www.codewars.com/kata/5a3fe3dde1ce0e8ed6000097 (Нажмите на строку)
Сложность: 7 kyu (7 / 8)
Тэги: Фундаментальные, Математика
Оригинальное описание задачи:
Introduction
The first century spans from the year 1 up to and including the year 100, the second century - from the year 101 up to and including the year 200, etc.
Task
Given a year, return the century it is in.
Examples
Note: this kata uses strict construction as shown in the description and the examples, you can read more about it here1705 --> 18 1900 --> 19 1601 --> 17 2000 --> 20 2742 --> 28
Пояснение:
Суть задачи заключается в том чтобы из данного нам года выяснить в какой век входит этот год.
Например:
1705-й год входит в 18-й век
1900-й год входит в 19-й век
1601-й год входит в 17-й век
2000-й год входит в 20-й век
2742-й год входит в 28-й век
Думаю всё просто, давайте попробуем решить:
Решение:
Для начала давайте разделим данный нам год на 100 и посмотрим есть ли там остаток. Если там остатка нет, значит век = исходный год / 100, если же есть остаток то снова же, делим без остатка и уже прибавляем единицу.
Например если дан год 1900 то 1900/100 = 19, это 19-й век. А вот если дан год 1901 то остаток 01, сбрасываем остаток и прибавляем 1, получаем 20-й век.
Вот какой в итоге получился код:
ИсходныйГод = 1901;
//
Если ИсходныйГод % 100 = 0 Тогда
Вывод = ИсходныйГод / 100;
Иначе
Вывод = Окр((ИсходныйГод/100))+1;
КонецЕсли;
Результат:
20
Простая и интересная получилась задачка!
Ну что ж, пока на этом всё, надеюсь, статья была увлекательной для вас, благодарю за внимание.
Подключайтесь к решению алгоритмических задач вместе со мной, делитесь вашим мнением и решениями в комментариях! Увидимся в новой статье!