Йо, меня зовут Наби. Заранее благодарю за чтение и желаю продуктивно провести время! Если после прочтения возникнут вопросы, пожелания или предложения, то буду рад ознакомиться со всем в комментариях!
Предисловие:
В предыдущей части мы впервые встретились с задачами на тему ASCII Art, научились вручную создавать CSV файл из исходного массива, столкнулись впервые с чисто математическими задачами и попробовали придумать аналог встроенной 1Совской функции "СтрЧислоВхождений". В этой части вас ждут еще более интересные алгоритмические задачи!
Перед началом чтения решения задачи, хочу призвать каждого к самостоятельному решению задачи, чтобы после вы могли сравнить своё решение с моим и обсудить это в комментариях. Буду рад послушать ваше мнение! Давайте, приступим!
Новое в конфигурации Algo1C (Последние 5 версий):
Актуальную версию конфигурации вы можете загрузить здесь (Нажмите на строку)
- 0.5 : Добавлена возможность выбирать контекст исполнения кода, например: НаСервере или НаКлиенте
- 0.4 : Исправлена ошибка при выводе содержимого исключения
- 0.3 : Добавлена возможность сохранять и загружать задачи; Внесены небольшие изменения в интерфейс
- 0.2 : Исправлена ошибка при выводе результата (Отдельная благодарность SAShikutkin)
Решение задач:
Задача 1
Платформа: CodeWars
Название задачи: Sum without highest and lowest number
Ссылка на задачу: https://www.codewars.com/kata/576b93db1129fcf2200001e6 (Нажмите на строку)
Оригинальное описание задачи:
Sum all the numbers of a given array ( cq. list ), except the highest and the lowest element ( by value, not by index! ).
The highest or lowest element respectively is a single element at each edge, even if there are more than one with the same value.
Mind the input validation.
Example
{ 6, 2, 1, 8, 10 } => 16
{ 1, 1, 11, 2, 3 } => 6
Input validation
If an empty value ( null, None, Nothing, nil etc. ) is given instead of an array, or the given array is an empty list or a list with only 1 element, return 0.
Пояснение:
По условию задачи нам дан числовой массив из которого нам нужно вычислить сумму всех элементов с одним исключением. Нам нужно избавиться от самого большого и маленького значений. Может быть такое что в массив входят два одинаковых числа, которые могут быть самыми большими или маленькими. В таком случае это число из суммы вычтем только один раз!
Решение:
Начнём с того что нам нужно вычислить самое большое и маленькое значения. Для этого достаточно будет написать только 1 цикл, в котором мы будем одновременно проверять текущее значение на один из вышесказанных признаков. Затем мы напишем новый цикл, будем перебирать все элементы массива суммируя их по пути. Ну и затем попросту вычтем те два числа, что мы вычислили ранее!
Давайте перейдем в 1С:
ИсходныйМассив = Новый Массив;
ИсходныйМассив.Добавить(1);
ИсходныйМассив.Добавить(1);
ИсходныйМассив.Добавить(11);
ИсходныйМассив.Добавить(2);
ИсходныйМассив.Добавить(3);
//
СамоеБольшоеЧисло = Неопределено;
СамоеМаленькоеЧисло = Неопределено;
//
Для Каждого Стр Из ИсходныйМассив Цикл
Если СамоеБольшоеЧисло = Неопределено Или СамоеБольшоеЧисло < Стр Тогда
СамоеБольшоеЧисло = Стр;
КонецЕсли;
//
Если СамоеМаленькоеЧисло = Неопределено Или СамоеМаленькоеЧисло > Стр Тогда
СамоеМаленькоеЧисло = Стр;
КонецЕсли;
КонецЦикла;
//
Вывод = 0;
Для Каждого Стр Из ИсходныйМассив Цикл
Вывод = Вывод + Стр;
КонецЦикла;
Вывод = Вывод - (СамоеБольшоеЧисло+СамоеМаленькоеЧисло);
Заключение:
Как видим, сумма получена, ненужные значения вычтены, проверки успешно проходятся. Задача была весьма занимательная. Давайте пойдём дальше!
Задача 2
Задача 3
Задача 4
Задача 5
Заключение:
Платформа: CodeWars
Название задачи: Sum without highest and lowest number
Ссылка на задачу: https://www.codewars.com/kata/576b93db1129fcf2200001e6 (Нажмите на строку)
Оригинальное описание задачи:
Sum all the numbers of a given array ( cq. list ), except the highest and the lowest element ( by value, not by index! ).
The highest or lowest element respectively is a single element at each edge, even if there are more than one with the same value.
Mind the input validation.Example { 6, 2, 1, 8, 10 } => 16 { 1, 1, 11, 2, 3 } => 6
Input validation
If an empty value ( null, None, Nothing, nil etc. ) is given instead of an array, or the given array is an empty list or a list with only 1 element, return 0.
Пояснение:
По условию задачи нам дан числовой массив из которого нам нужно вычислить сумму всех элементов с одним исключением. Нам нужно избавиться от самого большого и маленького значений. Может быть такое что в массив входят два одинаковых числа, которые могут быть самыми большими или маленькими. В таком случае это число из суммы вычтем только один раз!
Решение:
Начнём с того что нам нужно вычислить самое большое и маленькое значения. Для этого достаточно будет написать только 1 цикл, в котором мы будем одновременно проверять текущее значение на один из вышесказанных признаков. Затем мы напишем новый цикл, будем перебирать все элементы массива суммируя их по пути. Ну и затем попросту вычтем те два числа, что мы вычислили ранее!
Давайте перейдем в 1С:
ИсходныйМассив = Новый Массив;
ИсходныйМассив.Добавить(1);
ИсходныйМассив.Добавить(1);
ИсходныйМассив.Добавить(11);
ИсходныйМассив.Добавить(2);
ИсходныйМассив.Добавить(3);
//
СамоеБольшоеЧисло = Неопределено;
СамоеМаленькоеЧисло = Неопределено;
//
Для Каждого Стр Из ИсходныйМассив Цикл
Если СамоеБольшоеЧисло = Неопределено Или СамоеБольшоеЧисло < Стр Тогда
СамоеБольшоеЧисло = Стр;
КонецЕсли;
//
Если СамоеМаленькоеЧисло = Неопределено Или СамоеМаленькоеЧисло > Стр Тогда
СамоеМаленькоеЧисло = Стр;
КонецЕсли;
КонецЦикла;
//
Вывод = 0;
Для Каждого Стр Из ИсходныйМассив Цикл
Вывод = Вывод + Стр;
КонецЦикла;
Вывод = Вывод - (СамоеБольшоеЧисло+СамоеМаленькоеЧисло);
Заключение:
Как видим, сумма получена, ненужные значения вычтены, проверки успешно проходятся. Задача была весьма занимательная. Давайте пойдём дальше!
Ну что ж, пока на этом всё, надеюсь статья была увлекательной для вас, благодарю за внимание. Подключайтесь к решению алгоритмических задач вместе со мной, делитесь вашим мнением и решениями в комментариях! Увидимся в новой статье!