# Fuzzy Time (#99) - Results

**URL:** <https://www.ruby-forum.com/t/fuzzy-time-99-results/74760>\
**Category:** Ruby\
**Created:** [November 7, 2006, 10:55am UTC](https://www.ruby-forum.com/t/fuzzy-time-99-results/74760 "2006-11-07T10:55:19Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![phrogz](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/2acd7d/32.png) [@phrogz](https://www.ruby-forum.com/u/phrogz)\
**Post date:** [November 7, 2006, 10:55am UTC](https://www.ruby-forum.com/t/fuzzy-time-99-results/74760/1 "2006-11-07T10:55:19Z")

</div>

Quiz Summary coming ‘soon’. Until then:

Following are the results I obtained from running my test script against  
everyone’s submissions. (I had to fix minor bugs in a few to make them  
work.) After that is the (updated) test script.

The script runs a full day of time against the class, advancing the time  
uniformly by different numbers of seconds.

For each result, the first line reports whether the class was generally  
fast or slow. (The maximum possible variation is 50% fast or slow.)

The second line is the result of recording, each time the fuzzy time  
changed, how many minutes ahead or behind the actual time the change  
occurred. Ideally, you should see the same percentages spread along the  
whole range.

I didn’t test Louis Scoras’ submission, because it took a (good, but)  
different track for displaying the time, so I knew it wouldn’t pass any  
of my tests.

Loaded suite GavinKistner\_1  
Started  
2 second advance: 3.3% behind, 19.7% ahead  
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5  
0% 0% 1.4% 6.2% 10% 12% 10% 11% 21% 9.7% 17%

6 second advance: 7.0% behind, 11.5% ahead  
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5  
0% 0.7% 5.6% 15% 16% 15% 13% 11% 13% 9.7% 2.1%

17 second advance: 11.3% behind, 12.8% ahead  
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5  
2.1% 9.0% 12% 10% 12% 8.3% 13% 11% 7.6% 5.5% 9.0%

30 second advance: 12.8% behind, 12.9% ahead  
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5  
5.5% 13% 13% 7.6% 11% 9.0% 10% 10% 6.9% 9.7% 3.4%

47 second advance: 14.2% behind, 11.6% ahead  
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5  
7.6% 14% 11% 11% 10% 12% 6.2% 10% 5.5% 5.5% 5.5%

60 second advance: 10.7% behind, 16.0% ahead  
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5  
5.6% 9.7% 6.9% 13% 14% 9.0% 6.3% 5.6% 11% 5.6% 13%

65 second advance: 12.1% behind, 16.8% ahead  
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5  
11% 9.0% 12% 7.6% 6.3% 6.9% 6.3% 13% 11% 9.0% 6.9%

120 second advance: 17.1% behind, 11.8% ahead  
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5  
0% 19% 0% 19% 0% 19% 0% 15% 0% 12% 0%

290 second advance: 16.1% behind, 19.5% ahead  
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5  
7.6% 6.9% 6.2% 3.4% 7.6% 5.5% 6.2% 6.2% 6.9% 5.5% 6.2%

=======

BenGiddings\_1.rb  
\<Mon Nov 13 16:53:02 -0700 2006\> expected but was  
\<Mon Nov 13 16:53:00 -0700 2006\>.

It is 07:45, the clock displayed “07:3~”,  
but it should only display one of [“07:4~”, “07:5~”].  
(Last time I asked, it said it was 07:3~.)

=======

Loaded suite CameronPope\_1  
Started  
2 second advance: 0.0% behind, 38.1% ahead  
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5  
0% 0% 0.7% 0% 0% 0% 0.7% 0% 9.6% 48% 40%

6 second advance: 0.0% behind, 31.7% ahead  
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5  
0% 0% 0% 0.7% 0% 0% 0.7% 12% 32% 36% 18%

17 second advance: 1.4% behind, 19.0% ahead  
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5  
0% 0% 0.7% 4.1% 2.1% 9.6% 18% 19% 25% 16% 4.1%

30 second advance: 3.9% behind, 14.7% ahead  
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5  
0.7% 0.7% 7.6% 2.8% 8.3% 14% 22% 17% 13% 8.3% 4.8%

47 second advance: 6.9% behind, 12.6% ahead  
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5  
2.1% 4.1% 6.2% 6.2% 19% 16% 12% 12% 8.9% 9.6% 3.4%

60 second advance: 13.0% behind, 9.2% ahead  
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5  
12% 7.5% 8.2% 10% 15% 12% 14% 8.9% 8.9% 2.7% 0.7%

65 second advance: 11.1% behind, 10.6% ahead  
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5  
11% 4.8% 5.5% 17% 6.9% 19% 11% 10% 7.6% 3.4% 1.4%

120 second advance: 18.5% behind, 10.6% ahead  
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5  
0% 15% 0% 22% 0% 19% 0% 18% 0% 5.6% 0%

290 second advance: 26.5% behind, 11.1% ahead  
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5  
15% 9.6% 6.6% 4.4% 2.9% 3.7% 5.1% 3.7% 4.4% 0% 0%

=======

DamienPetrelli\_1  
\<Thu Nov 09 14:06:28 -0700 2006\> expected but was  
\<Thu Oct 26 01:15:46 -0600 2006\>.

It is 02:26, the clock displayed “12:5~”,  
but it should only display one of [“02:2~”, “02:3~”].  
(Last time I asked, it said it was .)

=======

Loaded suite DanielLucraft\_1  
Started  
2 second advance: 8.1% behind, 16.0% ahead  
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5  
0.7% 11% 7.6% 9.7% 13% 11% 9.7% 9.7% 9.0% 8.3% 10%

6 second advance: 7.6% behind, 18.8% ahead  
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5  
0% 9.7% 9.7% 8.3% 6.9% 9.0% 12% 8.3% 12% 12% 11%

17 second advance: 9.3% behind, 15.6% ahead  
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5  
0% 12% 11% 9.0% 9.0% 8.3% 14% 9.7% 7.6% 9.0% 9.7%

30 second advance: 7.8% behind, 16.6% ahead  
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5  
0.7% 8.3% 12% 6.9% 12% 9.0% 12% 10% 9.0% 10% 9.0%

47 second advance: 8.6% behind, 14.1% ahead  
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5  
0% 10% 8.9% 6.2% 12% 14% 10% 10% 7.5% 12% 7.5%

60 second advance: 6.7% behind, 19.4% ahead  
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5  
0% 8.3% 9.0% 7.6% 6.3% 9.0% 11% 14% 10% 13% 12%

65 second advance: 8.8% behind, 16.1% ahead  
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5  
0% 8.3% 12% 12% 12% 11% 7.6% 6.2% 9.0% 6.9% 13%

120 second advance: 6.9% behind, 20.7% ahead  
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5  
10% 0% 16% 0% 18% 0% 21% 0% 23% 0% 11%

290 second advance: 7.0% behind, 16.1% ahead  
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5  
7.3% 9.5% 14% 12% 8.0% 12% 10% 4.4% 7.3% 4.4% 2.9%

=======

Loaded suite JeremyHinegardner\_1  
Started  
2 second advance: 0.0% behind, 42.7% ahead  
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5  
0% 0% 0% 0% 0.7% 0% 0% 0% 0.7% 20% 78%

6 second advance: 0.0% behind, 38.3% ahead  
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5  
0% 0% 0% 0% 0% 0.7% 0% 1.4% 9.7% 51% 37%

17 second advance: 0.0% behind, 31.5% ahead  
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5  
0% 0% 0% 0% 0% 2.1% 0.7% 17% 29% 30% 21%

30 second advance: 0.0% behind, 29.5% ahead  
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5  
0% 0% 0% 0.7% 0% 1.4% 8.3% 17% 32% 26% 15%

47 second advance: 0.8% behind, 20.2% ahead  
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5  
0% 0% 0% 0.7% 5.5% 13% 19% 21% 21% 12% 7.5%

60 second advance: 0.8% behind, 24.7% ahead  
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5  
0% 0.7% 0.7% 2.8% 4.1% 7.6% 14% 19% 23% 21% 6.9%

65 second advance: 1.5% behind, 21.2% ahead  
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5  
0% 0.7% 1.4% 2.8% 9.7% 9.0% 17% 17% 21% 16% 5.5%

120 second advance: 6.9% behind, 10.4% ahead  
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5  
0% 10% 0% 17% 0% 34% 0% 30% 0% 7.6% 0%

290 second advance: 8.4% behind, 13.8% ahead  
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5  
9.2% 11% 12% 11% 13% 11% 7.7% 6.3% 7.0% 4.2% 0%

=======

Loaded suite MarcelWard\_1  
Started  
2 second advance: 7.2% behind, 17.6% ahead  
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5  
0% 6.2% 6.8% 8.2% 7.5% 11% 4.1% 17% 14% 14% 11%

6 second advance: 5.4% behind, 18.5% ahead  
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5  
0% 4.2% 4.9% 6.9% 7.6% 10% 12% 16% 15% 9.0% 14%

17 second advance: 8.1% behind, 15.2% ahead  
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5  
0% 8.2% 6.2% 4.8% 11% 16% 12% 8.2% 14% 10% 9.6%

30 second advance: 7.2% behind, 13.7% ahead  
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5  
0% 6.9% 5.5% 7.6% 14% 11% 12% 18% 9.0% 10% 4.1%

47 second advance: 7.5% behind, 16.1% ahead  
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5  
0.7% 6.2% 9.0% 7.6% 12% 10% 9.0% 15% 12% 12% 6.2%

60 second advance: 10.6% behind, 13.5% ahead  
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5  
4.1% 10% 9.7% 9.0% 13% 8.3% 12% 12% 7.6% 9.7% 4.1%

65 second advance: 7.7% behind, 17.8% ahead  
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5  
4.8% 4.8% 9.7% 7.6% 6.9% 9.0% 9.7% 13% 16% 12% 6.2%

120 second advance: 6.4% behind, 14.4% ahead  
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5  
14% 0% 14% 0% 29% 0% 26% 0% 17% 0% 1.4%

290 second advance: 10.1% behind, 16.8% ahead  
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5  
8.4% 9.8% 9.8% 12% 7.7% 9.1% 10% 10% 4.2% 4.9% 0.7%

=======

Loaded suite PaoloNegri\_1  
Started  
2 second advance: 7.8% behind, 9.5% ahead  
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5  
0% 5.5% 8.3% 8.3% 17% 17% 18% 10% 10% 5.5% 0.7%

6 second advance: 7.0% behind, 11.6% ahead  
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5  
0% 2.8% 6.2% 10% 12% 17% 12% 19% 9.0% 9.0% 3.4%

17 second advance: 8.1% behind, 10.7% ahead  
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5  
0.7% 2.8% 10% 8.3% 14% 17% 14% 14% 6.9% 8.3% 2.8%

30 second advance: 8.9% behind, 9.9% ahead  
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5  
0% 7.6% 9.0% 11% 14% 14% 18% 10% 8.3% 5.5% 2.1%

47 second advance: 10.2% behind, 10.5% ahead  
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5  
0.7% 10% 8.3% 9.7% 14% 17% 9.7% 15% 5.5% 6.9% 3.4%

60 second advance: 8.3% behind, 11.3% ahead  
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5  
0% 6.2% 12% 13% 11% 11% 16% 16% 8.3% 4.1% 1.4%

65 second advance: 8.6% behind, 10.7% ahead  
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5  
4.8% 5.5% 4.8% 11% 16% 19% 13% 5.5% 12% 4.1% 2.8%

120 second advance: 6.3% behind, 11.1% ahead  
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5  
0% 8.3% 0% 22% 0% 35% 0% 20% 0% 14% 0%

290 second advance: 9.1% behind, 13.8% ahead  
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5  
6.2% 9.0% 11% 10% 14% 11% 9.7% 9.0% 3.4% 2.8% 0.7%

=======

Loaded suite RobertConn\_1  
Started  
2 second advance: 0.0% behind, 49.7% ahead  
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5  
0% 0% 0.7% 0% 0% 0% 0% 0% 0% 0% 99%

6 second advance: 0.0% behind, 48.9% ahead  
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5  
0% 0% 0% 0% 0% 0.7% 0% 0% 0% 0% 99%

17 second advance: 0.0% behind, 46.9% ahead  
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5  
0% 0% 0% 0% 0% 0.7% 0% 0% 0.7% 9.0% 90%

30 second advance: 0.0% behind, 45.0% ahead  
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5  
0% 0% 0% 0.7% 0% 0% 0% 1.4% 5.5% 18% 74%

47 second advance: 0.0% behind, 42.2% ahead  
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5  
0% 0% 0% 0% 0.7% 2.1% 2.1% 2.8% 10% 23% 59%

60 second advance: 0.1% behind, 42.3% ahead  
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5  
0% 0% 0% 0% 0.7% 1.4% 0.7% 6.9% 12% 22% 57%

65 second advance: 0.1% behind, 41.1% ahead  
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5  
0% 0% 0% 0% 0.7% 2.7% 2.7% 8.9% 13% 20% 51%

120 second advance: 3.6% behind, 27.9% ahead  
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5  
0% 2.1% 0% 9.0% 0% 7.6% 0% 21% 0% 59% 0%

290 second advance: 10.4% behind, 29.5% ahead  
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5  
2.3% 5.5% 3.1% 4.7% 3.1% 5.5% 12% 16% 13% 14% 9.4%

=======

Loaded suite ThomasMueller\_1  
Started  
2 second advance: 0.0% behind, 43.1% ahead  
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5  
0% 0% 0% 0% 0% 0% 0% 0% 1.4% 21% 77%

6 second advance: 0.0% behind, 38.7% ahead  
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5  
0% 0% 0% 0.7% 0% 0% 0% 0.7% 8.3% 46% 44%

17 second advance: 0.1% behind, 28.2% ahead  
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5  
0% 0% 0% 0% 0% 0.7% 4.1% 21% 37% 23% 13%

30 second advance: 0.4% behind, 25.1% ahead  
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5  
0% 0% 1.4% 0% 1.4% 3.4% 10% 24% 30% 19% 10%

47 second advance: 0.8% behind, 21.9% ahead  
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5  
0% 0% 0.7% 0.7% 5.5% 9.0% 19% 19% 20% 16% 9.7%

60 second advance: 1.8% behind, 17.2% ahead  
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5  
0% 0.7% 1.4% 4.1% 9.7% 15% 19% 17% 23% 9.0% 1.4%

65 second advance: 1.9% behind, 21.4% ahead  
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5  
0% 0% 0.7% 4.9% 6.9% 12% 17% 15% 20% 18% 5.6%

120 second advance: 1.7% behind, 19.3% ahead  
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5  
0.7% 0% 8.9% 0% 29% 0% 33% 0% 21% 0% 6.2%

290 second advance: 10.4% behind, 12.4% ahead  
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5  
11% 14% 12% 9.3% 11% 9.3% 7.9% 5.7% 5.7% 2.9% 0.7%

=======

Loaded suite TomPollard\_1  
Started  
2 second advance: 0.0% behind, 46.5% ahead  
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5  
0% 0% 0% 0% 0.7% 0% 0% 0% 0% 5.5% 94%

6 second advance: 0.0% behind, 42.7% ahead  
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5  
0% 0% 0% 0% 0% 0.7% 0% 0% 2.7% 35% 61%

17 second advance: 0.0% behind, 35.5% ahead  
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5  
0% 0% 0% 0% 0% 0.7% 3.5% 6.3% 19% 38% 33%

30 second advance: 0.1% behind, 29.6% ahead  
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5  
0% 0% 0% 0.7% 0.7% 4.8% 6.2% 22% 21% 25% 19%

47 second advance: 0.4% behind, 24.5% ahead  
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5  
0% 0% 0% 1.4% 3.4% 6.8% 16% 20% 18% 25% 7.5%

60 second advance: 1.5% behind, 23.5% ahead  
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5  
0% 2.1% 0% 2.1% 4.8% 14% 12% 14% 20% 21% 9.7%

65 second advance: 1.1% behind, 22.0% ahead  
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5  
0.7% 0% 0.7% 0.7% 6.9% 14% 16% 21% 19% 14% 7.6%

120 second advance: 5.0% behind, 13.1% ahead  
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5  
0% 6.2% 0% 17% 0% 34% 0% 25% 0% 18% 0%

290 second advance: 7.4% behind, 16.4% ahead  
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5  
8.0% 12% 11% 11% 12% 10% 10% 7.2% 5.8% 3.6% 0.7%

=======

Loaded suite TomPollard\_2  
Started  
2 second advance: 0.0% behind, 49.6% ahead  
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5  
0% 0% 0% 0% 0% 0% 0% 0.7% 0% 0% 99%

6 second advance: 0.0% behind, 48.8% ahead  
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5  
0% 0% 0.7% 0% 0% 0% 0% 0% 0% 0.7% 99%

17 second advance: 0.0% behind, 46.9% ahead  
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5  
0% 0% 0% 0% 0.7% 0% 0% 0% 2.1% 15% 82%

30 second advance: 0.0% behind, 40.9% ahead  
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5  
0% 0% 0% 0% 0.7% 0.7% 3.4% 3.4% 14% 24% 53%

47 second advance: 5.0% behind, 22.2% ahead  
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5  
2.8% 4.1% 4.1% 6.9% 8.3% 9.0% 9.7% 10% 12% 16% 16%

60 second advance: 7.7% behind, 19.6% ahead  
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5  
8.3% 3.5% 6.9% 5.6% 7.6% 12% 9.7% 13% 8.3% 8.3% 17%

65 second advance: 15.3% behind, 11.3% ahead  
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5  
12% 9.7% 15% 12% 14% 6.2% 8.3% 6.9% 4.8% 4.1% 4.8%

120 second advance: 7.6% behind, 16.9% ahead  
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5  
0% 12% 0% 11% 0% 18% 0% 33% 0% 22% 0%

290 second advance: 15.1% behind, 16.4% ahead  
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5  
12% 12% 9.7% 7.6% 2.8% 5.5% 6.9% 7.6% 4.1% 5.5% 2.8%

# ======= The test script follows. Each file was run using: ruby -rtest\_fuzzy.rb

require ‘test/unit’

$DEBUG = false

class Time  
def to\_fuzzy  
s = strftime("%H:%M")  
s[4] = “~”  
s  
end  
def short  
strftime("%H:%M")  
end  
def round\_to( seconds )  
seconds = seconds.round  
Time.at( self.to\_i / seconds \* seconds )  
end  
end

RUNS\_PER\_SET = 1  
class FuzzyTimeTester \< Test::Unit::TestCase  
def test\_running  
[2, 6, 17, 30, 47, 60, 65, 120, 290].each{ |advance\_seconds|  
runs, num\_ahead, num\_behind = 0, 0, 0  
offsets = Hash.new(0)

```
  RUNS_PER_SET.times{
    t = Time.at( Time.new + rand( 3600 * 300 ) )
    end_time = t + 60 * 60 * 24 # Run for 24 hours
    ft = FuzzyTime.new( t )
    last_value = nil
    while( t < end_time )
      assert_equal t, ft.actual
      t0 = Time.at( t - 60 * 5 )
      t2 = Time.at( t + 60 * 5 )
      legal_values = [t0, t, t2].map{ |x| x.to_fuzzy }.uniq

      fuzzy_fuzz = ft.to_s

      if last_value
        y,mon,day = t.year, t.mon, t.day
        h,m = last_value.scan(/\d+/).map{ |s| s.to_i }
        m *= 10
        if (m -= 10) < 0
          m %= 60
          if (h -= 1) < 0
            h %= 24
          end
        end
        illegal_old_value = Time.local( y,mon,day,h,m ).to_fuzzy
        legal_values -= [illegal_old_value]
        if $DEBUG
          puts "Now: %s=>%s; legal: %s (was %s, can't be %s)" % [
            t.short, fuzzy_fuzz,
            legal_values.inspect, last_value,
            illegal_old_value
          ]
        end
      end

      assert_block( ( "It is %s, the clock displayed %s,\n" +
                    "but it should only display one of %s.\n" +
                    "(Last time I asked, it said it was %s.)" ) % [
      	t.short, fuzzy_fuzz.inspect,
      	legal_values.inspect,
      	last_value
      ] ){
        legal_values.include?( fuzzy_fuzz )
      }

      actual_fuzz = t.to_fuzzy
      ahour, amin = actual_fuzz.scan( /\d+/ ).map{ |x| x.to_i }
      fhour, fmin = fuzzy_fuzz.scan( /\d+/ ).map{ |x| x.to_i }
      if fuzzy_fuzz != actual_fuzz
        if fmin>amin || fhour>ahour || ( fhour==0 && ahour==23 )
          num_ahead += 1
        else
          num_behind +=1
        end
      end

      if fuzzy_fuzz != last_value
        ahour2, amin2 = t.short.scan( /\d+/ ).map{ |x| x.to_i }
        if fmin>amin || fhour>ahour || ( fhour==0 && ahour==23 )
          offset = ( fmin*10 - amin2 ) % 60
        else
          offset = ( fmin*10 - amin2 )
        end
        offsets[offset] += 1
        if $DEBUG
          puts ( "It is %s, I just switched from %s to %s, " +
                 "and I think that's an offset of %+d" ) % [
          	t.short, last_value, fuzzy_fuzz, offset
          ]
        end
      end
      runs += 1
      last_value = fuzzy_fuzz
      ft.advance( advance_seconds )
      t += advance_seconds
    end
  }

  puts "%d second advance: %.1f%% behind, %.1f%% ahead" % [
    advance_seconds,
    100.0 * num_behind / runs,
    100.0 * num_ahead / runs
  ]
  total_offsets = offsets.inject(0){ |sum,kv| sum+kv[1] }
  -5.upto(5){ |o|
    print "#{o>0?'+':''}#{o}".center( 5 )
  }; print "\n"
  -5.upto(5){ |o|
    pct = 100.0 * offsets[o] / total_offsets
    print( ( "%.#{(pct<10&&pct>0)?1:0}f%" % pct ).center( 5 ) )
  }; puts "\n "
}

```

end  
end

---

<div class="post-metadata">

**Author:** ![phrogz](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/2acd7d/32.png) [@phrogz](https://www.ruby-forum.com/u/phrogz)\
**Post date:** [November 7, 2006, 10:56am UTC](https://www.ruby-forum.com/t/fuzzy-time-99-results/74760/2 "2006-11-07T10:56:06Z")

</div>

On 02/11/06, Gavin K. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> The second line is the result of recording, each time the fuzzy time  
> changed, how many minutes ahead or behind the actual time the change  
> occurred. Ideally, you should see the same percentages spread along the  
> whole range.

I see now why the quiz mentioned that we might need to assume a  
regular observation period of e.g. 7 seconds - to allow us to even out  
the distribution of times. However, to do this would also require  
that we know what the total duration of the observation was.  
Otherwise surely the only solution to ensure roughly average counts of  
-5 to +5 would be to start by wandering slowly from -5 mins to +5 mins  
then back (a bit more quickly) to -5 mins again… and repeat?

Then after doing that a few times you might think you can become a bit  
more random and wiggle the wandering a bit… but who’s to say that  
the observer isn’t going to start the statistics from this point on?  
Then you’re going to look a bit silly with all that extra wiggling and  
not averaging out the times.

So better stick to just wandering back and forth, back and forth like  
clockwork… is this random? 🙂

When I tried increasing the RUNS\_PER\_SET value in Gavin’s  
FuzzyTimeTester from 1 to about 15, I noticed some results take on a  
more gaussian distribution with a slight weighting to the right  
because of the “can’t go back in time” condition.

I’m starting to think that this may be the only truely random result  
given some of the conditions of the quiz… but I hope I can be proved  
wrong!

Now looking forward to the conclusion and letting my brain relax at last  
🙂
