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
42
43
44
45
|
#!/usr/local/bin/node
//
// See ../README.md
//
//
// Run as: node ch-1.js < input-file
//
//
// We're reading years from standard input, one year per line, outputting
// years from the sexagenary cycle [1]. This is slightly more than what
// the challenge ask; the challenge asks to output the heavenly stem [2],
// and the earthly branch [3]. But we also output its Yin/Yang.
//
// [1] https://en.wikipedia.org/wiki/Sexagenary_cycle
// [2] https://en.wikipedia.org/wiki/Heavenly_Stems
// [3] https://en.wikipedia.org/wiki/Earthly_Branches
//
//
// Each of the cycles have been rotated so the first entry corresponds to
// the year 0 in the Proleptic Gregorian calendar. (We're using the
// convention of having a year 0, as per ISO 8601).
// That way, we can just mod the year with the number of entries, without
// first having to subtract something from the year.
//
// The heavenly stems last for 2 years, so we just duplicate the entries.
//
let yin_yang = ["Yang", "Yin"]
let heavenly_stems = ["Metal", "Metal", "Water", "Water", "Wood", "Wood",
"Fire", "Fire", "Earth", "Earth"]
let earthly_branches = ["Monkey", "Rooster", "Dog", "Pig", "Rat", "Ox",
"Tiger", "Rabbit", "Dragon", "Snake", "Horse", "Goat"]
require ('readline') . createInterface ({input: process . stdin})
. on ('line', _ => {
let year = + _
console . log (yin_yang [year % yin_yang . length],
heavenly_stems [year % heavenly_stems . length],
earthly_branches [year % earthly_branches . length])
})
|