2votos

Calcular la fecha de pascuas en Clojure

por AverageUser hace 1 año

Acá, básicamente lo mismo pero en Clojure

Diseñar una función que retorne la fecha de pascuas

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
(defn constantes [y] 
  (cond (and (>= y 1584) (<= y 1699)) [22 2] 
        (and (>= y 1700) (<= y 1799)) [23 3] 
        (and (>= y 1800) (<= y 1899)) [23 4] 
        (and (>= y 1900) (<= y 2099)) [24 5] 
        (and (>= y 2100) (<= y 2199)) [24 6] 
        (and (>= y 2200) (<= y 2299)) [25 0])) 
 
(defn pascua [year] 
  (let [con (constantes year) 
        a   (mod year 19) 
        b   (mod year 4) 
        c   (mod year 7) 
        d   (mod (+ (* 19 a) (first con)) 30) 
        e   (mod (+ (* b 2) (* c 4) (* 6 d) (last con)) 7)] 
    (cond 
      (< (+ d e) 10)                                    [(+ d e 22) 3 year] 
      (= (+ d e -9) 26)                                 [19 4 year] 
      (and (= (+ d e -9) 26) (= d 28) (= e 6) (> a 10)) [18 4 year] 
      (> (+ d e) 9)                                     [(+ d e -9) 4 year]))) 
 
;; (pascua 2016) => [27 3 2016] 
;; (pascua 2017) => [16 4 2017] 
;; (pascua 2018) => [1 4 2018] 
;; (pascua 1999) => [4 4 1999] 
;; (pascua 1984) => [22 4 1984] 
1 comentario
0votos

Escrito por Emanuel hace 1 año

Gracias por compartir con este lenguaje.

Comenta la solución

Tienes que identificarte para poder publicar tu comentario.