 Your skill will accomplishwhat the force of many cannot PerlMonks

### Re^2: What about Easter?

by pg (Canon)
 on Jul 24, 2005 at 17:24 UTC ( #477590=note: print w/replies, xml ) Need Help??

in reply to Re: What about Easter?
in thread What about Easter?

Okay I ported whatever is in the last post of that thread to Perl: (only tested with this year though)

```print easter_date(2005);

sub easter_date {
my \$Year = shift;
\$G = \$Year % 19;
\$C = int(\$Year / 100);
\$H = int(\$C - (\$C / 4) - ((8*\$C+13) / 25) + 19*\$G + 15) % 30;
+
\$I = \$H - int(\$H / 28)*(1 - int(\$H / 28)*int(29 / (\$H + 1))*(
+int(21 - \$G) / 11));
\$J = (\$Year + int(\$Year/4) + \$I + 2 - \$C + int(\$C/4)) % 7;
\$L = \$I - \$J;
\$m = 3 + int((\$L + 40) / 44);
\$d = \$L + 28 - 31 * (int(\$m / 4));
\$y = \$Year;
return sprintf("%04d-%02d-%02d", \$y, \$m, \$d);
}
[download]```

Replies are listed 'Best First'.
Re^3: What about Easter?
by greenFox (Vicar) on Jul 25, 2005 at 02:24 UTC

DON'T USE THIS CODE!

I wrote a quick and dirty compare of the date calculated by this sub against the list in the zip file at Easter Sunday Dates and found it to be 22% inaccurate. Good enough for PHP perhaps? *grin*

Yes I get that the thread was a joke :)

Update: see Re^3: What about Easter? by themage for an updated subroutine which does not produce any erros when compared to the list.

--
Murray Barton
Do not seek to follow in the footsteps of the wise. Seek what they sought. -Basho

Re^3: What about Easter?
by themage (Friar) on Jul 25, 2005 at 12:19 UTC
There is a small error in the PHP version, that pg ported here: <updated, wrong name>.

The line
```\$H = int(\$C - (\$C / 4) - ((8*\$C+13) / 25) + 19*\$G + 15) % 30;
[download]```

Should be:
```\$H = (\$C - int(\$C / 4) - int((8*\$C+13) / 25) + 19*\$G + 15) % 30;
[download]```

The final sub sould look like:

```
sub easter_date {
my \$Year = shift;
my (\$G,\$C,\$H,\$I,\$J,\$L)="0"x6;
\$G = \$Year % 19;
\$C = int(\$Year / 100);
\$H = (\$C - int(\$C / 4) - int((8*\$C+13) / 25) + 19*\$G + 15) % 30;
\$I = \$H - int(\$H / 28)*(1 - int(\$H / 28)*int(29 / (\$H + 1))*(int(21
+- \$G) / 11));
\$J = (\$Year + int(\$Year/4) + \$I + 2 - \$C + int(\$C/4)) % 7;
\$L = \$I - \$J;
my \$m = 3 + int((\$L + 40) / 44);
my \$d = \$L + 28 - 31 * (int(\$m / 4));
my \$y = \$Year;
return sprintf("%04d-%02d-%02d", \$y, \$m, \$d);
}
[download]```
This way, I think that it should be ok. What you think greenFox?

That fixed it. With your updated sub I got 0 errors for 2517 dates. Well spotted.

--
Murray Barton
Do not seek to follow in the footsteps of the wise. Seek what they sought. -Basho

Re^3: What about Easter?
by m.att (Pilgrim) on Jul 24, 2005 at 17:35 UTC
Too SLOW! Must be in CORE!

Log In?
 Username: Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://477590]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others romping around the Monastery: (4)
As of 2021-04-13 19:55 GMT
Sections?
Information?
Find Nodes?
Leftovers?
Voting Booth?

No recent polls found

Notices?