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

29.01.25

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

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

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

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


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

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

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

 

Дисклеймер:

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


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

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

См. также

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

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

1 стартмани

30.01.2024    4944    stopa85    12    

39

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

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

19.10.2023    9949    user1959478    54    

37

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

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

2 стартмани

29.09.2023    4788    maksa2005    8    

26

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

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

1 стартмани

09.06.2023    12512    8    SpaceOfMyHead    20    

62

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

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

03.04.2023    6038    RustIG    9    

25

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

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

23.11.2022    5148    gzharkoj    14    

25

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

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

1 стартмани

21.03.2022    9402    7    kalyaka    11    

44
Оставьте свое сообщение