Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Конкурс среди Delphi-программистов, Объявляется набор участников. 
:(
    Опции темы
Alexeis
  Дата 10.10.2008, 09:53 (ссылка) |    (голосов:19) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459




Конкурс среди Delphi-программистов


Мы объявляем о начале конкурса по программированию. Участие в конкурсе – отличный способ 
оценить уровень своих знаний. Каждый день мы пишем какой-то код, решая различные задачи. Но 
все эти задачи являются типовыми и со временем выполняются на «автомате». Повышение 
мастерства программиста, наоборот, происходит при решении оригинальных задач, при изучении 
нового материала, когда программист думает. Данный конкурс позволит всем желающим проверить 
уровень своих знаний и сообразительность.
Данный конкурс является первым у нас, и мы надеемся, что проведение подобных конкурсов в 
будущем станет хорошей традицией.

Правила участия в конкурсе по программированию

1.Регистрация участников
К участию в конкурсе допускаются все желающие, при соблюдении данных правил.
Для того, чтобы стать участником, нужно быть зарегистрированным участником форума Vingrad. 

До 15 октября 2008 года надо направить заявку на участие в конкурсе.  Для этого необходимо
 написать сообщение в данной теме с содержанием «Буду участвовать» или отправить ПМ представителям комиссии. Отправляем сюда 
Участие в конкурсе бесплатное.


2.Сроки проведения конкурса 
Конкурсное задание высылается всем участникам по внутренней почте форума (PM) и публикуется на
 форуме 16 октября в 12-00 (МСК).
С 16 по 19 октября 2008 года включительно будут приниматься решения внутреннюю почту (PM) участника Отправляем сюда 
C 20 по 23 октября будет проводиться рассмотрение предоставленных решений путем тайного 
голосования внутри комиссии по проведению конкурса.
К 24 октября будет объявлен победитель с его решением. И выставлены все решения, для того чтобы 
все убедились в справедливости решения.

3.Выбор победителя 
Победа в конкурсе подразумевает 100% правильное решение задачи (при всевозможных входных условиях задачи программа давала заданный условием результат).
При отсутствии решений в соответствии с вышесказанным условием конкурс может быть признан 
недействительным.
Критерии оценки правильности решения будут указаны в тексте задачи.
По результатам конкурса будет только один победитель. Если решений, которые претендуют на 
победу, больше – будет отобрано то, которые было прислано раньше.

4.Призы 
Победитель будет немедленно переведен в группу «Эксперт», а также получит 5 баллов репутации. 
Всем участникам предоставившим рабочее решение хотя бы одной задачи будет повышена репутация на один балл. Занявшим 2 и 3е место на 3 и 2 бала соответственно.

5.Заключительные положения 
Исходные тексты решения необходимо писать 100% на Delphi в любой версии, но используя 
синтаксис Delphi 7.
Информация о победителе и его решение будет опубликовано на форуме.
Выбор победителей проводится силами комиссии по проведению конкурса. Её состав : Rrader
AlexeisSnowyGirderDecember.
Победитель объявляется один раз, без возможности пересмотра.
Данный конкурс является некоммерческим. 
Комиссия по проведению конкурса обязуется неукоснительно соблюдать данные правила. В случае 
возникновения разногласий, которые на урегулированы данными правилами, – комиссия по 
проведению конкурса оставляет за собой право вносить односторонние изменения в правила с 
последующим уведомлением всех участников.

---------------------------------------------------

Зарегистрированные участники: 
morpheyushkakemiistoTHandleStaruhaCoderjsaBose
MakPocctHE_EGOiSTEmr.AndersonQu1ntMetalFanChristoph
aktubaSneG0KPoseidon,klimrmadWaReZMENILyAHA
ilBEastline0nVICTARigimonBaD_SeCt0RVanHelsing
ShaggyMadCoder,586MriboAversSanechichek,DCeres,
Frees,Telepyz,safon777,Rennigth,pseud,bems~FoX~
AndreyZ53,AntonN,Alix,Felan,RockClimber,Matematik,
Solitaire,Pichuser,Yanis,actualSajtran,Mauzer91MERLIN123.

-------------------------------------------------------------------------------------------------------------------

Задания на конкурс

1) Задача на алогоритм
Дана матрица случайных чисел m x n (m и n) константы (например 10 на 10). Требуется отсортировать ее элементы по спирали. Т.е. для матрицы 3 х 3 получить примерно такой результат. 
123
894
765

Вывод по своему усмотрению. Можно и в консоль.

Критерии оценки задания: лучшим будет считаться такое решение, которое будет быстрее всех.
------------------------------------------------------------------------------------

2)Задача на потоки.
  Условие: Есть Хулиган с мусорными пакетиками и дворник. Задача хулигана разбросать все мусорные пакетики и при этом не попасться на глаза дворнику. Задача дворника убирать мусор и накостылять хулигану smile . 
  Поле состоит из 60 ячеек (одномерное). 
  Хулиган появляется в произвольной позиции на поле и выбрасывает за раз только 1 пакетик (занимает ячейку) в течении 60мс, после чего он исчезает чтобы через 300 мс появиться в новой позиции начать там гадить. У хулигана запас 22 пакетика.
  Дворник бегает от края до края поля за раз сметая 3 бумажки (очищая 3 соседние ячейки) в течении 400мс.
  Условие поимки. Попытка одновременного доступа (2х потоков) к общей ячейке.

  Требование к решению. В программе должно быть 3 потока (Основной, дворник, хулиган) + простейшая отрисовка в виде ячеек.

  В атаче пример реализации (зеркало http://narod.ru/disk/3216906000/huligan_vs_Dvornik.zip.html) . 3 красных квадарата это дворник в процессе уборки. Ячейки рисуются по XOR во время уборки и заполняется белым после очистки, пакетик хулигана на время выброса становиться желтым, а после ухода становиться синим. Красным кружком помечается позиция где пойман хулиган.

  Примечание: графическая отрисовка может отличаться от предложенной, но тогда, дополнительно, потребуется ее описание. 

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

3) На знание внутренних механизмов Delphi.

В Delphi конструктор любого класса может работать в двух режимах:

1) Режим создания нового экземпляра объекта:
Код

...
var
  Button: TButton;
begin
  Button := TButton.Create(Nil);
end;


2) Но можно сделать и так:
Код

...
var
  Button: TButton;
begin
  Button := TButton.Create(Nil);
  Button.Create(Nil);
end;


Во втором случае просто произойдет реинициализация экземпляра класса.

Представьте, что перед Вами возникла задача создать экземпляр некоторого класса в "чужом" приложении. Что для этого нужно? Ну, во-первых, сам класс, который будет создан, во-вторых, режим работы (создание нового или реинициализация уже созданного экземпляра).
Если конструктор класса может принимать параметры, то они также понадобятся. Зная адрес конструктора, его можно вызвать. 

Отмечу один из важнейших моментов при работе с "чужими" приложениями - для начала все действия нужно проверять на своем приложении. Задание посвящено методике создания классов в "чужих" приложениях.

Итак, дан простой класс, имеющий конструктор с целочисленным параметром. Он просто выводит сообщение с переданным при создании числом.

Код

type
 TDummy = class(TObject)
  private
    FValue: Integer;
  public
    procedure ShowValue; virtual;
    constructor Create(Value: Integer); virtual;
  end;

implementation

{ TDummy }

constructor TDummy.Create(Value: Integer);
begin
  inherited Create;
  FValue := Value;
  ShowValue;
end;

procedure TDummy.ShowValue;
begin
  ShowMessage('Value is: ' + IntToStr(FValue));
end;


Требуется:

1) Написать обыкновенную функцию (не метод) CreateClass, которая бы создавала объект класса TDummy (т.е. написать аналог родного конструктора). Параметры функции - на Ваше усмотрение.

Иными словами: 

Dummy := TDummy.Create(); 

будет эквивалентен коду:

Dummy := CreateClass();

2) Написать простой пример использования функции, создав экземпляр класса (в локальной переменной), передав в конструктор произвольное значение.

Входные данные:
1) Можно пользоваться классом TDummy как типом данных.

Условия:
1) Не использовать ассемблер.
2) Не вызывать конструктор напрямую:

Код

...
var
  Dummy: TDummy;
begin
  Dummy := TDummy.Create(123); // Подобные вызовы в любом месте решения запрещены!
end;


3) Все остальное делать можно smile

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

Полезность задачи - позволяет динамически создавать классы и компоненты в "чужих" приложениях без использования модулей VCL в своих.

----------------------------------------------------------------------------------------------------------------


Победители конкурса. 

Всего можно было набрать 60 баллов, 10 за 1ю, 30 за 2ю, 20 за 3ю

bems      - 53
MetalFan    - 53
actual    - 45

Sajtran    - 41
aktuba    - 30
AntonN    - 27
Poseidon    - 24
jsa       - 23
THandle - 19


ne0n             - 10
Shaggy          - 9
Felan             - 9 
tHE_EGOiSTE - 4
Qu1nt             - 3
mr.Anderson   -2
Staruha          - 2

Очень хорошие решения представили Sajtran,  AntonNaktubajsa
Суперское решение первой задачи представили ne0nbems и Shaggy
Очень хорошо 3е задание решил bems.
2е задание лучше всех удалось MetalFan. Очень грамотно, аккуратно, эффективно и прозрачно.

Как и обещалось все кто прислал решения хотя бы одной задачи или попытку решения, получат по одному +

 Все задачи были просмотрены на предмет упущений, отступлений от задания, т.е. весьма подробно.

 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
AntonN
Дата 16.10.2008, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 8.8.2006

Репутация: 3
Всего: 18



вот почему не люблю примеры "с ООП" - все высасано из пальца и сами себе сделаны проблемы...

еще вопрос - каким образом будет тестироваться скорость первого задания?



--------------------
user posted image
PM MAIL WWW   Вверх
X-Vlad
Дата 16.10.2008, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 570
Регистрация: 10.4.2002
Где: Украина, Львов

Репутация: 1
Всего: 5



я б тоже хотел


--------------------
Хорошая штука - комп..:)
www.x-vlad.com
PM MAIL WWW ICQ   Вверх
Rrader
  Дата 16.10.2008, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Inspired =)
***


Профиль
Группа: Экс. модератор
Сообщений: 1535
Регистрация: 7.5.2005

Репутация: 70
Всего: 191



Уточнение по поводу второго задания, чтобы потом не возникало пикантных вопросов. Все константы времени - 60мс, 300мс, 400мс являются условными (т.е. формально нужно использовать их, но фактически время может отличаться), так как Windows не является системой реального времени.


--------------------
Let's do this quickly!
Rest in peace, Vit!
PM MAIL Skype   Вверх
AntonN
Дата 16.10.2008, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 8.8.2006

Репутация: 3
Всего: 18



Rrader, думаю даже без учета rtos временной интервал в 60мс она спокойно выдаст.


--------------------
user posted image
PM MAIL WWW   Вверх
Felan
Дата 16.10.2008, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 284
Регистрация: 2.8.2007
Где: Самара

Репутация: 2
Всего: 7



А в первом задании именно n*m матрица? Или все таки n*n?
Т.е. учитывать надо, что матрица может быть прямоугольной?


--------------------
// Любая сложная система - это темный лес. Каждый в этом лесу протаптывает свои тропинки, по ним и бегает. Лишь изредка, сходя с них, мы находим много интересного, а порою и страшного.
PM MAIL WWW ICQ   Вверх
Alexeis
Дата 16.10.2008, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Цитата(AntonN @  16.10.2008,  11:26 Найти цитируемый пост)
еще вопрос - каким образом будет тестироваться скорость первого задания?

  В первую очередь скорость степень сложности n^2, n log2n , потому если будет спорный вопрос, то можно заюзать QueryPerformanceCounter для подсчета тактов проца.

Цитата(X-Vlad @  16.10.2008,  11:32 Найти цитируемый пост)
я б тоже хотел 

  В принципе если участники не против, я запишу еще одного участника.

Цитата(Felan @  16.10.2008,  12:43 Найти цитируемый пост)
А в первом задании именно n*m матрица? Или все таки n*n?
Т.е. учитывать надо, что матрица может быть прямоугольной? 

  Да, по условию n * m зачем упрощать жизнь smile . За n * n будем снимать балы.

  60 мс это 6 * 10 мс, вполне реальное время для таймера, ну если разик из 100 попыток не успеет, то это скажется только на том что хулиган спасется лишний раз, это не критично.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
AntonN
Дата 16.10.2008, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 8.8.2006

Репутация: 3
Всего: 18



Alexeis
Цитата

Да, по условию n * m зачем упрощать жизнь smile . За n * n будем снимать балы.

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

сдавать проектом или просто листингом?


--------------------
user posted image
PM MAIL WWW   Вверх
Alexeis
Дата 16.10.2008, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Цитата(AntonN @  16.10.2008,  13:45 Найти цитируемый пост)
а смысл вообще рассматривать решение, которое не удовлетвояет условию, соответственно оно не есть решение поставленной задачи?

  Ну мы ж не звери smile , снимем процентов эдак 30 , думаю это будет честнее, а то старался старался, а потом раз и не засчитали. Думаю и балы будут разные за разные задачи. За 1ю много не дадим.

Цитата(AntonN @  16.10.2008,  13:45 Найти цитируемый пост)
сдавать проектом или просто листингом? 

  Как удобно. Проще листингом, так легче будет публиковать.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Poseidon
Дата 16.10.2008, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 53
Всего: 133



Сдавать по степени решения (т.е. по одному) или потом, в конце, все сразу?


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
Rrader
  Дата 16.10.2008, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Inspired =)
***


Профиль
Группа: Экс. модератор
Сообщений: 1535
Регистрация: 7.5.2005

Репутация: 70
Всего: 191



Можно по степени решения.


--------------------
Let's do this quickly!
Rest in peace, Vit!
PM MAIL Skype   Вверх
AntonN
Дата 16.10.2008, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 8.8.2006

Репутация: 3
Всего: 18



уточнение небольшое:
тов. Дворник находится сразу на трех ячейках (ну например на соседние он может метлой ударить smile ) или на одной, а мусор убирается еще и с соседних?


--------------------
user posted image
PM MAIL WWW   Вверх
Alexeis
Дата 16.10.2008, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



  Дворник находиться одновременно на трех ячейках, если в пределах 3х ячеек появился хулиган, то считается что он пойман, т.е. фактически система залпового огня smile . 
  На самом деле это имеет практическую подоплёку, иногда требуется обеспечить синхронное изменение более чем в одной записи, но при этом сохранить доступ других потоков к другим записям, т.е. произвести множественные изменения не блокируя целиком все хранилище. 
Если блокировать записи поочерёдно, то есть ненулевая вероятность того что 2 потока будут охотиться за за общими записями и при этом будут ждать друг-друга и ни один не сможет завершить до конца свою операцию. Чтобы полностью смоделировать такую ситуацию потребуется, чтобы хулиган разбрасывал не по одной бумажке за раз, а больше, это но к сожалению усложнило бы и так непростую задачу, но если кто из участников возьмётся и сумеет, то получит дополнительные балы.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
AntonN
Дата 16.10.2008, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 8.8.2006

Репутация: 3
Всего: 18



Alexeis, ладно, сделал на три.
Вообще, довольно плохо сформулированное задание (я про второе), например, что есть "ячейка"? В принципе, тут потоки как таковые не нужны совершенно (именно при такой формулировке), но раз надо - получай "пустыши" smile


--------------------
user posted image
PM MAIL WWW   Вверх
Virtuals
Дата 16.10.2008, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 476
Регистрация: 27.11.2006

Репутация: 3
Всего: 11



хм а ASM вставки нельзя только в 3 задании?
и еще как будет оцениватся, так-называемые, "нерекомендуемые" конструкции и вункции самой винды
например ктото говорит что absolute нерекомендуют (правда я так и не нашел почему), а мне нравится, при условии что использовать аккуратно.,
или какая либо функция типа пользуйте ее но рекомендуем другую?...

Это сообщение отредактировал(а) Virtuals - 16.10.2008, 17:15
PM MAIL ICQ   Вверх
Alexeis
Дата 16.10.2008, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Цитата(AntonN @ 16.10.2008,  15:49)
Alexeis, ладно, сделал на три.
Вообще, довольно плохо сформулированное задание (я про второе), например, что есть "ячейка"? В принципе, тут потоки как таковые не нужны совершенно (именно при такой формулировке), но раз надо - получай "пустыши" smile

  AntonN, суть задания чтобы на простом задании приобрести опыт в решении сложной задачи на синхронизацию потоков. Что такое ячейка не важно, это некая сущность к которой требуется обеспечить атомарный доступ. Зачем заранее ограничивать людей? Кто-то сделает несколько массивов, кто-то массив записей или объектов, другой воспользуется списками или применит контейнер TObjectList, а может пронаследуется от него и сделает потокобезопасным ресурсом. Включаем фантазию smile .


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1282 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.