Практическое применение операции копирования массива

Публикация № 1490679 02.08.21

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

Спортивное программирование

Решение задачи https://projecteuler.net/problem=250 из Project Euler средствами 1C.

При обсуждении методов копирования массива возник вопрос о примере практического применения такого механизма. Я использовал данную возможность при решении некоторых задач Project Euler. Так как  участники обсуждения проявили интерес к данной теме, то я счел возможным привести свой алгоритм. Условие задачи следующее. Дан ряд чисел и нужно найти количество подмножеств исходного множества, для которых выполняется условие, что сумма чисел из подмножества делится на заданное число. Во всех задачах на делимость нужно оперировать не с числом, а с остатком от деления. Потому первый шаг решения состоит в поиске остатков от деления исходных чисел на заданное. Все остатки от деления на число n лежат в диапазоне [0,...,n-1]. Поэтому создадим массив размерностью n, индекс массива - остаток от деления, значение - количество  чисел из первоначального множества, которые дают при делении такой остаток. Исходные числа имеют вид x^y поэтому нам понадобится функция для быстрого возведения в степень по модулю.

Функция БыстраяСтепень(знач x,знач y, знач mode=1) экспорт
	остаток=y;произведение=1;
	пока (остаток<>0) цикл
		цифра=остаток%2;
		если  цифра=1 тогда
			если mode=1 тогда
			 произведение=произведение*x
		    иначе 
			 произведение=(произведение*x)%mode
			конецесли; 
		конецесли;;	
		если mode=1 тогда
		 x=x*x;
	    иначе
		 x=(x*x)%mode;  
		конецесли;; 
		остаток=(остаток-цифра)/2
	enddo;	
	
	возврат произведение;
КонецФункции

Теперь мы можем заполнить массив с информацией о количестве остатков исходного множества.

массив=новый  массив(n);
для i=1 по верх цикл
		j=БыстраяСтепень(i%n,i,n);
		если массив[j]=неопределено тогда
			массив[j]=1;
		иначе	
			массив[j]=массив[j]+1;
		конецесли;	
конеццикла;	

И наконец сама функция для поиска решения.  У нас есть массив счетчик, в котором мы собираем количество подмножеств исходного множества, для которых сумма равна индексу массива. При переходе к следующему числу из исходного множества мы сохраняем счетчик в буфер и на этом шаге используем копирование массива.

Функция ПроектЭйлер250(верх,n) экспорт
	
		
	массив=новый  массив(n+1);
	для i=1 по верх цикл
		j=БыстраяСтепень(i%n,i,n);
		если массив[j]=неопределено тогда
			массив[j]=1;
		иначе	
			массив[j]=массив[j]+1;
		конецесли;;	
	конеццикла;	
	
	mode=БыстраяСтепень(10,16);
	
	
	счетчик=новый  массив(n);
	для  i=0 по n-1 цикл
		счетчик[i]=0;
    конеццикла;
	
	
	для остаток=0 to n-1 do
		если массив[остаток]<>неопределено then
			для k=1 по массив[остаток] цикл
				//здесь мы копируем массив счетчик в массив буфер
			    буфер=новый массив(новый  ФиксированныйМассив(счетчик));	
				для j=0 по n-1 цикл
					если счетчик[j]<>0 тогда
						остаток_суммы=(остаток+j)%n;	
						буфер[остаток_суммы]=(буфер[остаток_суммы]+счетчик[j])%mode;
					конецесли;   
				конеццикла;
				буфер[остаток]=(буфер[остаток]+1)%mode;
				счетчик=буфер ;
			конеццикла;	
		конецесли;
	конеццикла;		
	
	возврат  счетчик[0];
КонецФункции	

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

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

Функция РешетоЭратосфена(граница) экспорт
	
	решето=новый массив(граница+1);
	
	простые_числа=новый массив;
	для н=2 по граница цикл
		если решето[н]=неопределено тогда
			простые_числа.Добавить(н);
			для к=н по граница цикл
				если решето[к]=неопределено тогда
				 решето[к]=1;	
				иначе	
				 решето[к]=решето[к]+1;
				конецесли; 
				к=к+н-1;
	        конеццикла;
		конецесли;
	конеццикла;	
	
	возврат простые_числа;
КонецФункции	

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

Хочу заранее ответить на вопрос: "Зачем решать такие задачи?". Разумеется, практического смысла в данной деятельности нет никакого. Как нет смысла в  том, чтобы пить вино, курить табак, играть в шахматы и подниматься на Эверест.  Тем не менее, люди занимаются этим веками.

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. starik-2005 2834 02.08.21 11:17 Сейчас в теме
пить вино, курить табак, играть в шахматы и подниматься на Эверест
Как-то ассиметрично. Пить вино и курить табак - это бесполезные вещи. До 15-го века о табаке никто ничего не знал (кроме индейцев), а вино пили хоть и давно, но пьяниц никто не уважал - они сами себя загоняли на дно. А те, кто вроде как культурно пили, тоже часто заканчивают не очень хорошо (даже не буду говорить, о ком речь).
2. scientes 283 02.08.21 11:30 Сейчас в теме
Согласен, но положительное отношение общества к какой-то деятельности, не делает ее осмысленной. И очень трудно найти ответ на вопрос "Зачем?". В качестве примера можно привести достижения Федора Конюхова.
Оставьте свое сообщение

См. также

Модель распределения суммы по базе

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

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

1 стартмани

21.03.2022    6278    6    kalyaka    11    

37

Изменения формата файлов конфигурации (CF) в 8.3.16

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

Дополнение по формату файлов конфигурации (*.cf) в версии 8.3.16.

16.12.2021    3212    fishca    13    

36

Интересная задача на Yandex cup 2021

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

Мое решение задачи на Yandex cup 2021 (frontend). Лабиринт. JavaScript.

12.10.2021    6868    John_d    73    

46

Механизм анализа данных. Кластеризация.

Математика и алгоритмы Анализ учета Платформа 1С v8.3 Анализ и прогнозирование Бесплатно (free)

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

31.08.2021    5345    dusha0020    8    

62

Алгоритмы распределения сумм (наивная методика, Алгоритм Кэхэна)

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

Многим встречалась задача распределения суммы и вытекающая из нее проблема округления, каждый решал ее по-своему, все ли способы вам известны?

08.07.2021    5440    con-men    31    

22

Работа с абстрактным массивом

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

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

1 стартмани

07.07.2021    6736    kalyaka    57    

31

Параллельная обработка очереди сообщений

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

Описание алгоритма обработки очереди последовательных сообщений регистрации изменений записей регистра сведений. Алгоритм может быть применим к любым объектам метаданных. Алгоритм основан на обработке объектов по их ключам.

15.06.2021    4299    zhichkin    11    

22

Чем воспользоваться для распознавания котиков в 1С?

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

На митапе по инструментам для расширения возможностей 1С выступил Олег Филиппов. Он сравнил подходы Native API, COM, Docker и Serverless, и рассказал, как упростить использование в 1С алгоритмов, реализованных на других языках, с помощью облачной технологии «Функция как сервис».

12.04.2021    4803    comol    10    

29

Эффективные приемы разработки

Математика и алгоритмы Рефакторинг и качество кода СКД Платформа 1С v8.3 Бесплатно (free)

На Infostart Meetup Ekaterinburg.Online выступил Сергей Наумов – руководитель центра аналитики и консалтинга WiseAdvice. Сергей поделился с коллегами приемами разработки, которые помогут избежать потенциальных проблем при реализации сложных проектов.

07.04.2021    5354    SergeyN    13    

39

1С: Документооборот, Data Science и Python

Документооборот и делопроизводство (СЭД) Математика и алгоритмы 1С:Документооборот Бесплатно (free)

В статье рассказывается о создании и обучении модели Data Science на языке Python и интеграции с системой 1С: Документооборот

04.08.2020    5405    Vaganov_Alexey    13    

55

Параллельные вычисления расчета факториала числа N

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

Распараллеливание алгоритма с помощью фоновых заданий (асинхронные вычисления)

29.06.2020    5551    RustIG    18    

25

Применение математических достижений в решении сложных задач бизнеса

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

Как правило, самые сложные задачи решаются с точки зрения математики очень легко. Но чтобы найти правильное решение, важно понять бизнес-цель, которую достигает эта задача. О практическом применении математических достижений для эффективного решения сложных задач бизнеса на конференции Infostart Event 2019 Inception рассказал Дмитрий Мишнов.

25.05.2020    6758    Mishnov    17    

22

Улучшение пооперационного планирования в 1С:ERP 2.4 внешними средствами

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

Задача построения оптимального производственного расписания требует сравнения тысяч и десятков тысяч вариантов. Выполнять такие вычисления средствами платформы 1С Предприятие нецелесообразно. Как реализовать пооперационное планирование с использованием генетических алгоритмов и параллельных вычислений в докладе на конференции Infostart Event 2019 Inception рассказал генеральный директор компании «ИНТЕХ» Сергей Сафаров.

02.03.2020    9030    ildarovich    8    

53

Treemapping. Демонстрационная обработка

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

Пример реализации диаграммы вида Treemap на 1С

1 стартмани

27.02.2020    8972    19    randomus    4    

30

Treemapping — способ визуализации данных древовидной структуры. Карта-схема дерева

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

Предлагается ознакомиться с редким способом графического представления иерархических данных. Приводится алгоритм формирования и пример реализации.

18.02.2020    8574    randomus    20    

75

Сравнение адресов: случай из практики

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

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

04.01.2020    5410    AnatolPopov    7    

22

30 задач. Странных и не очень

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

30 задач на знание языка программирования 1С и некоторого поведения платформы. Маленьких. Странных и не очень.

02.12.2019    40826    Infostart    63    

161

Иерархия без "В ИЕРАРХИИ"

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

Говорится о том, как эффективно представлять иерархию в СУБД, как получать и использовать эти представления при решении задач в запросной технике. Уточняются и дополняются запросы из статьи "Уровни, глубина, прародители, циклы и аналоги запросом" [https://infostart.ru/public/160707/].

22.08.2019    19522    ildarovich    24    

181

Алгоритмы поиска пути в графе. Часть 2

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

Новые возможности, ранее реализованных алгоритмов поиска пути в графе на платформе 1С 8.3.

1 стартмани

13.08.2019    13969    11    RonX01    10    

93

Обработчики событий при записи объектов. Зачем и что за чем?

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

Программисту, имеющему немного опыта на платформе 1С 8.3, бывает сложно разобраться: ПередЗаписью, ПриЗаписи, ПослеЗаписи, на сервере, на клиенте, в модуле формы, в модуле объекта.... Эта шпаргалка была создана в процессе обучения и реального опыта с целью разложить всё по полочкам, чтобы было четкое понимание в каком случае какой обработчик нужно использовать и в какой последовательности они запускаются при записи и проведении документов. Данная статья будет полезна в большей степени начинающим разработчикам. Но и опытным позволит освежить информацию, упорядочить её.

25.07.2019    201598    AlbinaAAA    51    

757

Что делает "В ИЕРАРХИИ" в запросе?

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

Описание действий платформы 1С при использовании конструкции "В ИЕРАРХИИ" в запросах.

16.07.2019    75034    Infostart    34    

131

10 способов получить модуль числа (а может, и больше)

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

Пишем функцию вычисления модуля числа. Сколько способов существует? Давайте посчитаем!

1 стартмани

11.07.2019    26843    sam441    38    

56

Алгоритмы поиска пути в графе

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

Реализуем алгоритмы поиска пути в графе на платформе 1С 8.3, такие как алгоритм А*, поиск в ширину, жадный поиск, алгоритм Дейкстры и вконце волновой.

1 стартмани

09.07.2019    29767    14    RonX01    11    

116

Создание отчетов с помощью СКД - основные понятия и элементы

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

Основные принципы работы СКД. Понятия схемы компоновки и макета компоновки. Описание основных элементов схемы компоновки: наборы данных, поля, вычисляемые поля, ресурсы, параметры.

25.06.2019    103790    ids79    33    

336

Реализуем Стек, Очередь и Приоритетную очередь в 1С

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

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

24.06.2019    19687    RonX01    70    

88

Вычисление 200 тысяч знаков числа pi

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

В статье рассматриваются возможности платформы выполнять сверхточные вычисления без использования сложных алгоритмов и внешних компонент на примере вычисления числа pi.

28.05.2019    11240    Oleg_nsk    97    

79

Выдержки из книги Чистый код

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

Недавно я прочитал книгу "Чистый код" Роберта Мартина (Robert Cecil Martin). В ней описываются принципы организации и форматирование исходного кода программы так, чтобы в дальнейшем было легко поддерживать такой код. Эта книга является библией для многих программистов, но вот в среде программистов 1С, к сожалению, не очень распространено чтение подобной фундаментальной литературы. Книга более 400 страниц и так много порой лениво читать, да и времени всегда не хватает. По этому я решил выделить в виде цитирования по разделам самые важные моменты. А также снабдил текст своими примерами кода.

16.05.2019    18296    FreeArcher    108    

40

Парсер таблиц по шаблону. Автоматическая корректировка парсера. Представление таблиц в виде графа.

Математика и алгоритмы Работа с интерфейсом Универсальные функции Корректировка данных Платформа 1С v8.3 Конфигурации 1cv8 Россия Бесплатно (free)

Возникла такая задача: нужно нарисовать в макете шаблон таблицы, где расписано какая ячейка за что отвечает, загрузить таблицу из html и сравнить, подходит ли она под шаблон. Если да, то загрузить информацию по правилу из шаблона. Проблема в том, что в html таблица может приходить с ошибками, то есть какие то ячейки совмещены, хотя не должны. Поэтому нужно сделать так, что бы программа понимала, что таблицы похожи и где конкретно ошибки. Соответсвенно, поделил задачу на 3 этапа. 1 - это представление таблицы в виде графа, 2 - сравнение графов, 3 - забор информации. В данной статье пойдет описание пункта 1.

25.04.2019    4765    trim89    5    

24

Нечёткий поиск. Bitap алгоритм, модификация от Wu-Manber

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

Временами нужен нечёткий поиск в тексте, но не всегда можно использовать внешние компоненты. Данный алгоритм прост, достаточно быстр.

01.04.2019    5892    trim89    10    

48

Решение системы линейных уравнений

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

Пример использования объекта Расчет систем линейных уравнений.

25.03.2019    11292    scientes    12    

49

Обсуждение двух задач на пересечение отрезков

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

Ищем общее в частностях, или задача о пересечении отрезков.

15.03.2019    7730    scientes    16    

24

Как писать код? Технологии древних цивилизаций, или все новое - это хорошо забытое старое

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

Все современные технологии - это развитие и доведение до ума (или маразма) древних идей. За последнее время не придумали ничего нового - все, что мы видим, было придумано тысячи лет назад. Не является исключением и программирование, которое в сути своей является переводом с языка условностей технического задания или заявки пользователя в формализованный и абсолютно точный язык математической логики. А логику придумали (по крайней мере первыми опубликовались в ведущих научных журналах) еще древние греки.

23.01.2019    13003    starik-2005    43    

78

Ректальное программирование: основы для практикующих 1С-программистов

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

Одной из самых популярных и зарекомендовавших себя методологий программирования в 1С является так называемое ректальное программирование. Редкий проект внедрения и сопровождения учётных систем на платформе 1С обходится без его использования. Зачастую без знания данной методологии программистам даже бывает сложно найти работу в сфере 1С, потому что работодатели, особенно фирмы-франчайзи, в основном отдают предпочтение классическим, зарекомендовавшим себя методикам, а не новомодным заграничным веяниям.

19.12.2018    54848    for_sale    355    

343

Многопоточное восстановление последовательностей

HighLoad оптимизация Математика и алгоритмы Универсальные функции Платформа 1С v8.3 Бесплатно (free)

Универсальный алгоритм многопоточного фонового восстановления любой последовательности.

05.12.2018    17319    _ASZ_    33    

53

Основы компьютерной графики

Математика и алгоритмы Работа с интерфейсом Управляемые формы Конфигурации 1cv8 Абонемент ($m)

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

1 стартмани

30.07.2018    8859    HAMMER_59    39    

25

Повышение качества разработки. Статья 3. Ошибки программы

Математика и алгоритмы Рефакторинг и качество кода Бесплатно (free)

Учебный курс по теории и практике программирования. Бесплатно. В виде структурированного текста. Статья 3. Эта статья посвящена ошибкам программ, их классификации и способам исправления.

10.07.2018    24800    Артано    92    

106

Що там у них в Java

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

Развенчание мифа о тяжёлой жизни не 1С программистов на примере создания веб сервиса редактирования таблички с использованием framework spring в Java.

24.05.2018    12282    van_za    62    

23