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
|
#!/usr/bin/ruby
#
# See ../README.md
#
#
# Run as: ruby ch-1.rb < input-file
#
def div (x, y)
return (x . to_f / y) . to_i
end
def g2j (y, m, d)
return (div(1461 * (y + 4800 + div(m - 14, 12)), 4) +
div( 367 * (m - 2 - 12 * div(m - 14, 12)), 12) -
div( 3 * div(y + 4900 + div(m - 14, 12), 100), 4) + d - 32075)
end
def j2g (j)
e = 4 * (j + 1401 + div(div(4 * j + 274277, 146097) * 3, 4) - 38) + 3;
d = div((5 * div(e % 1461, 4) + 2) % 153, 5) + 1;
m = ((div( 5 * div(e % 1461, 4) + 2, 153) + 2) % 12) + 1;
y = div(e, 1461) - 4716 + div(12 + 2 - m, 12);
return y, m, d
end
julian_today = g2j 2021, 9, 22
ARGF . each_line do
| line |
y, m, d = line . strip . split("/") . map {|x| x . to_i}
julian_then = g2j y, m, d
puts "%04d/%02d/%02d, %04d/%02d/%02d\n" %
[j2g(2 * julian_then - julian_today),
j2g(2 * julian_today - julian_then)] . flatten
end
|