For the "international" version:
DEFDBL A-Z
FOR a = 1 TO 9
used(a) = 1
m1 = 10000000 * a
FOR b = 1 TO 9
IF used(b) = 0 THEN
used(b) = 1
m2 = m1 + 1000000 * b
FOR c = 1 TO 9
IF used(c) = 0 THEN
used(c) = 1
m3 = m2 + 100000 * c
FOR d = 1 TO 9
IF used(d) = 0 THEN
used(d) = 1
m4 = m3 + 10000 * d
FOR e = 1 TO 9
IF used(e) = 0 THEN
used(e) = 1
m5 = m4 + 1000 * e
FOR f = 1 TO 9
IF used(f) = 0 THEN
used(f) = 1
m6 = m5 + 100 * f
FOR g = 1 TO 9
IF used(g) = 0 THEN
used(g) = 1
m7 = m6 + 10 * g
FOR h = 1 TO 9
IF used(h) = 0 THEN
used(h) = 1
m8 = m7 + h
permCt = permCt + 1
n = m8 / .40468564224#
trunc = INT(n)
round = INT(n + .5)
IF ABS(round - n) < .000000001# THEN PRINT "warning--close:"; m8, n
REDIM dused(9): usedCt = 0
ns$ = LTRIM$(STR$(trunc))
FOR i = 1 TO LEN(ns$)
dig = VAL(MID$(ns$, i, 1))
IF dused(dig) = 0 THEN usedCt = usedCt + 1
IF usedCt > 2 THEN EXIT FOR
dused(dig) = 1
NEXT i
IF usedCt = 2 THEN hitCt = hitCt + 1: PRINT m8, n
used(h) = 0
END IF
NEXT
used(g) = 0
END IF
NEXT
used(f) = 0
END IF
NEXT
used(e) = 0
END IF
NEXT
used(d) = 0
END IF
NEXT
used(c) = 0
END IF
NEXT
used(b) = 0
END IF
NEXT
used(a) = 0
NEXT
PRINT USING "#### ######### #.################"; hitCt; permCt; hitCt / permCt
PRINT permCt / hitCt
finds
M N
13489526 33333344.68041245
13489562 33333433.63834978
13489726 33333838.89117539
13578642 33553555.11216073
15287946 37777337.28179425
17852469 44114411.62375744
17985624 44443444.79445004
17986253 44444999.08729947
18394765 45454454.22323862
18435679 45555554.91901209
24935176 61616161.77430906
24935178 61616166.71641669
26573948 65665655.57628616
26938574 66566666.04451463
27869351 68866666.10097326
29431685 72727277.49146448
29431865 72727722.28115113
29431867 72727727.22325876
35971648 88887878.01042596
36425718 90009909.41605392
45189672 111666111.3793608
45289176 111911991.1181359
47829315 118188811.2838821
53147896 131331311.1525723
and the following statistics:
24 362880 0.0000661375661376
15120
indicating there were 24 values of M for which [N] used two distinct digits. This was out of P(9,8) = 362,880 valid values of M, making the probability ~= 0.0000661375661376, or 0.00661375661376 %, or 1/15,120.
Substituting the US survey acre value, we get:
M N
13489562 33333300.3037128
13489576 33333334.89832782
13489657 33333535.05288618
13894267 34333344.13756108
13894672 34334344.91035289
14826379 36636633.83760429
17536489 43333434.70379217
17986234 44444774.35626519
17986325 44444999.22126286
19768345 48848448.92609555
19768523 48848888.77191516
25198347 62266222.41019838
26815479 66262226.623437
26897314 66464444.50348043
26897315 66464446.97452436
26958714 66616166.60080634
28614537 70707777.97475567
31467582 77757777.50513376
35612479 88000000.0790734
35749621 88338883.98577487
35927681 88778878.06802003
35976248 88898889.25858726
36458279 90090009.03539684
37198526 91919191.89173587
45128763 111515155.8971361
45169823 111616616.9609179
45783619 113133333.8412152
53148927 131333333.4700644
57239416 141441111.4858394
62789315 155155155.7240642
62935148 155515515.4735647
89521764 221212211.5699609
92156487 227722727.8473685
so this time 33 hits out of the 362880 valid permutations, for a probability of 0.0000909391534392 or 0.00909391534392 % or 1/10996.3636363636....
Recognizing that my definition of a close call might be deficient, I rewrote the program for UBASIC, giving increased accuracy and found only two instances of close calls as to whether N was slightly above or below an integer, and in neither case could the digits in the integer part be merely two distinct ones :
13489526 33333344.6804124503097782782
13489562 33333433.6383497784893014988
13489726 33333838.8911753846404628371
13578642 33553555.1121607293762040518
warning--close: 14275698 35276018.0000004934244836435
15287946 37777337.2817942452584007465
warning--close: 17289653 42723662.9999991966163828837
17852469 44114411.6237574379091865131
17985624 44443444.7944500419206987432
17986253 44444999.0872994703907016811
18394765 45454454.223238616873754395
18435679 45555554.9190120929018946179
24935176 61616161.7743090603083885888
24935178 61616166.7164166896516954344
26573948 65665655.5762861551313687268
26938574 66566666.044514621432308672
27869351 68866666.1009732589902172668
29431685 72727277.4914644819688658225
29431865 72727722.2811511228664819256
29431867 72727727.2232587522097887711
35971648 88887878.0104259525027666043
36425718 90009909.4160539101724549998
45189672 111666111.379360805873770419
45289176 111911991.1181358940759521841
47829315 118188811.2838821331296765244
53147896 131331311.1525723102627374537
24 362880 0.0000661375661375661
15120.0
from
100 dim Used(9)
110 for A=1 to 9
120 Used(A)=1
130 M1=10000000*A
140 for B=1 to 9
150 if Used(B)=0 then
160 :Used(B)=1
170 :M2=M1+1000000*B
180 :for C=1 to 9
190 :if Used(C)=0 then
200 :Used(C)=1
210 :M3=M2+100000*C
220 :for D=1 to 9
230 :if Used(D)=0 then
240 :Used(D)=1
250 :M4=M3+10000*D
260 :for E=1 to 9
270 :if Used(E)=0 then
280 :Used(E)=1
290 :M5=M4+1000*E
300 :for F=1 to 9
310 :if Used(F)=0 then
320 :Used(F)=1
330 :M6=M5+100*F
340 :for G=1 to 9
350 :if Used(G)=0 then
360 :Used(G)=1
370 :M7=M6+10*G
380 :for H=1 to 9
390 :if Used(H)=0 then
400 :Used(H)=1
410 :M8=M7+H
420 :
430 :PermCt=PermCt+1
440 :N=M8/0.40468564224
450 :Trunc=int(N)
460 :Round=int(N+0.5)
470 :if abs(Round-N)<0.000001 then print "warning--close:";M8,N:endif
480 :dim Dused(9):UsedCt=0
490 :Ns$=cutspc(str(Trunc))
500 :for I=1 to len(Ns$)
510 :Dig=val(mid(Ns$,I,1))
520 :if Dused(Dig)=0 then UsedCt=UsedCt+1:endif
540 :Dused(Dig)=1
550 :next I
560 :if UsedCt=2 then HitCt=HitCt+1:print M8,N:endif
570 :erase Dused()
580 :Used(H)=0
590 :endif
600 :next H
610 :Used(G)=0
620 :endif
630 :next G
640 :Used(F)=0
650 :endif
660 :next F
670 :Used(E)=0
680 :endif
690 :next E
700 :Used(D)=0
710 :endif
720 :next D
730 :Used(C)=0
740 :endif
750 :next C
760 :Used(B)=0
770 :endif
780 :next B
790 :Used(A)=0
800 :next A
810
820 print HitCt;PermCt;HitCt/PermCt
830 print PermCt/HitCt
|
Posted by Charlie
on 2010-10-31 14:25:51 |