Buona Pasqua con Perl!

Nel mondo anglosassone non ci sono soprese dentro alle uova di Pasqua, ma sono proprio le uova le soprese da trovare. Per questo buffe funzionalità nascoste nei programmi sono chiamate Easter eggs. Per augurare buona Pasqua non infilerò scherzetti nei programmi bioinformatici, ma rilascio l’implementazione in Perl semplice semplice dell’algoritmo più usato per calcolare la data di Pasqua in un dato anno.

The code is also here

#!/usr/bin/env perl

my $year = shift(@ARGV);
my $april = 'Aprile';
my $march = 'Marzo';

print "Uso: easter.pl ANNO\n" if ($year < 1000); print "Calendario gregoriano: " . easter($year, 1) ." $year\n"; 
print "Calendario giuliano: " . easter($year, 0) ." $year\n"; 

sub easter { 
       my ($year, $gregorian) = @_; 
       my $a = $year % 19; my $b = $year % 4; my $c = $year % 7; my $M = 15; my $N = 6; 
       if ($gregorian > 0) {
		if    ($year > 1582 and $year <= 1699) { 
		   $M = 22; $N = 2; 
		 } elsif ($year >= 1700 and $year <= 1799){ 
		   $M = 23; $N = 3; 
		 } elsif ($year >= 1800 and $year <= 1899){ 
		   $M = 23; $N = 4; 
		 } elsif ($year >= 1900 and $year <= 2099){ 
		   $M = 24; $N = 5; 
		 } elsif ($year >= 2100 and $year <= 2199){ 
		   $M = 24; $N = 6; 
		 } elsif ($year >= 2200 and $year <= 2299){ 
		   $M = 25; $N = 0; 
		 } elsif ($year >= 2300 and $year <= 2399){ 
		   $M = 26; $N = 1; 
		 } elsif ($year >= 2400 and $year <= 2499){ 
		   $M = 25; $N = 1; }
		else { return ""; }
	}

	my $d = (19 * $a + $M) % 30;
	my $e = (2*$b + 4*$c + 6*$d + $N) % 7;

	if ( ($d + $e) < 10) {
		my $day = $d + $e + 22;
		return "$day $march";
	} else {
		my $day = $d + $e - 9;
		return "$day $april";
	}
}

Be the first to leave a comment. Don’t be shy.

You must be logged in to post a comment.