Posts Tagged perl
Because Perl is Too Straightforward…
Posted by Andrew Flanagan in Geekiness, Somewhat Random on March 20, 2009
…someone created Perligata.
Here’s an example:
#! /usr/local/bin/perl -w use Lingua::Romana::Perligata; maximum inquementum tum biguttam egresso scribe. meo maximo vestibulo perlegamentum da. da duo tum maximum conscribementa meis listis. dum listis decapitamentum damentum nexto fac sic nextum tum novumversum scribe egresso. lista sic hoc recidementum nextum cis vannementa da listis. cis. |
is equivalent to:
#! /usr/local/bin/perl -w print STDOUT 'maximum:'; my $maxim = <STDIN>; my (@list) = (2..$maxim); while ($next = shift @list) { print STDOUT $next, "\n"; @list = grep {$_ % $next} @list; } |
Easter Fun!
Posted by Andrew Flanagan in Geekiness on March 24, 2008
So — on what date does Easter fall? Now YOU can impress your friends by using either of the Perl scripts below… Thanks to this site which supplied both Butcher’s and Oudin’s algorithm:
Butcher’s Algorithm in Perl (1876 — and the Perl code is almost that old too! 🙂 )
sub GetEasterDate { my($year)=@_; my $a=$year%19; my $b=int($year/100); my $c=$year%100; my $d=int($b/4); my $e=$b%4; my $f=int(($b+8)/25); my $g=int(($b-$f+1)/3); my $h=(19*$a+$b-$d-$g+15)%30; my $i=int($c/4); my $k=$c%4; my $l=(32+2*$e+2*$i-$h-$k)%7; my $m=int(($a+11*$h+22*$l)/451); my $month=int(($h+$l-7*$m+114)/31); my $p=($h+$l-7*$m+114)%31; my $day=$p+1; return($month."/".$day."/".$year."\n"); }; |
Oudin’s Method in Perl (1940)
sub GetEasterDate { my($year)=@_; my $century = int($year / 100); my $G = $year % 19; my $K = int(($century - 17) / 25); my $I = ($century - int($century / 4) - int(($century - $K) / 3) + 19 * $G + 15) % 30; my $I = $I - (int($I / 28)) * (1 - int($I / 28) * int(29 / ($I + 1)) * int((21 - $G) / 11)); my $J = ($year + int($year / 4) + $I + 2 - $century + int($century / 4)) % 7; my $L = $I - $J; my $month = 3 + int(($L + 40) / 44); my $day = $L + 28 - 31 * int($month / 4); return($month."/".$day."/".$year."\n"); }; |
The second algorithm is more efficient. If I run 100,000 years of calculations I get about .035ms better performance over the “older” method.
For those of us who just “want the facts”, here you go:
- 4/12/2009
- 4/4/2010
- 4/24/2011
- 4/8/2012
- 3/31/2013
- 4/20/2014
- 4/5/2015
- 3/27/2016
- 4/16/2017
- 4/1/2018
- 4/21/2019
- 4/12/2020
- 4/4/2021
- 4/17/2022
- 4/9/2023
- 3/31/2024
- 4/20/2025
- 4/5/2026
- 3/28/2027
- 4/16/2028
- 4/1/2029
- 4/21/2030
- 4/13/2031
- 3/28/2032
- 4/17/2033
- 4/9/2034
- 3/25/2035
- 4/13/2036
- 4/5/2037
- 4/25/2038
- 4/10/2039
- 4/1/2040
- 4/21/2041
- 4/6/2042
- 3/29/2043
- 4/17/2044
- 4/9/2045
- 3/25/2046
- 4/14/2047
- 4/5/2048
- 4/18/2049
Oh, and if you’re looking for a pattern, there is one: Every 5,700,000 years.
Thanks to yesterday’s Slashdot post for getting me interested in this.