En af mange

Kommentarer om alt og ingenting

Far, Hvor Lang Tid Tager Det at Tælle Til en Million?

Ja - det er en af udfordringerne ved at få børn. Man får spørgsmål som man ikke rigtig kan svare på.

Til gengæld nåede jeg at tælle til 214 inden August fik taget tøj på i morges - hvilket efter min mening er tæt på en evighed.

Det var også her jeg tænkte, at det burde være relativt let at besvare Augusts spørgsmål - så jeg fik hacket noget forfærdeligt pythonkode sammen, der bruger den indbyggede talesynthesizer til at sige et udvalg af numrene mellem en og en million og på den baggrund estimere hvor lang tid det tager.

Her er koden - så i kan selv køre den i terminalen. Selv bruger jeg Ida som stemme - så får man det på dansk. Man kan muligvis selv tælle noget hurtigere, men det er en anden snak.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import os, sys, random, time

def CountInBetween(minNum, maxNum, samplePercentage, maxSamples):
    i = 0;

    t0 = time.time()

    sampleSize = round((maxNum - minNum) * (samplePercentage / 100.0))
    sampleSize = min(sampleSize, maxSamples)

    while (i< sampleSize):
        i += 1
        sample = int(random.uniform(minNum, maxNum))
        os.system("say " + str(sample))

    loopTime = time.time() - t0
    totalEstimate = loopTime * (maxNum - minNum) / sampleSize
    return int(round(totalEstimate))

minNum = 1
maxNum = 10
totalTime = 0;
while (maxNum < 1000000000000):
    totalTime += CountInBetween(minNum, maxNum, 10, 10)
    totalDays = totalTime / (3600 * 24)
    print "Total estimat for at taelle til %i er %i sekunder (%i dage)" % (maxNum, totalTime, totalDays)
    minNum = maxNum + 1;
    maxNum *= 10

Og hvad er så resultatet?

Tæl til sekunder dage
10 5 0.0
100 101 0.0
1 000 1 331 0.0
10 000 1 841 0 0.2
100 000 220 532 2.6
1 000 000 2 726 460 31.6
10 000 000 33 739 892 390.5
100 000 000 381 702 550 4 417.9
1 000 000 000 4 171 782 910 48 284.5
10 000 000 000 48 898 999 030 565 960.6
- 100 000 000 000 - - 534 132 648 994 - - 6 182 090.8 -