Re: Синьор программисты и задачки comptuer science

Re: Синьор программисты и задачки comptuer science

"Ivan Krivyakov" <i.van@verizon.net> wrote in message
news:frn3qj$1fd9$1@mamba.crocodile.org...


Мне понравилась задачка - напишите календарь, который для
комбинации дата+страна выдает Boolean - рабочий день/
нерабочий день.

Задачку можно усложнять до бесконечности на самом деле,
пока позволяет время.

Начать, понятно, с тривиального - суббота/воскресенте везде выходной.
Потом можно добавить мусульманские страны, где выходной - четверг/пятница
и Израиль - где пятница-суббота.

Далее - праздники. Простые - с фиксированной датой: 25-го декабря в
таком-то списке стран праздник. Потом добавить национальные праздники,
которые у всех свои, потом - плавающие праздники типа
"1-й понедельник ноября", потом - хитро плавающие праздники
типа Пасхи и Рош-ха-Шаны.

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


Я бы наверное начал с того, что ввел бы HolidayRule интерфейс
и множество "команд"-имплементаций для разных стран.

public interface HolidayRule {
Boolean isHoliday(Date date);
}

Внешний "фасад" обращается к фактори, которая возвращает
HolidayRule by Country,

Boolean isHoliday(Date date, Country country) {
return factory.holidayRule(country).isHoliday(date);
}

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

Миша

Re: Синьор программисты и задачки comptuer science

Mikhail Kimmelman wrote:



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


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

Этот способ мне показался сначала натужным и экзотическим (делов -то - дату
расчитать!)
Однако опыт показал, что для глобальной финансовой программы это решение было
единственно верным.


--
Привет. Иаков
--- -- -- -- -- -- --- -- ---
ICQ № 24392270 / Skype:senatov

Re: Синьор программисты и задачки comptuer science


"Mikhail Kimmelman" <mikhail.kimmelman@gmail.com> wrote in message
news:frqaj4$19pb$1@mamba.crocodile.org...

"Ivan Krivyakov" <i.van@verizon.net> wrote in message
news:frn3qj$1fd9$1@mamba.crocodile.org...


Мне понравилась задачка - напишите календарь, который для
комбинации дата+страна выдает Boolean - рабочий день/
нерабочий день.

Задачку можно усложнять до бесконечности на самом деле,
пока позволяет время.

Начать, понятно, с тривиального - суббота/воскресенте везде выходной.
Потом можно добавить мусульманские страны, где выходной - четверг/пятница
и Израиль - где пятница-суббота.

Далее - праздники. Простые - с фиксированной датой: 25-го декабря в
таком-то списке стран праздник. Потом добавить национальные праздники,
которые у всех свои, потом - плавающие праздники типа
"1-й понедельник ноября", потом - хитро плавающие праздники
типа Пасхи и Рош-ха-Шаны.

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


Я бы наверное начал с того, что ввел бы HolidayRule интерфейс
и множество "команд"-имплементаций для разных стран.

public interface HolidayRule {
Boolean isHoliday(Date date);
}

Внешний "фасад" обращается к фактори, которая возвращает
HolidayRule by Country,

Boolean isHoliday(Date date, Country country) {
return factory.holidayRule(country).isHoliday(date);
}

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


Вот именно, а потом бегать с задачками как найти список все праздников за
меньшее чем О(366)?