Algo1C: Решение алгоритмических задач на базе 1С:Предприятие [Часть #2]

23.09.24

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

Решаем новые задачи из LeetCode и CodeWars!

Йо, меня зовут Наби. Заранее благодарю за чтение и желаю продуктивно провести время! Если после прочтения возникнут вопросы, пожелания или предложения, то буду рад ознакомиться со всем в комментариях!


Предисловие:

В предыдущей части мы научились на практике применять алгоритм "Sliding Window", работать с отсортированными массивами, менять обработку данных в процессе итерации а также вычислять дистанцию между объектами с учётом их габаритов. В этой части вас ждут еще более интересные алгоритмические задачи!

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


Новое в конфигурации Algo1C (Последние 5 версий):

Актуальную версию конфигурации вы можете загрузить здесь (Нажмите на строку)

- 0.4 : Исправлена ошибка при выводе содержимого исключения

- 0.3 : Добавлена возможность сохранять и загружать задачи; Внесены небольшие изменения в интерфейс

- 0.2 : Исправлена ошибка при выводе результата (Отдельная благодарность SAShikutkin)

 


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

 
 Задача 1

 Платформа: CodeWars

 Название задачи: Draw stairs

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

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

Given a number n, draw stairs using the letter "I", n tall and n wide, with the tallest in the top left.

For example n = 3 result in:

"I\n I\n  I"

or printed:

I
 I
  I

Another example, a 7-step stairs should be drawn like this:

I
 I
  I
   I
    I
     I
      I

Пояснение:

Задача из разряда ASCII Art, когда тебе нужно с помощью элементарных символов рисовать интересные картинки. Конкретно в этой задаче что-то грандиозное рисовать не нужно, нужно просто нарисовать лестницу с помощью букв "I". В качестве входных данных мы будем получать количество ступеней!


Решение:

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

Давайте попробуем описать этот алгоритм 1Совским кодом!

КоличествоСтупеней = 10;
//
Вывод = "";
КоличествоПробелов = 1;
Для НомерСтроки = 1 По КоличествоСтупеней+1 Цикл
	Вывод = Вывод + "I";
	Вывод = Вывод + Символы.ПС;
	//
	Для НомерСтроки = 1 По КоличествоПробелов Цикл
		Вывод = Вывод + " ";
	КонецЦикла;
	//
	КоличествоПробелов = КоличествоПробелов + 1;
КонецЦикла;

Заключение:

Как видим, лестница успешно нарисована. На данный момент это первая задача по ASCII Art, в будущем их будет больше, на CodeWars таких задач сотни!

 
 Задача 2
 
 Задача 3
 
 Задача 4
 
 Задача 5

Заключение:

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

Алгоритмы Математика LeetCode CodeWars

См. также

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

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

1 стартмани

30.01.2024    2742    stopa85    12    

36

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

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

19.10.2023    6663    user1959478    50    

36

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

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

2 стартмани

29.09.2023    2675    maksa2005    8    

25

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

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

1 стартмани

09.06.2023    10211    7    SpaceOfMyHead    18    

61

Математика и алгоритмы Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

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

03.04.2023    3946    RustIG    9    

25

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

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

23.11.2022    3061    gzharkoj    14    

24

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

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

1 стартмани

21.03.2022    8881    7    kalyaka    11    

44
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. partizand 136 23.09.24 11:25 Сейчас в теме
В первой задаче нужно использовать массив и СтрСоединить.
Иначе затратная операция по прибавлению строк.
Раз уж такие задачи решаете.
Olenevod; TheNabiulla; +2 Ответить
2. TheNabiulla 77 23.09.24 11:34 Сейчас в теме
(1) Интересное решение, благодарю за подсказку!
3. starik-2005 3081 23.09.24 14:53 Сейчас в теме
Йо, меня зовут Наби.
RКогда-то давно я работал в конторе с таким названием. Шутили, что в названии не хватает одной буквы...
TheNabiulla; +1 Ответить
7. TheNabiulla 77 23.09.24 19:07 Сейчас в теме
4. starik-2005 3081 23.09.24 14:54 Сейчас в теме
(1)
затратная операция по прибавлению строк
Есть мнение, что ее оптимизировали. Ну и не "прибавлению", а конкатенации...
TheNabiulla; +1 Ответить
5. starik-2005 3081 23.09.24 14:59 Сейчас в теме
Функция Лестница(КоличествоУровней, Пробелы = "")

  Если КоличествоУровней > 0 Тогда

    Сообщить(Пробелы + "I");
    Лестница(КоличествоУровней-1, Пробелы + " ")

  КонецЕсли;

КонецФункции;
Показать
Лестница(10);
TheNabiulla; +1 Ответить
8. TheNabiulla 77 23.09.24 19:09 Сейчас в теме
(5) С рекурсией быстрее будет?
6. starik-2005 3081 23.09.24 16:04 Сейчас в теме
Функция Пифагорий(А, Б, Ц)
  Если Макс(А, Б, Ц) * Макс(А, Б, Ц) = Мин(А, Б, Ц) * Мин(А, Б, Ц) + Макс(Мин(А, Б), Мин(Б, Ц)) * Макс(Мин(А, Б), Мин(Б, Ц)) Тогда
    Возврат "Йо"
  Иначе
    Возврат "Нихт"
  КонецЕсли;
КонецФункции
TheNabiulla; +1 Ответить
9. TheNabiulla 77 23.09.24 19:13 Сейчас в теме
Оставьте свое сообщение