{"slug":"thuat-toan-an-sao-tu-vi-108-sao-lap-trinh","title":"Thuật Toán An Sao Tử Vi: Cách Lập Trình Tính Vị Trí 108+ Sao","summary":"Phân tích thuật toán an sao Tử Vi: cấu trúc 12 cung, cục số, bảng tra Tử Vi tinh, an 108+ sao, Tứ Hóa, và phân tích complexity — dưới góc nhìn lập trình.","excerpt":"Phân tích thuật toán an sao Tử Vi: cấu trúc 12 cung, cục số, bảng tra Tử Vi tinh, an 108+ sao, Tứ Hóa, và phân tích complexity — dưới góc nhìn lập trình.","markdown":"# Thuật Toán An Sao Tử Vi: Lập Trình Tính Vị Trí 108+ Sao\nChuyên mục: Lập trình × Huyền học\n\nAn sao Tử Vi là quá trình xác định vị trí từng sao trên 12 cung. Bài viết phân tích thuật toán đằng sau việc lập trình một engine tử vi hoàn chỉnh.\n\n## 1. Cấu Trúc Dữ Liệu: 12 Cung\nLá số Tử Vi gồm 12 cung xếp theo hình chữ nhật 4×3, mỗi cung chứa: tên cung, danh sách sao, Thiên Can-Địa Chi, và Tràng Sinh vị trí.\n\nconst CUNG_ORDER = [\n'Mệnh', 'Huynh Đệ', 'Phu Thê', 'Tử Tức',\n'Tài Bạch', 'Tật Ách', 'Thiên Di', 'Nô Bộc',\n'Quan Lộc', 'Điền Trạch', 'Phúc Đức', 'Phụ Mẫu'\n];\n// Mỗi cung = 1 Địa Chi (Tý...Hợi), xoay theo Mệnh cung\n\n## 2. Bước 1: Xác Định Cục Số\nCục số (2, 3, 4, 5, hoặc 6) quyết định cách an Tử Vi. Phụ thuộc vào Thiên Can năm sinh + tháng sinh âm lịch. Thuật toán:\n\nfunction cucSo(amLichMonth, yearStem) {\n// Bước 1: Tìm Ngũ Hành Nạp Âm của Can-Chi cung Mệnh\n// Bước 2: Cục = mapping từ Ngũ Hành:\n//   Thủy=2, Mộc=3, Kim=4, Thổ=5, Hỏa=6\nconst NH = napAmNguHanh(menhCungCanChi);\nreturn {Thủy:2, Mộc:3, Kim:4, Thổ:5, Hỏa:6}[NH];\n}\n\n## 3. Bước 2: An Tử Vi Tinh\nVị trí sao Tử Vi = f(ngày sinh âm lịch, cục số). Đây là bảng tra 30×5 (30 ngày × 5 cục):\n\n// Công thức tổng quát (đơn giản hóa):\n// tuViPosition = (ngayAm - 1 + offset[cucSo]) mod 12\n// Bảng offset phụ thuộc cục số:\nconst TV_TABLE = {\n2: [/* 30 entries */],  // Thủy nhị cục\n3: [/* 30 entries */],  // Mộc tam cục\n4: [/* 30 entries */],  // Kim tứ cục\n5: [/* 30 entries */],  // Thổ ngũ cục\n6: [/* 30 entries */],  // Hỏa lục cục\n};\n\n## 4. Bước 3: An Các Sao Còn Lại\nSau khi an Tử Vi, các sao khác được an theo quy luật:\n\n14 chính tinh: Vị trí tương đối so với Tử Vi (lookup table cố định)\nLục Cát: Văn Xương, Văn Khúc, Tả Phụ, Hữu Bật, Thiên Khôi, Thiên Việt — theo Can/Chi năm/giờ\nLục Sát: Kình Dương, Đà La, Hỏa Tinh, Linh Tinh, Thiên Không, Địa Kiếp — theo Can năm + Chi giờ\nTứ Hóa: Hóa Lộc/Quyền/Khoa/Kỵ — lookup theo Thiên Can (10 bộ × 4 hóa = 40 entries)\n## 5. Complexity Analysis\nToàn bộ quá trình an sao:\n\nInput: 5 tham số (năm, tháng, ngày âm lịch, giờ, giới tính)\nOutput: 12 cung × N sao (108-115 sao tùy trường phái)\nThuật toán: O(N) — chỉ là lookup table, không có computation nặng\nBottleneck: Chuyển đổi dương lịch → âm lịch (cần VSOP87) là bước tốn nhất\n\nToàn bộ engine chạy dưới 10ms trên máy hiện đại — phần lớn thời gian dành cho rendering UI.\n","html":"<p>Chuyên mục: Lập trình × Huyền học</p>\n<p>An sao Tử Vi là quá trình xác định vị trí từng sao trên 12 cung. Bài viết phân tích thuật toán đằng sau việc lập trình một engine tử vi hoàn chỉnh.</p>\n<h2>1. Cấu Trúc Dữ Liệu: 12 Cung</h2>\n<p>Lá số Tử Vi gồm 12 cung xếp theo hình chữ nhật 4×3, mỗi cung chứa: tên cung, danh sách sao, Thiên Can-Địa Chi, và Tràng Sinh vị trí.</p>\n<pre><code>const CUNG_ORDER = [\n  &#x27;Mệnh&#x27;, &#x27;Huynh Đệ&#x27;, &#x27;Phu Thê&#x27;, &#x27;Tử Tức&#x27;,\n  &#x27;Tài Bạch&#x27;, &#x27;Tật Ách&#x27;, &#x27;Thiên Di&#x27;, &#x27;Nô Bộc&#x27;,\n  &#x27;Quan Lộc&#x27;, &#x27;Điền Trạch&#x27;, &#x27;Phúc Đức&#x27;, &#x27;Phụ Mẫu&#x27;\n];</code></pre>\n<p>// Mỗi cung = 1 Địa Chi (Tý...Hợi), xoay theo Mệnh cung</p>\n<h2>2. Bước 1: Xác Định Cục Số</h2>\n<p>Cục số (2, 3, 4, 5, hoặc 6) quyết định cách an Tử Vi. Phụ thuộc vào Thiên Can năm sinh + tháng sinh âm lịch. Thuật toán:</p>\n<pre><code>function cucSo(amLichMonth, yearStem) {\n  // Bước 1: Tìm Ngũ Hành Nạp Âm của Can-Chi cung Mệnh\n  // Bước 2: Cục = mapping từ Ngũ Hành:\n  //   Thủy=2, Mộc=3, Kim=4, Thổ=5, Hỏa=6\n  const NH = napAmNguHanh(menhCungCanChi);\n  return {Thủy:2, Mộc:3, Kim:4, Thổ:5, Hỏa:6}[NH];</code></pre>\n<p>}</p>\n<h2>3. Bước 2: An Tử Vi Tinh</h2>\n<p>Vị trí sao Tử Vi = f(ngày sinh âm lịch, cục số). Đây là bảng tra 30×5 (30 ngày × 5 cục):</p>\n<pre><code>// Công thức tổng quát (đơn giản hóa):\n// tuViPosition = (ngayAm - 1 + offset[cucSo]) mod 12\n// Bảng offset phụ thuộc cục số:\nconst TV_TABLE = {\n  2: [/* 30 entries */],  // Thủy nhị cục\n  3: [/* 30 entries */],  // Mộc tam cục\n  4: [/* 30 entries */],  // Kim tứ cục\n  5: [/* 30 entries */],  // Thổ ngũ cục\n  6: [/* 30 entries */],  // Hỏa lục cục</code></pre>\n<p>};</p>\n<h2>4. Bước 3: An Các Sao Còn Lại</h2>\n<p>Sau khi an Tử Vi, các sao khác được an theo quy luật:</p>\n<ul>\n<li>14 chính tinh: Vị trí tương đối so với Tử Vi (lookup table cố định)</li>\n<li>Lục Cát: Văn Xương, Văn Khúc, Tả Phụ, Hữu Bật, Thiên Khôi, Thiên Việt — theo Can/Chi năm/giờ</li>\n<li>Lục Sát: Kình Dương, Đà La, Hỏa Tinh, Linh Tinh, Thiên Không, Địa Kiếp — theo Can năm + Chi giờ</li>\n<li>Tứ Hóa: Hóa Lộc/Quyền/Khoa/Kỵ — lookup theo Thiên Can (10 bộ × 4 hóa = 40 entries)</li>\n</ul>\n<h2>5. Complexity Analysis</h2>\n<p>Toàn bộ quá trình an sao:</p>\n<ul>\n<li>Input: 5 tham số (năm, tháng, ngày âm lịch, giờ, giới tính)</li>\n<li>Output: 12 cung × N sao (108-115 sao tùy trường phái)</li>\n<li>Thuật toán: O(N) — chỉ là lookup table, không có computation nặng</li>\n<li>Bottleneck: Chuyển đổi dương lịch → âm lịch (cần VSOP87) là bước tốn nhất</li>\n</ul>\n<p>Toàn bộ engine chạy dưới 10ms trên máy hiện đại — phần lớn thời gian dành cho rendering UI.</p>","tags":["Lập trình","Thuật toán","Tử Vi"],"author":"System Legacy","publishedAt":"2026-04-04T07:33:19.285Z","updatedAt":"2026-07-17T02:35:24.337Z","published_at":"2026-04-04T07:33:19.285Z","updated_at":"2026-07-17T02:35:24.337Z","view_count":91,"canonical":"https://wiki.quizzman.com/wiki/thuat-toan-an-sao-tu-vi-108-sao-lap-trinh","url":"https://wiki.quizzman.com/wiki/thuat-toan-an-sao-tu-vi-108-sao-lap-trinh","markdownUrl":"https://wiki.quizzman.com/api/articles/thuat-toan-an-sao-tu-vi-108-sao-lap-trinh.md","apiUrl":"https://wiki.quizzman.com/api/articles/thuat-toan-an-sao-tu-vi-108-sao-lap-trinh"}