Решение алгоритмических задач на базе 1С:Предприятие | Новый сборник задач (03.02.2025)

03.02.25

Разработка - Математика и алгоритмы

Решаем новые задачи по программированию на 1С!

Добро пожаловать на новый выпуск рубрики "Algo1C", в которой я стараюсь регулярно находить новые задачи по программированию и делиться их решениями с вами!

Цель рубрики заключается в тренировке практик по применению различных алгоритмов, в поддержании навыка "Писать код" в тонусе, ну и, само собой, немного поразвлечься!


Что было раньше:

В предыдущей части (нажмите на строку) мы решили:

В этой части вас ждут еще более интересные алгоритмические задачи. Давайте приступим!

Дисклеймер:

Перед началом просмотра решения задачи хочу призвать каждого к самостоятельному решению самой задачи, для того чтобы после вы могли сравнить своё решение с решением из этой статьи и обсудить это в комментариях, буду рад послушать ваше мнение. При этом большая просьба сохранять позитивный настрой и доброжелательность!


Решение новых задач:

 
 Задача 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 LeetCode Algo1C Задачи

См. также

Математика и алгоритмы Программист Платформа 1C v8.2 1C:Бухгалтерия Россия Абонемент ($m)

На написание данной работы меня вдохновила работа @glassman «Переход на ClickHouse для анализа метрик». Автор анализирует большой объем данных, много миллионов строк, и убедительно доказывает, что ClickHouse справляется лучше PostgreSQL. Я же покажу как можно сократить объем данных в 49.9 раз при этом: 1. Сохранить значения локальных экстремумов 2. Отклонения от реальных значений имеют наперед заданную допустимую погрешность.

1 стартмани

30.01.2024    5071    stopa85    12    

39

Математика и алгоритмы Бесплатно (free)

Разработка алгоритма, построенного на модели симплекс-метода, для нахождения оптимального раскроя.

19.10.2023    10110    user1959478    54    

37

Математика и алгоритмы Разное Платформа 1С v8.3 1C:Бухгалтерия Россия Абонемент ($m)

Расширение (+ обработка) представляют собою математический тренажер. Ваш ребенок сможет проверить свои знание на математические вычисление до 100.

2 стартмани

29.09.2023    4921    maksa2005    8    

26

Математика и алгоритмы Инструментарий разработчика Программист Платформа 1С v8.3 Мобильная платформа Россия Абонемент ($m)

Что ж... лучше поздно, чем никогда. Подсистема 1С для работы с регулярными выражениями: разбор выражения, проверка на соответствие шаблону, поиск вхождений в тексте.

1 стартмани

09.06.2023    12663    8    SpaceOfMyHead    20    

62

Математика и алгоритмы Программист Платформа 1С v8.3 1C:Бухгалтерия Бесплатно (free)

Три задачи - три идеи - три решения. Мало кода, много смысла. Мини-статья.

03.04.2023    6161    RustIG    9    

25

Механизмы платформы 1С Математика и алгоритмы Программист Платформа 1С v8.3 Россия Бесплатно (free)

В статье анализируются средства платформы для решения системы линейных уравнений в 1С. Приводятся доводы в пользу некорректной работы встроенных алгоритмов, а значит потенциально некорректного расчета себестоимости в типовых конфигурациях.

23.11.2022    5279    gzharkoj    14    

25

Математика и алгоритмы Программист Платформа 1С v8.3 Россия Абонемент ($m)

Обычно под распределением понимают определение сумм пропорционально коэффициентам. Предлагаю включить сюда также распределение по порядку (FIFO, LIFO) и повысить уровень размерности до 2-х. 1-ое означает, что распределение может быть не только пропорциональным, но и по порядку, а 2-ое - это вариант реализации матричного распределения: по строкам и столбцам. Возможно вас заинтересует также необычное решение этой задачи через создание DSL на базе реализации текучего интерфейса

1 стартмани

21.03.2022    9437    7    kalyaka    11    

44
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. dmpas 418 03.02.25 10:17 Сейчас в теме
Сложность: 7 (7 / 8)

Серьёзно?..

Завязывайте с этим CodeWars и ай-да на leetcode.
RocKeR_13; +1 Ответить
4. RocKeR_13 1379 03.02.25 11:00 Сейчас в теме
(1) Градация, видимо, для уроков информатики 5 класса средней школы)
2. dhurricane 03.02.25 10:47 Сейчас в теме
В первой задаче ответы на 1С и на JS не совпадают. В коде 1С ошибки. Вы бы хоть как-то тестировали решения на 1С прежде, чем публиковать их. :)
paybaseme; +1 Ответить
3. SlavaKron 03.02.25 10:50 Сейчас в теме
Крис = Цел( ( ИсходноеКоличествоМух / 2 * 0.5 ) * ИсходноеКоличествоМух );
Кажется, это неверно.
Для ИсходноеКоличествоМух = 5, Крис = 6. Должно быть 15 и код примерно такой
Крис = (ИсходноеКоличествоМух * ИсходноеКоличествоМух + ИсходноеКоличествоМух) / 2;
5. RocKeR_13 1379 03.02.25 11:06 Сейчас в теме
И снова повторю свой вопрос: с какой целью и для какой целевой аудитории это публикуется? К тому же с ошибками в реализации... Эти задания не годятся даже на отборы для участия в школьных олимпиадах: они простые, скучные и не представляют практического интереса.
Natalia29; SerVer1C; +2 Ответить
6. SerVer1C 864 03.02.25 13:16 Сейчас в теме
Оставьте свое сообщение