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

04.02.25

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

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

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

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


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

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

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

Дисклеймер:

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


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

 
 Задача 1

 Платформа: CodeWars

 Название задачи: Battle of the characters (Easy) (Битва символов (Легко))

 Ссылка на задачу: https://www.codewars.com/kata/595519279be6c575b5000016 (Нажмите на строку)

 Сложность: 7 (7 / 8)

 Уже решили (На момент написания статьи): 1,134 из 4,078

 ТэгиАлгоритмы

 Оригинальное описание задачи:

Groups of characters decided to make a battle. Help them to figure out which group is more powerful. Create a function that will accept 2 strings and return the one who's stronger.

Rules:

  • Each character have its own power: A = 1, B = 2, ... Y = 25, Z = 26
  • Strings will consist of uppercase letters only
  • Only two groups to a fight.
  • Group whose total power (A + B + C + ...) is bigger wins.
  • If the powers are equal, it's a tie.

Examples:

      * "ONE", "TWO"  -> "TWO"`
      * "ONE", "NEO"  -> "Tie!"

Пояснение задачи:

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

Правила:
Каждый символ имеет свою силу: A = 1, B = 2, ... Y = 25, Z = 26
Строки всегда будут в верхнем регистре
Только 2 группы символов могут участвовать в схватке
Группа, чья общая сила больше (A + B + C ...), побеждает
Если сила строк одинакова, это засчитывается за ничью

Решение задачи:

 
 (Нажмите на спойлер чтобы увидеть решение)
 
 Задача 2

 Платформа: CodeWars

 Название задачи: You Got Change? (У тебя есть сдача?)

 Ссылка на задачу: https://www.codewars.com/kata/5966f6343c0702d1dc00004c (Нажмите на строку)

 Сложность: 7 (7 / 8)

 Уже решили (На момент написания статьи): 1,190 из 3,100

 ТэгиФундаментальные

 Оригинальное описание задачи:

Create a function that will take any amount of money and break it down to the smallest number of bills as possible. Only integer amounts will be input, NO floats. This function should output a sequence, where each element in the array represents the amount of a certain bill type. The array will be set up in this manner:

array[0] ---> represents $1 bills

array[1] ---> represents $5 bills

array[2] ---> represents $10 bills

array[3] ---> represents $20 bills

array[4] ---> represents $50 bills

array[5] ---> represents $100 bills

In the case below, we broke up $365 into 1 $5 bill, 1 $10 bill, 1 $50 bill, and 3 $100 bills:

365 =>  [0,1,1,0,1,3]

In this next case, we broke $217 into 2 $1 bills, 1 $5 bill, 1 $10 bill, and 2 $100 bills:

217 => [2,1,1,0,0,2]

Пояснение задачи:

Цель задачи заключается в том чтобы написать код, который будет принимать какую-то сумму и возвращать максимально возможное количество купюр. Также по условию задачи уточняется что исходная сумма будет числом без дробной части.

В качестве результата нам с вами необходимо будет вернть массив, где каждый элемент будет отражать количество купюр по их типам:
array[0] ---> represents $1 bills
array[1] ---> represents $5 bills
array[2] ---> represents $10 bills
array[3] ---> represents $20 bills
array[4] ---> represents $50 bills
array[5] ---> represents $100 bills

Например сумму в 365 долларов мы можем собрать из следующего количества купюр:
365 => [0,1,1,0,1,3]
Точно также с суммой в 217 долларов: 217 => [2,1,1,0,0,2]

Решение задачи:

 
 (Нажмите на спойлер чтобы увидеть решение)
 
 Задача 3

 Платформа: CodeWars

 Название задачи: Ideal electron distribution (Идеальное распределение электронов)

 Ссылка на задачу: https://www.codewars.com/kata/59175441e76dc9f9bc00000f (Нажмите на строку)

 Сложность: 6 (6 / 8)

 Уже решили (На момент написания статьи): 538 из 1,391

 ТэгиМассивы, Списки, Алгоритмы

 Оригинальное описание задачи:

You are a khmmadkhm scientist and you decided to play with electron distribution among atom's shells. You know that basic idea of electron distribution is that electrons should fill a shell until it's holding the maximum number of electrons.


Rules:

  • Maximum number of electrons in a shell is distributed with a rule of 2n^2 (n being position of a shell).
  • For example, maximum number of electrons in 3rd shell is 2*3^2 = 18.
  • Electrons should fill the lowest level shell first.
  • If the electrons have completely filled the lowest level shell, the other unoccupied electrons will fill the higher level shell and so on.

Ex.:    atomicNumber(1); should return [1]
        atomicNumber(10); should return [2, 8]
        atomicNumber(11); should return [2, 8, 1]
        atomicNumber(47); should return [2, 8, 18, 19]

Пояснение задачи:

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

Правила следующие:
- Максимальная вместимость оболочки определяется формулой 2n^2, где n – номер оболочки.
- Электроны заполняют сначала самые нижние оболочки, прежде чем переходить к более высоким.
- Если самая низкая оболочка заполнена полностью, оставшиеся электроны переходят на следующую оболочку и т.д. Например:
Если количество электронов равно 1 то в качестве результата мы должны вернуть массив [1]
Точно по такому же принципу получим:
10 ---> [2, 8]
11 ---> [2, 8, 1]
47 ---> [2, 8, 18, 19]

Решение задачи:

 
 (Нажмите на спойлер чтобы увидеть решение)
 
 Задача 4

 Платформа: CodeWars

 Название задачи: Ball Upwards (Мяч вверх)

 Ссылка на задачу: https://www.codewars.com/kata/566be96bb3174e155300001b (Нажмите на строку)

 Сложность: 6 (6 / 8)

 Уже решили (На момент написания статьи): 2,192 из 8,163

 ТэгиФундаментальные

 Оригинальное описание задачи:

You throw a ball vertically upwards with an initial speed v (in km per hour). The height h of the ball at each time t is given by h = v*t - 0.5*g*t*t where g is Earth's gravity (g ~ 9.81 m/s**2). A device is recording at every tenth of second the height of the ball. For example with v = 15 km/h the device gets something of the following form: (0, 0.0), (1, 0.367...), (2, 0.637...), (3, 0.808...), (4, 0.881..) ... where the first number is the time in tenth of second and the second number the height in meter.

Task

Write a function max_ball with parameter v (in km per hour) that returns the time in tenth of second of the maximum height recorded by the device.

Examples:

max_ball(15) should return 4

max_ball(25) should return 7

Notes

  • Remember to convert the velocity from km/h to m/s or from m/s in km/h when necessary.
  • The maximum height recorded by the device is not necessarily the maximum height reached by the ball.

Пояснение задачи:

Наша с вами задача состоит в том, чтобы определить момент времени (в десятых долях секунды), когда устройство зафиксирует максимальную высоту подброшенного вверх мяча.

Высота мяча описывается уравнением h=v⋅t−0.5⋅g⋅t2h=v⋅t−0.5⋅g⋅t2
где vv — начальная скорость мяча (в км/ч), t — время (в секундах)
g — ускорение свободного падения (~9.81 м/с²).

По условию задачи также необходимо учитывать, что начальная скорость задается в км/ч, а высота измеряется в метрах.

Например: Если исходное значение равно 15 то результатом вычисления должна быть 4
Точно также и с 25, где ответом будет 7

Решение задачи:

 
 (Нажмите на спойлер чтобы увидеть решение)
 
 Задача 5

 Платформа: CodeWars

 Название задачи: The furthest distance of index (Самая большая дистанция между индексами)

 Ссылка на задачу: https://www.codewars.com/kata/581963edc929ba19e7000148 (Нажмите на строку)

 Сложность: 6 (6 / 8)

 Уже решили (На момент написания статьи): 82 из 212

 ТэгиГоловоломки, Фундаментальные

 Оригинальное описание задачи:

"When no more interesting kata can be resolved, I just choose to create the new kata, to solve their own, to enjoy the process" -myjinxin2015 said

Description:

Give you an array arr that contains some numbers(arr.length>=2), and give you a positive integer k. Find such two numbers m,n: m and n at least a difference of k, and their index is the most distant.

Returns their distance of index. If no such number found, return -1.

Some Examples

furthestDistance([8,7,1,9],5) === 2

The difference of 8 and 1, 1 and 9 is more than 5;
The index distance of (8,1) is 2;
The index distance of (1,9) is 1;
So 2 is the furthest distance of index.

furthestDistance([8,7,1,9],100) === -1
furthestDistance([1,2,3,4],1) === 3 (1 and 4)
furthestDistance([3,4,1,2],2) === 2 (3 and 1 or 4 and 2)

Пояснение задачи:

Суть задачи заключается в поиске такой пары чисел в массиве, разница между которыми не меньше заданного значения k, при этом их индексы максимально удалены друг от друга.
Нужно вернуть расстояние между этими индексами. Если такая пара не найдена, возвращается −1.

Например:
Если дан массив [8,7,1,9] и k=5, то:
Разница между 8 и 1 больше 5, и их индексы имеют расстояние 2.
Разница между 1 и 9 также больше 5, но их индексы имеют расстояние всего 1.
Поэтому результатом будет максимальное расстояние - 2.

Решение задачи:

 
 (Нажмите на спойлер чтобы увидеть решение)
 
 Новое в конфигурации Algo1C:

Заключение:

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

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

Увидимся в новой статье!

Алгоритмы Математика CodeWars LeetCode Algo1C Задачи

См. также

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

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

1 стартмани

30.01.2024    5080    stopa85    12    

39

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

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

19.10.2023    10115    user1959478    54    

37

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

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

2 стартмани

29.09.2023    4924    maksa2005    8    

26

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

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

1 стартмани

09.06.2023    12664    8    SpaceOfMyHead    20    

62

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

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

03.04.2023    6165    RustIG    9    

25

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

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

23.11.2022    5283    gzharkoj    14    

25

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

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

1 стартмани

21.03.2022    9437    7    kalyaka    11    

44
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Lemmonbri 147 04.02.25 10:43 Сейчас в теме
Можете пояснить, какое отличие вашей конфигурации от 1с турниры?
2. TheNabiulla 92 05.02.25 02:13 Сейчас в теме
(1)
и от 1с турниры?
По идее одно и то же, просто пару своих идей хотел реализовать. Принципиальной разницы нет
Оставьте свое сообщение