aboutsummaryrefslogtreecommitdiff
path: root/challenge-132/abigail/go/ch-1.go
blob: 648a8ff8fae4a87e5e467e953af45dfe86697e76 (plain)
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package main

//
// See ../README.md
//

//
// Run as: go run ch-1.go
//

import (
    "fmt"
)

func g2j (Y int, M int, D int) int {
    return ((1461 * (Y + 4800  +  (M - 14) / 12))  /   4   +
            (367 * (M - 2 - 12 * ((M - 14) / 12))) /  12   -
            (3 * ((Y + 4900    +  (M - 14) / 12)   / 100)) / 4 + D - 32075)
}

func j2g (J int) (int, int, int) {
    e := 4 * (J + 1401 + (((4 * J + 274277) / 146097) * 3) / 4 - 38) + 3
    D :=  ((5 * ((e % 1461) / 4) + 2) % 153) / 5 + 1
    M := (((5 * ((e % 1461) / 4) + 2) / 153 + 2) % 12) + 1
    Y :=         (e / 1461) - 4716 + (12 + 2 - M) / 12
    return Y, M, D
}

func main () {
    julian_today := g2j (2021, 9, 22)
    var Y, M, D int
    for n, err := fmt . Scanf ("%d/%d/%d", &Y, &M, &D); n == 3 && err == nil
        n, err  = fmt . Scanf ("%d/%d/%d", &Y, &M, &D) {
        julian_then := g2j (Y, M, D)
        Y1, M1, D1  := j2g (2 * julian_then  - julian_today)
        Y2, M2, D2  := j2g (2 * julian_today - julian_then)
        fmt . Printf ("%04d/%02d/%02d, %04d/%02d/%02d\n",
                      Y1, M1, D1, Y2, M2, D2);

    }
}