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: Stephane Chazelas
Subject: Re: Only one Friday 13th coming in 2016
Date: Tue, 22 Dec 2015 14:18:00 +0000
User-agent: Mutt/1.5.21 (2010-09-15)

2015-12-22 08:16:28 -0500, Greg Wooledge:
[...]
> t=946702800   # Start at Sat Jan  1 12:00:00 EST 2000
> endyear=2036
> 
> while true; do
>   printf -v year '%(%Y)T' "$t"
>   ((year > endyear)) && break
>   printf -v day  '%(%d)T' "$t"
>   printf -v dow  '%(%w)T' "$t"
>   if [[ $day = 13 && $dow = 5 ]]; then
>     printf -v month '%(%m)T' "$t"
>     echo "$year-$month-$day"
>   fi
>   ((t += 86400))
> done
> 
> But just because it doesn't fork, doesn't mean it's *fast*.  Bash is so
> slow at everything. :(  Your one-fork-per-month loop (plus one fork per
> year) might end up being much faster than my zero-forks-per-day loop.
> Mine is portable, though.
[...]

(assumes a recent version of bash though).

Starting on a Friday and looping with ((t += 7*86400)) and look
for %d == 13 would be more efficient.

TZ=UTC0 perl -MPOSIX -le 'for ($i=86400;$i<2**31;$i+=7*86400) {
@t=gmtime($i); if ($t[3] == 13){print strftime"%c",@t}}'

only takes a few miliseconds here.
-- 
Stephane



reply via email to

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