用 Nim 编程语言生成《皇年表》
2024-06-13 - 甲辰年 庚午月 戊申日 - 农历五月初八 多云
《皇极经世 5000 年元会运世干支纪年表》简称《皇年表》,此表可用来推算上下共 5000 年的中国国运。原表是用 Javascript 编程语言自动生成的,我个人更喜欢使用 Nim 编程语言,下面是完整的 Nim 源码:
# Nim 编程语言 计算《皇年表》
# 作者 海云青飞 https://www.tuenhai.com
# 2024-06-13 - 甲辰年 庚午月 戊申日 - 农历五月初八 多云
import std/strformat
# 定义基础数据
let
baseYear = -67017 ## 公元 -67017 年 为皇年元年
startYear = -2457 # 第一世的第一年,应为甲子年
endYear = 2494 # 末世的第一年,应为甲午年
interval = 30 # 每行包含 30 年
# 创建60甲子数组
let jiazi = [
"甲子", "乙丑", "丙寅", "丁卯", "戊辰", "己巳", "庚午", "辛未", "壬申", "癸酉",
"甲戌", "乙亥", "丙子", "丁丑", "戊寅", "己卯", "庚辰", "辛巳", "壬午", "癸未",
"甲申", "乙酉", "丙戌", "丁亥", "戊子", "己丑", "庚寅", "辛卯", "壬辰", "癸巳",
"甲午", "乙未", "丙申", "丁酉", "戊戌", "己亥", "庚子", "辛丑", "壬寅", "癸卯",
"甲辰", "乙巳", "丙午", "丁未", "戊申", "己酉", "庚戌", "辛亥", "壬子", "癸丑",
"甲寅", "乙卯", "丙辰", "丁巳", "戊午", "己未", "庚申", "辛酉", "壬戌", "癸亥"
]
# 计算皇年、会、运、世、年的函数
proc calculateHuangYear(year: int): tuple[huangYear: int, hui: string, yun: string, shi: string, nian: string] =
let
huangYear = if year < 0: year - baseYear + 1 else: year - baseYear
hui = (huangYear div 10800)
yun = (huangYear div 360)
shi = (huangYear div 30)
nian = (huangYear - 1) mod 60 # 数组索引要从 0 开始,而皇年从 1 开始
(huangYear: huangYear,
hui: $(hui + 1) & jiazi[hui mod 60], # 会、运、世序数要从 1 开始,故 + 1
yun: $(yun + 1) & jiazi[yun mod 60],
shi: $(shi + 1) & jiazi[shi mod 60],
nian: jiazi[nian])
# 打印Markdown表格的头部
echo "|皇年 |公元 | 会 | 运 | 世 | 年 |"
echo "|:----|:----|:----:|:----:|:----:|:----:|"
# 循环打印每隔30年的皇年、会、运、世、年
var year = startYear
while year <= endYear:
if year >= 0 and year < interval: inc(year) # 公元 -1年到 1年数学差值 2,实际应 1,故首次跨越公元 -1年时年要增1
let
t = calculateHuangYear(year)
yearSign = if year > 0: "+" else: ""
echo &"|{$t.huangYear} |{yearSign}{$year} | {t.hui} | {t.yun} | {t.shi} | {t.nian} |"
inc(year, interval)
相关内容
独立思考最难得,赞赏支持是美德!(微信扫描下图)