Ralph G Selfridge wrote:
> Here are two versions, a corrected day  and day2.  day2 is only monadic,
> and becaues of the changes is faster.
> 
> day=: 3 : 0 0 day y
> :
> if. x do.  y=.0 100 100#: y end.
> g=.365&* + -/@:(<.@:%&4 100 400)
> m=.31 59 90 120 151 181 212 243 273 304 334
> (g <:{.y)+({:y)+(1{y){0 0,m+0,10#-/0=4 100 400|{.y
> )
> 
> day2=: 3 : 0 if. 1=#y do.  y=.0 100 100#: y end.
> g=.(365&* + -/@:(<.@:%&4 100 400))<:{.y
> m=.0 0 31, 59 90 120 151 181 212 243 273 304 334+0-/ .= 4 100 400|{.y
> g +({:y)+(1{y){m
> )
> 
> Here some timings
> ts'todayno 2891 12 5'
> .00021  6464
> ts'day 2891 12 5'
> .00013  6848
> ts'day2 2891 12 5'
> .00010  3648

Once you convert day to permit an array of dates, then there is not much
difference between this and todayno. Let me know if you can speed this
up significantly.

day=: 3 : 0
0 day y
:
if. x do. y=. 0 100 100#: y end.
'y m d'=. <"_1 |: ((*/r=.}:$y),{:$y) $ ,y
l=. -/ 0 = 4 100 400 |/ y
m=. (l * m > 2) + m { 0 0 31 59 90 120 151 181 212 243 273 304 334
y=. (365*y) + -/"1 <. (y-1) %/ 4 100 400
r $ d + m + y - 657437
)

  D=: todate (i.10 200) + todayno 2000 1 1
  (day D) -: todayno D
1
   timex &> 'day D';'todayno D'  NB. all about the same
0.001207 0.0012
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to