bug-bash
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Only one Friday 13th coming in 2016


From: Ken Irving
Subject: Re: Only one Friday 13th coming in 2016
Date: Tue, 22 Dec 2015 10:59:18 -0900
User-agent: Mutt/1.5.20 (2009-06-14)

On Tue, Dec 22, 2015 at 04:04:16AM +0100, Ángel González wrote:
> Bill Duncan wrote:
> > Remember that while there are 14 patterns of years, leap years don't
> > impact Friday the 13th for January/February..
> > 
> > This isn't an exhaustive analysis, but a quick check for 300 years
> > didn't show any years without a Friday 13th..
> > 
> > ;-)
> > 
> > $ for y in {1900..2199} ; do for m in {1..12};do cal $m $y|awk
> > 'FNR==1{m=$0}/^ 1/{print m}';done;done | awk '{y[$2]++} END {for
> > (i=1900;i<2200;i++) if (!(i in y)) print i}'
> > $
> 
> 
> Aren't you making things more complex than needed, with so much pipes
> and awk?
> 
> date(1) is your friend:
> 
> For instance:
>  $ for y in {1900..2199} ; do echo -n "$y "; for m in {1..12}; do date +%A -d 
> $y-$m-13; done | grep -c Friday ; done
> 
> shows there are between 1 and 3 Fridays per year.
> 
> 
> Or a mere listing:
>  $ for y in {1900..2199} ; do for m in {1..12}; do date +%A -d $y-$m-13; 
> done; done | sort | uniq -c | sort -rn
> 
> That the most common weekday in these three centuries for the 13th is??? you 
> guessed it, Friday.

Can't resist... cal(1)'s ncal option/version puts all Fridays on a line, so...

    $ for y in {1900..2199}; do ncal $y | grep ^Fr | tr \  \\n |
        grep 13 | wc -l; done | sort | uniq -c
        128 1
        128 2
         44 3
    
and using the full range of cal(1) years:

    $ time for y in {1..9999}; do ncal $y | grep ^Fr | tr \  \\n |
        grep 13 | wc -l; done | sort | uniq -c
       4274 1
       4258 2
       1467 3
    
    real    0m52.301s
    user    0m33.116s
    sys     0m11.816s

and one more pass to count 'Friday the 13th' per month, but I guess
there can only be 0 or 1 anyway, so probably not very interesting:

    $ time for m in {1..12}; do echo m=$m; for ((y=1; y<9999+1; y+=1)); \
        do ncal $m $y| grep ^Fr | tr \  \\n | grep 13 | wc -l; done |
        sort | uniq -c; done 
    m=1
       8552 0
       1447 1
    m=2
       8574 0
       1425 1
    m=3
       8552 0
       1447 1
    ...
    m=11
       8553 0
       1446 1
    m=12
       8573 0
       1426 1
    
    real    10m25.149s
    user    6m57.916s
    sys 2m4.284s

I cheated and edited and filtered the above output to show counts by
month:

    1403 8
    1405 10
    1425 2
    1425 6
    1426 12
    1426 9
    1446 11
    1447 1
    1447 3
    1447 4
    1447 5
    1447 7

For some reason August and October have the fewest Friday the 13th's.




reply via email to

[Prev in Thread] Current Thread [Next in Thread]