Проект Эйлер в 1С

02.09.14

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

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

Во все времена были люди, которые увлекались  математикой. Для небольшой части  математика являлась средством к существованию, для оставшегося большинства - зарядкой для ума, формой досуга. Если мы вспомним относительно недавнее прошлое, а именно докомпьютерную эру, то увидим, что на протяжении веков  математические игры разума обходились только бумагой и карандашом. При этом, рассматриваемые задачи не требовали сложных, многостраничных расчетов. Разумеется, такие вычисления производились, но этим занимались профессионалы. После того, как вычислительные мощности значительно подешевели, ситуация изменилась. Класс задач, который требовал многократных вычислений или перебора  огромного количества вариантов, стал доступен массовому пользователю и среди них оказались те, кому это было интересно. Так, в частности, возник Проект Эйлер (здесь можно найти его русскую версию). Проект - это набор задач, которые можно решить,как правило, только с применением вычислительной техники. При этом, метод прямого перебора требует такого количества времени, что делает его использование бессмысленным. Поэтому участникам необходимо знание разнообразных методов и алгоритмов, которые относятся к соответствующему разделу математики. Как показывает практика, большинство задач требует применения длинной математики, поскольку результаты расчетов выходят за ограничения, которые присутствуют в вычислительных системах с побайтным хранением целых чисел. Если обратиться к статистике того какие языки программирования используют  участники проекта, то обнаружится, что на первом месте  по количеству пользователей идет Python, совсем немного отстает C/C++, на третьей позиции находится Java.  1С в этом списке не значится. Между тем платформа позволяет эффективно решать самые разнообразные задачи, которые представлены на сайте проекта. Во первых, в 1С уже реализована длинная математика для операций сложения и умножения. Поэтому, например, задача 20, в которой надо найти сумму цифр в числе 100! решается элементарно.  Впрочем, ограничения на длину чисел в 1С есть. Запустите у себя на машине следующий код и посмотрите что получится.

 

        н=10;разрядов=2;
	пока ИСТИНА цикл
		разрядов=разрядов+1;
		н=н*10;
		если СтрДлина(Формат(н,"ЧГ=0"))<>разрядов тогда
			сообщить("Предел "+разрядов);
			прервать;
		конецесли;	
	конеццикла;	

 

 

 

 

Смею полагать, что данной точности достаточно для большинства задач, которые предлагаются к решению  (но ,например, для Задачи 25 этой точности, увы, не достаточно). Во вторых, скорость исполнения при выборе правильного метода, позволяет во многих случаях уложиться в одну минуту. О том насколько важен выбор алгоритма говорит пример 66 задачи. В ней предлагается найти такой коэффициент D<=1000  для квадратного Диофантового уравнения, чтобы соответствующее ему решение х было максимальным. Максимальное решение в этом случае будет 16 421 658 242 965 910 275 055 840 472 270 471 049. Разумеется, никаким перебором до этого значения не дойти.  

 

Поделюсь несколькими наблюдениями. Если говорить об объектах языка, то как показал мой опыт, самым используемым оказался массив и один раз я обращался к Таблице значений. Когда участник проекта успешно решил задачу, то он может оставить к ней комментарий, в частности разместить свой вариант решения.  Задача № 9 относится к простым, что подтверждает количество решивших (168213). Заглянув в комментарии, я обнаружил одно решение на ассемблере, решения в которых просто перебирались все числа из диапазона от 1 до 1000, и одно решение без программирования. Это был участник из Италии, он использовал представление для троек Пифагора и его решение уложилось в 8 строк. Молодец !  

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

 

Вычислительные задачи проект Эйлер

См. также

Метод Дугласа-Пойкера для эффективного хранения метрик

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

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

1 стартмани

30.01.2024    1754    stopa85    12    

33

Алгоритм симплекс-метода для решения задачи раскроя

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

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

19.10.2023    4417    user1959478    50    

34

Регулярные выражения на 1С

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

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

1 стартмани

09.06.2023    7462    4    SpaceOfMyHead    17    

56

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

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

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

1 стартмани

21.03.2022    7855    7    kalyaka    11    

44

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

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

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

16.12.2021    4444    fishca    13    

36

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

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

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

12.10.2021    8838    John_d    73    

46

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

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

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

31.08.2021    7804    dusha0020    8    

70
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. 3.14159 94 18.08.14 15:08 Сейчас в теме
Надеюсь, что когда-нибудь они все будут решены на платформе 1С:Предприятие


- доктор! я буду жить?
- а смысл?
2. scientes 288 18.08.14 15:14 Сейчас в теме
Смысл - популяризация платформы, изменение скептического отношения части IT сообщества к разработчикам на языке 1С.
makfromkz; wunderland; DrAku1a; Makushimo; gubanoff; jobkostya1c_ERP; davealone; +7 Ответить
4. wolfsoft 2421 20.08.14 08:40 Сейчас в теме
(2) во-первых, это не изменит "скептического отношения части IT" (дурака учить - только портить), во-вторых, каждый инструмент предназначен для своих задач (микроскопом можно забивать гвозди, но не нужно), в-третьих, не вижу никакого практического смысла в решении абстрактных задач (когда коту нечего делать, он... ну, дальше вы знаете).
6. scientes 288 20.08.14 10:30 Сейчас в теме
(4) wolfsoft, Разумеется, платформа 1С:Предприятие создавалась для своей предметной области. Тем удивительнее тот факт, что разработчикам удалось, в том числе, создать чрезвычайно удобный инструмент для решения таких абстрактных задач, как Проект Эйлер. Игра в шахматы лишена какого-либо практического смысла, это вопрос личных интересов. Спортивным программирование увлекаются единицы и это нормально. На мой взгляд,решить пару расчетных задач никому не повредит, а только повысит самооценку и расширит кругозор.
monkbest; help1Ckr; +2 Ответить
14. monkbest 115 27.08.14 10:48 Сейчас в теме
(4) wolfsoft, скептическое отношения не потому, что скептики дураки, а потому, что среди нашего брата полно сброда, окончившего 1С курсы по тыканью мышкой и побежавших зарабатывать деньги, назвав себя 1Сниками. Настоящие 1Сники - это все таки математики, прикладные математики, прикладные до мозга костей. Мы этим и отличаемся от С++ников, что в нашей работе прикладные знания имею больший вес, чем математика. Но как настоящим математикам нам должно быть интересно решать задачки подобные проекту Эйлер. А сообщить всему миру, что в среде 1С работают программисты, а не только бухгалтера - идея хорошая.
27. makfromkz 35 09.02.19 14:15 Сейчас в теме
(2) Я не понял, а на сайте Проект Эйлер решения не приводятся?
28. scientes 288 09.02.19 21:11 Сейчас в теме
(27)Решения не приводятся. Если участник нашёл правильный ответ, то ему доступно обсуждение задачи с примерами решений от других участников сообщества.
3. jobkostya1c_ERP 100 19.08.14 09:04 Сейчас в теме
Хороший проект. Где можно посмотреть методы решения вычислительных задач на 1С 8.
Интересует технология решения СЛАУ (систем линейных алгебраических уравнений) в запросе 1С 8 для расчета себестоимости по РАУЗ.
5. m191 122 20.08.14 09:59 Сейчас в теме
А я думаю, что данная статья это популизация "научного" программирования среди кодеров 1С :).
Думаю не секрет, что большинство из них не имеют специального образования и для некоторых не знакомы такие слова как рекурсия, декомпозиция и т.п.

monkbest; +1 Ответить
9. V_V_V 21.08.14 12:56 Сейчас в теме
(5) m191, среди математиков тоже не все Эйлеры - и что теперь, это недонаука? :)
Не святые горшки лепят, кому сегодня не знакомы рекурсия, декомпозиция, завтра смогут не хуже ildarovich разгребать графы... :)
Понятно что 1С не для высоких математических материй, тем не менее совсем недавно никто не мог предположить, что из 1С можно будет позвонить, обработать почту, получить 3Д-модель, модифицировать мультимедиа-файлы и т.п. - а сейчас многое из перечисленного в категории банальных вещей.
Нормальная статья, спасибо автору.
vittany; wunderland; Sitex; +3 Ответить
7. zqzq 23 21.08.14 09:00 Сейчас в теме
Между тем платформа позволяет эффективно решать самые разнообразные задачи
Такие заявления неплохо бы подтверждать замерами времени в cравнении, например, с C++ или Java. Эффективность встроенного интерпретируемого языка вызывает сомнения. Те замеры, что мне попадались, показывали отставание 1С где-то в 100 раз от С++.
8. scientes 288 21.08.14 09:41 Сейчас в теме
(7) zqzq, Авторы задач утверждают, что при выборе правильного алгоритма, поиск решения будет занимать не больше минуты. Под эффективностью я понимаю скорость формирования и отладки кода и возможность уложиться в отведенную минуту. Кроме этого, реализованная в 1С длинная математика позволяет не тратить время на процедуры длинного сложения и умножения. Безусловно, скорость выполнения расчетов на С выше, есть участники проекта, которые кодируют на ассемблере, там скорость , возможно,еще выше. Уложился расчет в минуту или пару секунд, в данном случае не важно. Как показывает мой небольшой опыт, 1С успешно справляется с подобным классом задач.
10. RustIG 1351 24.08.14 19:20 Сейчас в теме
(0) можно создать свой проект Эйлера, связанный напрямую с предметной областью и платформой 1С.
Задачи будем брать из практики. Понимаете, о чем я пишу? Примеры:
а) все, что не реализовано в типовых, но порой приходится дорабатывать
б) все, что реализовано в типовых, но есть шанс улучшить
в) что-то новое - чего нет в типовых
только нужен движок (сайт), на котором можно было бы развивать этот проект
11. RustIG 1351 24.08.14 19:30 Сейчас в теме
есть ребята, создающие системы автопилотирования транспортных средств http://robocv.ru/products/
они говорят, что оснастить технику датчиками просто, а самое сложное - написать алгоритмы определения местоположения в пространстве. в общем, еще есть темы, в которых сложные алгоритмы будут играть ключевую роль ноу-хау
12. Solovyeff 24.08.14 20:10 Сейчас в теме
Мисье знает толк) Можно хоть счеты использовать, но творческая составляющая исчезнет, для решения математики есть очень хорошие среды, и спец. языки. Мне например понравился Wolfram Language.
13. zqzq 23 25.08.14 08:23 Сейчас в теме
(12) Solovyeff, мне в студенческие годы Matlab очень понравился, практически "1С для математиков". Также 1С-у многому стоило бы у них поучиться (встроенная java как 2-й альтернативный язык, человеческий настраиваемый интерфейс, божественная встроенная справка с картинками и видео и введением для начинающих).
15. monkbest 115 27.08.14 10:53 Сейчас в теме
(13) zqzq, извиняюсь, я в институте тоже на матлабе решал задачки и там действительно хорошая справка, хоть я с инглиш и не дружил, все было понятно, но справка в 1С - это самая офигенная справка. До появления 8.2 кроме хелпа никакой литературы или гугла мне не требовалось, все ответы на вопросы быстро находил в синтаксис помощнике.
16. alex_sayan 29.08.14 02:33 Сейчас в теме
Мне вот не очень понятны попытки скрестить 1С с математикой. Ну, допустим, свершилось: в 1С:Предприятии появились механизмы, позволяющие выполнять сложные математические вычисления. Для кого это? Даже если в многотысячной армии 1Сников и найдутся математики-практики, способные использовать эти механизмы в полный рост, то конечным пользователям это зачем?
19. monkbest 115 02.09.14 21:32 Сейчас в теме
(16) puzakov, Вы не правы потому, что не с той точки зрения смотрите на проблему. Периодически решать алгоритмические задачи надо всем программистам. Это тренировка для ума. И если программист 1С работает в среде 1С, зачем ему ставить другую среду разработки, если 1С под рукой.
Решение задач на проекте Эйлер - вообще не имеет практического выхода для пользователей. Но сказать, что это никому не нужно = никому не нужно высшее образование IT. Всем нам нужно тренировать мозги.
В 1С есть все операторы структурного языка, это полноценный язык, на котором можно решить любую задачу. Пусть это не исполняемый код, пусть это скрипт, но никто и не гонится за сверхбыстрыми вычислениями. Суть правильного решения задач - уйти от перебора в лоб, занимающего нереальное кол-во итераций, к оптимальному алгоритму. Что это выполнится за 30 секунд на С++, что 2 минуты на 1С, разницы нет. Главное не три часа/дня.
Люди не шарящие в программировании (составлении алгоритмов на любом языке, математиков по своей сути) это - недо1Сники, закончившие пару курсов по бухучету. Разработать оптимальный код они не способны, они по любому пустяку сначала лезут в гугл, и только в крайнем случае пишут свой код с нуля.
An@st@si; +1 Ответить
22. Идальго 226 22.12.14 01:00 Сейчас в теме
(19) monkbest, да какже нету разницы то? Сами пишите - 30 секунд или 2 минуты. А если разница во времени получения результата пара дней?

По моему, разница в эффективности. Для той или иной задачи в зависимости от цели и возможностей следует подбирать оптимальное решение. Однако, я также как и вы считаю, что ум следует тренировать.
23. monkbest 115 22.12.14 09:18 Сейчас в теме
(22) Идальго, если разница в пару дней, то это уже заведомом неверное решение задачи. Почитайте, что такое проект Эйлера:
Каждая задача подчиняется "правилу одной минуты", которое гласит: несмотря на то, что на построение алгоритма решения могут уйти часы, эффективная реализация позволяет получить ответ на компьютере средней вычислительной мощности меньше, чем за одну минуту.

Поэтому я и пишу, что нет разницы. 1С напорядок уступает C++, но не настолько, чтобы минуту превратить в дни :)
Возможно, вы говорите о вычислительных задачах в целом, а не конкретно о проекте
26. Идальго 226 26.12.14 09:03 Сейчас в теме
(23) monkbest, угу, я о вычислительных задачах вцелом.
21. Идальго 226 22.12.14 00:50 Сейчас в теме
(16) puzakov, вы правы, что 1С для сложных расчетов не особо эффективен. Это нормально. Для сложных расчетов следует использовать специальные математические библиотеки, и передавать туда лишь параметры для расчета и получая обратно в 1С-ку уже готовый результат.

Теперь про конечных пользователей. Пользователям нужны отчёты, аналитика, прогнозирование. Например, в задачах управления запасами и прогнозирования спроса может потребоваться целая гора вычислений различных вероятностей, трендов и т.д. и т.п., причём в различных разрезах учёта. Можно конечно пользоваться более простыми методами, не требующими много вычислений, но на практике такой подход зачастую далеко не самый оптимальный. Рынок требует более точных и сложных инструментов для анализа.
17. An@st@si 31.08.14 15:52 Сейчас в теме
Как раз для того, чтобы меньше работать им "ЛЮБИМЫМ"...))))
Например, необходимо пропорционально от остатка рассчитать какую то сумму по данным, чтобы эта сумма не превышала базовую сумму, заданную в параметрах. Простой пример, два остатка 13000 и 14000, каждый месяц рассчитывается коэффициент, и по этому коэффициенту считаем сумму удержаний. Самое главное необходимо, чтобы эта сумма не превышала базу для удержаний.
18. An@st@si 31.08.14 16:10 Сейчас в теме
Пример только для обоснования, к задачам не имеет отношения.
Смысл: для облегчения труда конечного пользователя.
20. An@st@si 03.09.14 02:38 Сейчас в теме
Вы правы, но со стороны бухгалтера, стараюсь все применять в чем разобралась)
А мозг всегда полезно потренировать...) спасибо)
24. monkbest 115 22.12.14 10:26 Сейчас в теме
Наверное автор ждал на проекте Эйлера потока подобных записей:)
Я в теме, старт дан!
25. scientes 288 22.12.14 12:59 Сейчас в теме
(24) monkbest,
Приятно, что не я один продвигаю 1С, как платформу для решения математических задач на данном проекте.
Оставьте свое сообщение