Xác định tên gọi của năm âm lịch

Để xác định tên gọi của một năm nào đó chúng ta dựa vài khái niệm canchi và chọn 1 năm làm mốc đã xác định được tên.

 

Bảng tên gọi của năm

Chúng ta có 10 Can thứ tự lần lượt là: Giáp, Ất, Bính, Đinh, Mậu, Kỷ, Canh, Tân, Nhâm, Quý. Biểu diễn 10 Can này vào 1 mảng ta được arr_Can như bên dưới:

Vị trí 0 1 2 3 4 5 6 7 8 9
Can Giáp Ất Bính Đinh Mậu Kỷ Canh Tân Nhâm Quý

Và 12 Chi thứ tự lần lượt là: Tý, Sửu, Dần, Mão, Thìn, Tỵ, Ngọ, Mùi, Thân, Dậu, Tuất, Hợi. Biểu diễn 12 Chi này vào 1 mảng ta được arr_Chi như bên dưới:

Vị trí 0 1 2 3 4 5 6 7 8 9 10 11
Chi Sửa Dần Mão Thìn Tỵ Ngọ Mùi Thân Dậu Tuất Hợi

Tôi chọn năm làm mốc là 1990 vì tôi biết tên gọi của năm này là Canh ngọ (Các bạn có thể chọn năm khác tùy ý).

Lấy phần dư của 1990 chia cho số can: 1990%10 =0. Lấy kết quả phép chia làm chỉ số tham chiếu vào mảng Can tôi được giá trị là “Giáp“. Nhận thấy rằng từ Can Giáp đến Can Canh chúng ta cần +6 vào chỉ số để lấy được can đúng. (1)

Lấy phần dư của 1990 chia cho số Chi: 1990%12 = 10.  Lấy kết quả phép chia làm chỉ số tham chiếu vào mảng Chi tôi được giá trị là “Tuất“. Nhận thấy rằng từ Chi Tuất đến Chi Ngọ chúng ta cần –4 vào chỉ số để lấy được chi đúng. (2)

Từ (1) ta rút ra công thức tính chỉ số Can của năm trong mảng Can :

Can_Index=(Nam + 6) % 10

Từ (2) ta rút ra công thức tính chỉ số Chi của năm trong mảng Chi :

Chi_Index=(Nam – 4) % 12

Trong đó: Nam là giá trị của năm cần xác định tên gọi.

Việc còn lại là đối chiếu vào mảng Can và mảng Chi để lấy tên gọi của năm theo chỉ số Can_Index và Chi_Index đã xác định ở trên.

Minh họa cho cách tính trên tôi có hàm laytenam bên dưới đây sử dụng ngôn ngữ C#

Mở rộng vấn đề:

Do bội chung nhỏ nhất của 10 và 12 là 60 nên cứ 60 năm mấy có trùng tên gọi lại một lần. Ví dụ năm 1990 là năm canh ngọ vậy năm 1990+60=2050 là lần lặp lại tên năm là canh ngọ đầu tiên. (Chắc có lẻ đây là lý do tại sao “Em ơi có bao nhiêu, sáu mươi năm cuộc đời” – PS: Tôi là Nhảm person).

Chia sẻ lên

Trả lời