home *** CD-ROM | disk | FTP | other *** search
/ Columbia Kermit / kermit.zip / ckscripts / easter2 < prev    next >
Lisp/Scheme  |  2020-01-01  |  1KB  |  33 lines

  1. #!/usr/local/bin/kermit +
  2. #
  3. # e a s t e r - Calculates date of Easter for any year between 1900 and 2099.
  4. # Usage:   easter <year>
  5. # Example: easter 2006
  6. # C-Kermit 8.0.212 or later required.
  7. # Reference: Scientific American, March 2001, p.80.
  8. #
  9. # Illustrates: kerbang scripts, S-Expressions, compound IF conditions,
  10. # array initialization, SET SEXP TRUNCATE ON to force all results to integer.
  11. # First version of this script needed nine TRUNCATE operators.
  12. #
  13. # Author: F. da Cruz, Columbia University, March 2001
  14. # Updated: March 2006.
  15. #
  16. set sexp truncate on
  17. dcl \&m[] = Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
  18. if ( not def \%1 || not numeric \%1 ) exit 1 Usage: \%0 year
  19. if ( < \%1 1900 || > \%1 2099 ) exit 1 "\%0: 1900 <= year < 2100"
  20. (setq x \%1)
  21. (setq a (mod x 19) b (/ x 100) c (mod x 100))
  22. (setq d (/ b 4) e (mod b 4))
  23. (setq g (/ (+ (* 8 b) 13) 25))
  24. (setq h (mod (+ (* a 19) b (- d) (- g) 15) 30))
  25. (setq m (/ (+ a (* h 11)) 319))
  26. (setq j (/ c 4) k (mod c 4))
  27. (setq l (mod (+ (* 2 e) (* 2 j) m (- k) (- h) 32) 7))
  28. (setq n (/ (+ h (- m) l 90) 25))
  29. (setq p (mod (+ h (- m) l n 19) 32))
  30. echo \fday(\m(x)\flpad(\m(n),2,0)\flpad(\m(p),2,0)) \m(p) \&m[n] \m(x)
  31. exit
  32.