人工智能 Copilot 帮我生成皇年元会运世纪年表
我想要验证一下邵雍的《皇极经世》元会运世纪年能不能用来分析信息,预测人类命运,这就需要一个纪年表,上面列出相应年份的会、运、世和年的干支,网上没有找到这种表,于是,今天,2024-03-11,海云青飞 让人工智能 Copilot 帮我写一段 Javascript 代码用来自动生成这个表格
我提供给 Copilot 用于生成代码的文档
文档写好了,人工智能可以分秒之间提供代码
写文档是个技术活,和写给人的文档不同的是,写给人工智能的文档所表达的各种信息必须非常明确。写给人就不一样了,人可能会根据整体和上下文自己脑补出一些不够具体的信息
设置会、运、世、年 4 个时间单位,这是“皇年”所使用的时间单位:
1会 = 10800 年
1运 = 360 年
1世 = 30 年
以公元前 67017 年为皇年的第1年,也是皇年的会、运、世的第1年
计算元、会、运、世、年的方法:
- 把公元的年份转换为皇年
- 根据皇年的序数计算出会、运、世的序数,计算方法是皇年数除以会、运、世包含的年数
- 计算会、运、世序数对应的60甲子
计算方法:序数除以60求余数,余数1对应60甲子的第一个值即“甲子”,余数0对应60甲子中的最后一个值即“癸亥”
- 年的序数就是皇年的序数,用同样的方法计算出对应的60甲子
从公元 -2456 年 到公元 +2500 年,每隔 30 年计算一次
60甲子:
"甲子","乙丑","丙寅","丁卯","戊辰","己巳","庚午","辛未","壬申","癸酉",
"甲戌","乙亥","丙子","丁丑","戊寅","己卯","庚辰","辛巳","壬午","癸未",
"甲申","乙酉","丙戌","丁亥","戊子","己丑","庚寅","辛卯","壬辰","癸巳",
"甲午","乙未","丙申","丁酉","戊戌","己亥","庚子","辛丑","壬寅","癸卯",
"甲辰","乙巳","丙午","丁未","戊申","己酉","庚戌","辛亥","壬子","癸丑",
"甲寅","乙卯","丙辰","丁巳","戊午","己未","庚申","辛酉","壬戌","癸亥"
写一段JS代码,在控制台打印出下面格式的Markdown表格,各列的表达形式如下:
- “皇年”和“公元”列是数字,公元数字前面加上正负号
- “会”、“运”、“世”列的值是序数+60甲子,比如“61甲子”
- “年”列的表达形式:60甲子,比如“甲子”
|皇年 |公元 | 会 | 运 | 世 | 年 |
|:----|:----|:----:|:----:|:----:|:----:|
| | | | | | |
Copilot 版本的代码需求描述文档
代码生成后,海云青飞 让 Copilot 根据代码功能生成描述文档,以用于生成具有同样功能的代码。看看她是怎么写的,有助于我们以后改进文档的写作:
60甲子年份计算器
这个JavaScript程序计算从公元前2457年开始,每隔30年的皇年、会、运、世、年的60甲子序数,并以Markdown表格的形式打印出来。程序确保世的第一年是甲子年
程序步骤:
-
定义基础数据:
baseYear
:皇年起始年份,设置为-67017startYear
:数据打印的起始年份,设置为-2457endYear
:数据打印的结束年份,设置为2500interval
:年份间隔,设置为30
-
创建60甲子数组:
- 一个包含60个元素的数组,每个元素代表60甲子中的一个,按照固定顺序排列
-
编写计算函数:
calculateHuangYear(year)
:接受一个年份参数,计算并返回皇年、会、运、世、年的60甲子序数
-
处理公元前年份:
- 如果年份小于0,即公元前,需要加1以修正皇年序数
-
计算会、运、世、年的序数:
- 会:皇年序数除以10800后向下取整
- 运:皇年序数除以360后向下取整
- 世:皇年序数除以30后向下取整
- 年:皇年序数对60取余
-
获取60甲子:
- 使用会、运、世、年的序数在60甲子数组中找到对应的甲子
-
打印Markdown表格:
- 使用
console.log
打印Markdown格式的表格头部 - 循环打印从公元前2457年开始,每隔30年的皇年、会、运、世、年的对应关系
- 使用
-
循环生成数据:
- 从
startYear
开始,每隔interval
年计算一次,直到endYear
- 从
-
修正索引:
- 在获取60甲子时,确保索引是正数,如果计算出的年的序数是负数,需要加上60再取余
Copilot 生成的 Javascript 代码
// 定义基础数据
const baseYear = -67017;
const startYear = -2457;
const endYear = 2500;
const interval = 30;
// 定义60甲子数组
const jiazi = [
"甲子", "乙丑", "丙寅", "丁卯", "戊辰", "己巳", "庚午", "辛未", "壬申", "癸酉",
"甲戌", "乙亥", "丙子", "丁丑", "戊寅", "己卯", "庚辰", "辛巳", "壬午", "癸未",
"甲申", "乙酉", "丙戌", "丁亥", "戊子", "己丑", "庚寅", "辛卯", "壬辰", "癸巳",
"甲午", "乙未", "丙申", "丁酉", "戊戌", "己亥", "庚子", "辛丑", "壬寅", "癸卯",
"甲辰", "乙巳", "丙午", "丁未", "戊申", "己酉", "庚戌", "辛亥", "壬子", "癸丑",
"甲寅", "乙卯", "丙辰", "丁巳", "戊午", "己未", "庚申", "辛酉", "壬戌", "癸亥"
];
// 计算皇年、会、运、世、年的函数
function calculateHuangYear(year) {
const baseYear = -67017; // 皇年起始年份
let huangYear; // 皇年序数
if (year < 0) {
// 公元前的年份需要加1
huangYear = year - baseYear + 1;
} else {
// 公元后的年份直接计算
huangYear = year - baseYear;
}
const hui = Math.floor(huangYear / 10800); // 计算会的序数
const yun = Math.floor(huangYear / 360); // 计算运的序数
const shi = Math.floor(huangYear / 30); // 计算世的序数
const nian = huangYear % 60; // 计算年的序数
// 获取60甲子
const huiJiazi = jiazi[hui % 60];
const yunJiazi = jiazi[yun % 60];
const shiJiazi = jiazi[shi % 60];
const nianJiazi = jiazi[(nian + 59) % 60]; // 确保索引是正数
return {
huangYear,
hui: `${hui + 1}${huiJiazi}`,
yun: `${yun + 1}${yunJiazi}`,
shi: `${shi + 1}${shiJiazi}`,
nian: nianJiazi
};
}
// 打印Markdown表格的头部
console.log('|皇年 |公元 | 会 | 运 | 世 | 年 |');
console.log('|:----|:----|:----:|:----:|:----:|:----:|');
// 循环打印每隔30年的皇年、会、运、世、年
for (let year = startYear; year <= endYear; year += interval) {
const { huangYear, hui, yun, shi, nian } = calculateHuangYear(year);
console.log(`|${huangYear} |${year >= 0 ? '+' : ''}${year} | ${hui} | ${yun} | ${shi} | ${nian} |`);
}
2024-03-11
独立思考最难得,赞赏支持是美德!(微信扫描下图)