gifts2017

XXIV Олимпиада по программированию учетно-аналитических задач (в среде 1С)

Опубликовал Serj (Serj1C) в раздел Программирование - Практика программирования

Организатор олимпиады - Фирма «1С» и Финансовая Академия при Правительстве РФ.
Ее суть – написать внешнюю обработку, которая бы анализировала исходную базу и выдавала правильный ответ.
Цель – привлечь и выявить талантливых студентов, "подсадить" их на 1С с раннего возраста
Предлагаю вашему вниманию задание нашего регионального тура.

Продолжение темы http://infostart.ru/public/19068/

Информационная поддержка http://fa-kit.ru/main_lst.php?top_id=11965&desc=1

Информационный выпуск http://www.1c.ru/news/info.jsp?id=11249


Олимпиада стала традиционной. В ней студенты бурятся за ценные призы (поездка в Париж, ноутбук + УПП, КПК + web-расширение, iPod) и почетные грамоты (сертификаты 1С). Не студенты могут ради интереса принять в ней участие заочно.

Действие проводится в два тура. Первый (отборочный) ложится на плечи региональные представительств. Второй проводится на базе учебного центра №3 фирмы «1С».
В этом году у нас была такая задача. Обидно, что ее никто не решил. 

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

Состав конфигурации:
- задание участнику (формат word 2003);
- исходная структура данных (справочник, документ, регистр сведений);
- контрольный пример;
- отчет по курсам ценных бумаг (СКД);
- решение жюри (не включен в интерфейс);
- чекер для проверки правильности решений (не включен в интерфейс).

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

PS: Мне кажется, что есть решение одним пакетом запросов. Что скажете?

 

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
Каркасная конфигурация
.1cd 752,00Kb
18.02.13
89
.1cd 752,00Kb 89 Скачать
Задание I тур 2010 Оренбург.doc
.doc 102,00Kb
18.02.13
66
.doc 102,00Kb 66 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Вячеслав Кадацкий (marsohod) 15.02.10 03:00
Максимальную прибыль дает эмиссия национальной валюты, ее вывод на спекулятивный рынок Forex и приобретение доллара, евро, золота. Конечно, если Вы контролируете Центральный Банк.
Ой, что это я сказал...
© Сами Знаете Кто
3. Армен Арабханян (Arabo_xv) 15.02.10 09:36
А где можно посмотреть требования к работе (время работы, объем доступной памяти). В каком виде должен выдаваться ответ?
4. Serj (Serj1C) 15.02.10 10:30
(3) Требования всегда описываются в задании. Время работы - чем меньше тем лучше. Объем памяти строго не ограничен, сдесь большее значение имеет красота решения. Именно в этой задаче ответ выводится в документ, где состав и тип полей жестко указан в конфигурарторе.

Вообще олимпиада по 1С имеет принципиальные оличия от олимпиад по спортивному программированию (количество задач, объемы тестов, экономическая направленность)
5. Армен Арабханян (Arabo_xv) 15.02.10 11:55
Просто эта задача легко решается жадным алгоритмом. Если не ограничена память то я тогда не могу понять в чём сложность зачи :(. Без ограничений она решение её тривиально.
6. Serj (Serj1C) 15.02.10 12:36
(5) Хорошо. Сколько ты думаешь времени у тебя уйдет с отладкой? 2 часа?
Попробуй засечь время. На олимпиаде есть 4 часа.
И пришли мне плиз решение.

Мне тоже кажется легко. Но однозначного решения если курс покупки <> курсу продажи я не нашел. Это уже интереснее.
7. Армен Арабханян (Arabo_xv) 15.02.10 13:15
К сожалению я не могу скачать условие задачи (сегодня уже скачивал с инфостарта файл) :(
8. Армен Арабханян (Arabo_xv) 15.02.10 14:22
Значит так алгоритм решения следующий:
1 - Определяем дату начала и дату конца торговли.
2 - Делаем цикл по дням с даты начала по дата конец - 1.
3 - Если есть закупленная валюта то продаём её.
4 - Получаем срез последних за текушую дату и на следующий день.
5 - Для валют у которых курсы отличаются берём ту валюту по которой вырожение (КурсКонца - КурсНачала) / КурсНачала максимален и на все активы покупаем эту валюту.
После цикла проверяем если всё ещё есть закупленные валюты то продаём их.
Этот алгоритм даёт максимальную прибыль но не оптимален к ресурсам вычислительной техники.

PS реализация займёт не более часа :)
9. Serj (Serj1C) 15.02.10 14:28
(8) логика, конечно, верная, но... Получать срез последних в цикле - не комильфо по стандартам методики разработки 1С. Мне тоже казалось час надо, а получилось полтора как минимум. И потом еще мелкие штришки. Так что зря ты так ) Напиши, сделаем замер производительности.
10. Армен Арабханян (Arabo_xv) 15.02.10 14:42
В условиях сказанно что победит тот кто получит максимальную прибыл и только в случае если прибыль будет одинаковая будут оценивать другие критерии.
11. Михаил Ражиков (tango) 15.02.10 14:44
(8)
3. сначала по 5. определяем валюту к покупке, и если имеющаяся валюта не равна по 5., то продаем ее

не забываем, что за каждую транзакцию отчисляем бонус оператору
12. Serj (Serj1C) 15.02.10 15:07
(10) думаю, что итоговый навар у нас получится одинаковый
(11) в условиях задачи про коммисию ничего не сказано
13. Михаил Ражиков (tango) 15.02.10 15:10
(11) тогда лишнее движение будем учитывать при прочих равных
14. Армен Арабханян (Arabo_xv) 15.02.10 15:17
(12) Ваш алгоритм будет хромать если курсы не каждым днём вносить. В моём случае я всегда получаю максимальную прибыль.
15. Армен Арабханян (Arabo_xv) 15.02.10 15:19
(11) Картину это не меняет. Это меняет лишь количество операций, а не прибыль.
16. Serj (Serj1C) 15.02.10 16:53
(13) мое решение (уже в каркасной конфигурации) минимум операций делает.
(14) хромать он не будет, он на это заточен, проверь
(15) согласен
17. Армен Арабханян (Arabo_xv) 15.02.10 17:27
(16) Хех у вас вообще "Не зачёт!" если слегка подкрутить курсы.
Строка №5 Превышен денежный лимит -0,01<>1 015 364,406
Строка №9 Превышен денежный лимит -242,65<>1 034 502,5985
Строка №11 Превышен денежный лимит -242,53<>1 046 427,584
Строка №13 Превышен денежный лимит -242,66<>1 155 906,344
Строка №15 Превышен денежный лимит -242,64<>1 158 187,7232
Строка №17 Превышен денежный лимит -242,61<>1 183 783,0014
Строка №19 Превышен денежный лимит -242,58<>1 282 827,7332
Свой решение я написал за 38 минут + до этого минут 20 потратил на ознакомление с задачей. Работает она в 2-3 раза медленнее, но даёт максимальный результат и не имеет ошибок округления.
18. Serj (Serj1C) 15.02.10 18:18
(17) Любопытно! Поделишься подкрученными курсами и своим решением?
19. Армен Арабханян (Arabo_xv) 15.02.10 18:33
20. Serj (Serj1C) 15.02.10 18:58
(19) Хорошая попытка. В 7й и 8й строчке на лицо переполнение Количества.
Если увеличить длину реквизита документа, то тот же алгоритм дает 47.42% прироста при соблюдении всех описанных выше условий.

Ваше решение в студию :)
21. Армен Арабханян (Arabo_xv) 15.02.10 19:08
(20) А разве не на вас лежит ответственность за контролем переполнения? В условии сказанно что вы не можете исползовать больше чем у вас есть средств. Дело в том что вы даже не пытаетесь избежать ошибки округления а значит всегда есть исходные данные когда у вас будет ошибка. Моё решение http://depositfiles.com/files/oa8oxkf7f пароль 123456.
PS Исходные данные я поменял именно из-за того что заметил в вашем решени перерасход средств.
22. Serj (Serj1C) 15.02.10 19:22
(21) Мне понравилось. Хоть и медленней, но это хорошее решение! Плюс.

Если Вы еще студент, очень рекомендую зарегистрироваться на сайте Финансовой Академии (http://fa-kit.ru/) и участвовать хотя бы в заочном туре, у вас все шансы на победу! А если не студент, то можно будет нам вне конкурса посоревноваться.

Было оч. приятно дискутировать!
23. Армен Арабханян (Arabo_xv) 15.02.10 19:27
Уже давно не студент :) Посмотрим если будет на работе возможность буду участвовать.
24. Владимир Каменев (vlad3190) 17.02.10 15:41
Нужно взять вторую производную, и там где точки перегиба - покупать или же продавать, в зависимости от того, на какой знак меняется.
25. Serj (Serj1C) 17.02.10 17:11
(24) Мало себе это представляю.
26. Павел Ларионов (RegrZ) 20.04.12 07:29
Я что-то не понял в чем вообще сложность задачи, если прогноз по курсам торгуемых активов уже есть то можно рассчитать прибыльность потенциальных сделок по целям этих прогнозов, и если известно сколько денег на управляемых брокером счетах, можно действительно одним запросом выдать что и в каком объеме покупать и сколько держать позиции.
детский сад какой-то а не олимпиада.
27. Павел Ларионов (RegrZ) 20.04.12 07:31
Кстати 1С очень плохо подходит для автоматизации финансового сектора, т.к. очееееееень медленно все выходит.
28. Serj (Serj1C) 20.04.12 07:39
(26) При всей простоте задачи ни один студент 4го курса не смог ее решить и выйти во второй тур. Было печально.

Вот кстати, задание олимпиады этого года http://fa-kit.ru/main_dsp.php?top_id=22317
29. Иван Ли (Irwin) 10.03.16 16:36
У кого-нибудь есть финальное задание 2008 года?
30. Serj (Serj1C) 10.03.16 19:46
(29) Irwin, на официальном сайте организатора - http://fa-kit.ru/main_dsp.php?top_id=3730
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа