parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Зачем так сложно :)

VictorSmirnov 14.10.2003 15:33

Комментариев у меня больше чем вычислений,
но, думаю, мой вариант проще :)
@wn[d][fd;wd]
# $fd - первый день года
	$fd[^date::create($d.year;1;1)]
# $sd - дата конца первой недели. нумерация с 1
	^if($fd.weekday == 0){ $sd(1) }{ $sd(8 - $fd.weekday) }
# Находим k, такое что 
# $d.yearday + 1 = $sd + 1 + 7*k + m, где 0 <= m < 7
# В левой части у нас текущий день (начиная с 1)
# В правой части мы от первого дня второй недели отступаем ровное
# количество недель и еще меньше семи дней. Сколько недель отступили
# показывает искомая величина k
# нетрудно видеть, что 
# k = ( $d.yearday - $sd ) \ 7
# Число недель равно k+2. Действительно, первую неделю мы пропустили
# потом k недель отступили и уже идет (k+1) + 1 неделя
	^if($d.yearday < $sd){
# это тот редкий случай, когда наша формула не работает :)
		$result(1)
	}{
		$result(($d.yearday - $sd)\7 + 2)
	}
Кстати, ваш вариант не работает для первого января, например.