Consider all possible dates (formatted DD/MM/YY) within a span of a century , from 01/01/01 to 31/12/00 (20th century!).
In this period there are N
_{ k} dates that can be expressed by k distinct digits, e.g. N
_{1}=1 (11/11/11).
a. Derive the values of N_{ k} for all other values of k (2 to 6).
b. What is the average k for the 20st century?
c. How about the 21st century?
DefDbl AZ
Dim crlf$, ct(6), cw(10)
Function mform$(x, t$)
a$ = Format$(x, t$)
If Len(a$) < Len(t$) Then a$ = Space$(Len(t$)  Len(a$)) & a$
mform$ = a$
End Function
Private Sub Form_Load()
ChDir "C:Program Files (x86)DevStudioVBprojectslooble"
Text1.Text = ""
crlf$ = Chr(13) + Chr(10)
Form1.Visible = True
DoEvents
mo = 1: da = 1: ye = 1900
GoSub GregToJD
j0 = jd
mo = 12: da = 31: ye = 1999
GoSub GregToJD
j1 = jd
For j = j0 To j1
jd = j
GoSub JDToGreg
s$ = Right("0" + LTrim(Str(mo)), 2) + Right("0" + LTrim(Str(da)), 2) + Right(Str(ye), 2)
diffnums = 0
For i = 1 To Len(s$)
If InStr(s$, Mid(s$, i, 1)) = i Then diffnums = diffnums + 1
Next
ct(diffnums) = ct(diffnums) + 1
Next
For i = 0 To 6
Text1.Text = Text1.Text & i & Str(ct(i)) & crlf
Next
Text1.Text = Text1.Text & " done"
Exit Sub
GregToJD:
10100 Rem :greg mo/da/ye > jd at noon
10110 GoSub JulToJD
10120 jd = jd + 2  Int(cw(1) / 100) + Int(cw(1) / 400)
10130 Return
JulToJD:
10150 Rem :jul mo/da/ye > jd at noon
10160 cw(0) = mo: cw(1) = ye: If mo < 3 Then cw(0) = mo + 12: cw(1) = ye  1
10170 jd = Int(365.25 * cw(1)) + Int(30.61 * (cw(0) + 1)) + da + 1720995!
10180 Return
JDToGreg:
10200 Rem:noon jd>greg mo/da/ye
10210 cw(0) = Int((jd  1867216.25) / 36524.25)
10220 cw(0) = jd + 1 + cw(0)  Int(cw(0) / 4)
10230 GoTo CommonFromJD
JTToJul:
10240 Rem : noon jd>jul mo/da/ye
10250 cw(0) = jd
CommonFromJD:
10260 cw(0) = cw(0) + 1524
10265 cw(1) = Int((cw(0)  122.1) / 365.25)
10270 cw(2) = Int(365.25 * cw(1))
10275 cw(3) = Int((cw(0)  cw(2)) / 30.6001)
10280 da = cw(0)  cw(2)  Int(30.61 * cw(3))
10285 ye = cw(1)  4716
10290 mo = cw(3)  1: If mo > 12 Then mo = mo  12: ye = ye + 1
10295 Return
End Sub
finds these counts:
0 0
1 1
2 159
3 3203
4 13791
5 15470
6 3900
adding up to 36524, the number of days between Jan 1, 1900, and Dec 31, 1999 or between Jan 1, 2000, and Dec 31, 2099.
If however we wanted 2000 through 2099, we'd need to count in another Feb 29, 2000 (290200) making the 3 count equal 3204.
Parts b and c:
Using the counts of occurrences as weights for the counts of digits, the weighted sum is 165842; then dividing by the total of 36524 of the weights, gives an average of 4.540630818092214 different digits for a date, the average k. This is for the years 19001999 or for 21002199, as 1900 and 2100 are nonleap years.
However, to be exact about it, the 21st century really is from 2001 through 2100, being forced into the precedent set by there being no year zero so the first century began with year 1. So the 21st century actually fits the previous average, while the 20th century (19012000) had a full complement of 25 leap years, to be described below.
The new stats:
0 0
1 1
2 159
3 3204
4 13791
5 15470
6 3900
make the average 165845/36525 ~= 4.540588637919234, for the 20th century (19012000), or for the popular conception of the 21st century (20002099).
Edited on January 5, 2015, 9:18 pm

Posted by Charlie
on 20150105 15:54:59 