人工智能 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表格的形式打印出来。程序确保世的第一年是甲子年

程序步骤:

  1. 定义基础数据

    • baseYear:皇年起始年份,设置为-67017
    • startYear:数据打印的起始年份,设置为-2457
    • endYear:数据打印的结束年份,设置为2500
    • interval:年份间隔,设置为30
  2. 创建60甲子数组

    • 一个包含60个元素的数组,每个元素代表60甲子中的一个,按照固定顺序排列
  3. 编写计算函数

    • calculateHuangYear(year):接受一个年份参数,计算并返回皇年、会、运、世、年的60甲子序数
  4. 处理公元前年份

    • 如果年份小于0,即公元前,需要加1以修正皇年序数
  5. 计算会、运、世、年的序数

    • 会:皇年序数除以10800后向下取整
    • 运:皇年序数除以360后向下取整
    • 世:皇年序数除以30后向下取整
    • 年:皇年序数对60取余
  6. 获取60甲子

    • 使用会、运、世、年的序数在60甲子数组中找到对应的甲子
  7. 打印Markdown表格

    • 使用console.log打印Markdown格式的表格头部
    • 循环打印从公元前2457年开始,每隔30年的皇年、会、运、世、年的对应关系
  8. 循环生成数据

    • startYear开始,每隔interval年计算一次,直到endYear
  9. 修正索引

    • 在获取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


独立思考最难得,赞赏支持是美德!(微信扫描下图)