benjamin5607 commited on
Commit
5e4df86
ยท
verified ยท
1 Parent(s): c925ccf

Update utils/calculations.py

Browse files
Files changed (1) hide show
  1. utils/calculations.py +48 -55
utils/calculations.py CHANGED
@@ -1,77 +1,70 @@
1
  # utils/calculations.py
2
 
3
- def get_ganji(year):
4
  """
5
- ์—ฐ๋„๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ ์ฒœ๊ฐ„(Heavenly Stem)๊ณผ ์ง€์ง€(Earthly Branch), ์˜คํ–‰(Element)์„ ๊ณ„์‚ฐ
6
  """
7
- cheon = ["๊ฐ‘(Green)", "์„(Green)", "๋ณ‘(Red)", "์ •(Red)", "๋ฌด(Yellow)", "๊ธฐ(Yellow)", "๊ฒฝ(White)", "์‹ (White)", "์ž„(Black)", "๊ณ„(Black)"]
8
- ji = ["์ž(์ฅ)", "์ถ•(์†Œ)", "์ธ(ํ˜ธ๋ž‘์ด)", "๋ฌ˜(ํ† ๋ผ)", "์ง„(์šฉ)", "์‚ฌ(๋ฑ€)", "์˜ค(๋ง)", "๋ฏธ(์–‘)", "์‹ (์›์ˆญ์ด)", "์œ (๋‹ญ)", "์ˆ (๊ฐœ)", "ํ•ด(๋ผ์ง€)"]
9
-
10
- # ์˜คํ–‰ ๋งคํ•‘ (์ฒœ๊ฐ„ ๊ธฐ์ค€)
11
- elements = {
12
- "๊ฐ‘": "๋ชฉ(๋‚˜๋ฌด)", "์„": "๋ชฉ(๋‚˜๋ฌด)",
13
- "๋ณ‘": "ํ™”(๋ถˆ)", "์ •": "ํ™”(๋ถˆ)",
14
- "๋ฌด": "ํ† (ํ™)", "๊ธฐ": "ํ† (ํ™)",
15
- "๊ฒฝ": "๊ธˆ(์‡ )", "์‹ ": "๊ธˆ(์‡ )",
16
- "์ž„": "์ˆ˜(๋ฌผ)", "๊ณ„": "์ˆ˜(๋ฌผ)"
17
- }
18
 
19
- # 4๋…„์ƒ์ด ๊ฐ‘์ž๋…„ ๊ธฐ์ค€ (index 0)
20
- year_idx = year - 4
21
- stem_idx = year_idx % 10
22
- branch_idx = year_idx % 12
 
 
23
 
24
- stem_kor = cheon[stem_idx][0] # ๊ฐ‘, ์„..
 
 
25
 
26
  return {
27
- "year_ganji": f"{cheon[stem_idx].split('(')[0]}{ji[branch_idx].split('(')[0]}๋…„", # ๊ฐ‘์ž๋…„
28
- "animal": ji[branch_idx], # ์ฅ, ์†Œ...
29
- "color": cheon[stem_idx].split('(')[1].replace(')', ''), # Green, Red...
30
- "element": elements[stem_kor], # ๋ชฉ, ํ™”...
31
- "stem_desc": f"์ฒœ๊ฐ„์€ {cheon[stem_idx]}",
32
- "branch_desc": f"์ง€์ง€๋Š” {ji[branch_idx]}"
33
  }
34
 
35
- def get_fengshui_info(birth_year, gender):
36
  """
37
- ๋ณธ๋ช…๊ถ(Life Gua) ๊ณ„์‚ฐ ๋ฐ ๊ธธํ‰ ๋ฐฉ์œ„ ์‚ฐ์ถœ (๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ณต์‹)
38
  """
39
- # 1. ์ˆซ์ž๋ฅผ ๋‹ค ๋”ํ•ด์„œ ํ•œ ์ž๋ฆฌ๋กœ ๋งŒ๋“ฆ (์˜ˆ: 1988 -> 1+9+8+8=26 -> 2+6=8)
40
- # (์•ฝ์‹ ๊ณ„์‚ฐ๋ฒ• ์‚ฌ์šฉ)
41
- digits_sum = sum(int(digit) for digit in str(birth_year))
42
  while digits_sum > 9:
43
  digits_sum = sum(int(digit) for digit in str(digits_sum))
44
 
45
- # 2. ๋ณธ๋ช…๊ถ ์ƒ์ˆ˜(Gua Number) ๊ณ„์‚ฐ
46
- if gender == "๋‚จ์„ฑ":
47
- gua_num = 11 - digits_sum
48
- else: # ์—ฌ์„ฑ
49
- gua_num = digits_sum + 4
50
 
51
- # ์˜ˆ์™ธ์ฒ˜๋ฆฌ (9๋ฅผ ๋„˜๊ฑฐ๋‚˜ ์Œ์ˆ˜ ์ฒ˜๋ฆฌ)
52
- while gua_num > 9: gua_num -= 9
53
- while gua_num < 1: gua_num += 9
54
- if gua_num == 5: # 5ํ™ฉํ† ์„ฑ์€ ๋‚จ์ž๋Š” 2(๊ณค), ์—ฌ์ž๋Š” 8(๊ฐ„)์œผ๋กœ ์น˜ํ™˜
55
- gua_num = 2 if gender == "๋‚จ์„ฑ" else 8
56
 
57
- # 3. ๋™์‚ฌํƒ(East Group) vs ์„œ์‚ฌํƒ(West Group) ํŒ๋ณ„
58
- # ๋™์‚ฌํƒ: 1, 3, 4, 9 / ์„œ์‚ฌํƒ: 2, 6, 7, 8
59
- is_east_group = gua_num in [1, 3, 4, 9]
60
- group_name = "๋™์‚ฌํƒ(East Group)" if is_east_group else "์„œ์‚ฌํƒ(West Group)"
61
 
62
- # 4. ๊ธธํ‰ ๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ
63
- directions = {
64
- "๋™์‚ฌํƒ": {"๊ธธ": ["๋ถ", "๋™", "๋‚จ", "๋‚จ๋™"], "ํ‰": ["๋ถ๋™", "๋‚จ์„œ", "์„œ", "๋ถ์„œ"]},
65
- "์„œ์‚ฌํƒ": {"๊ธธ": ["๋ถ๋™", "๋‚จ์„œ", "์„œ", "๋ถ์„œ"], "ํ‰": ["๋ถ", "๋™", "๋‚จ", "๋‚จ๋™"]}
66
- }
 
 
67
 
68
- good_dirs = directions["๋™์‚ฌํƒ" if is_east_group else "์„œ์‚ฌํƒ"]["๊ธธ"]
69
- bad_dirs = directions["๋™์‚ฌํƒ" if is_east_group else "์„œ์‚ฌํƒ"]["ํ‰"]
70
 
71
  return {
72
- "gua_number": gua_num,
73
- "group": group_name,
74
- "good_direction": ", ".join(good_dirs),
75
- "bad_direction": ", ".join(bad_dirs),
76
- "advice": f"๋‹น์‹ ์€ {group_name}์ด๋ฏ€๋กœ ๋จธ๋ฆฌ๋ฅผ {good_dirs[0]}์ชฝ์œผ๋กœ ๋‘๊ณ  ์ž์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ ˆ๋Œ€ {bad_dirs[0]}์ชฝ์„ ๋ณด์ง€ ๋งˆ์„ธ์š”."
77
  }
 
1
  # utils/calculations.py
2
 
3
+ def get_ganji_full(birth_date, birth_time, calendar_type):
4
  """
5
+ ์ƒ๋…„์›”์ผ์‹œ๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ ์‚ฌ์ฃผํŒ”์ž(๋„ค ๊ธฐ๋‘ฅ) ์ •๋ณด๋ฅผ ๊ณ„์‚ฐ (์•ฝ์‹)
6
  """
7
+ # ์ฒœ๊ฐ„/์ง€์ง€ ๋ฐ์ดํ„ฐ
8
+ cheon = ["๊ฐ‘", "์„", "๋ณ‘", "์ •", "๋ฌด", "๊ธฐ", "๊ฒฝ", "์‹ ", "์ž„", "๊ณ„"]
9
+ ji = ["์ž", "์ถ•", "์ธ", "๋ฌ˜", "์ง„", "์‚ฌ", "์˜ค", "๋ฏธ", "์‹ ", "์œ ", "์ˆ ", "ํ•ด"]
10
+ elements = {"๊ฐ‘": "๋ชฉ", "์„": "๋ชฉ", "๋ณ‘": "ํ™”", "์ •": "ํ™”", "๋ฌด": "ํ† ", "๊ธฐ": "ํ† ", "๊ฒฝ": "๊ธˆ", "์‹ ": "๊ธˆ", "์ž„": "์ˆ˜", "๊ณ„": "์ˆ˜"}
11
+ animals = {"์ž": "์ฅ", "์ถ•": "์†Œ", "์ธ": "๋ฒ”", "๋ฌ˜": "ํ† ๋ผ", "์ง„": "์šฉ", "์‚ฌ": "๋ฑ€", "์˜ค": "๋ง", "๋ฏธ": "์–‘", "์‹ ": "์›์ˆญ์ด", "์œ ": "๋‹ญ", "์ˆ ": "๊ฐœ", "ํ•ด": "๋ผ์ง€"}
 
 
 
 
 
 
12
 
13
+ year = birth_date.year
14
+
15
+ # 1. ์—ฐ์ฃผ(Year Pillar) ๊ณ„์‚ฐ
16
+ y_idx = year - 4
17
+ y_stem = cheon[y_idx % 10]
18
+ y_branch = ji[y_idx % 12]
19
 
20
+ # 2. ์›”์ฃผ, ์ผ์ฃผ, ์‹œ์ฃผ (์ •ํ™•ํ•œ ๋งŒ์„ธ๋ ฅ์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๋ฏ€๋กœ ์—ฌ๊ธฐ์„  Mockup ๋กœ์ง ์‚ฌ์šฉ)
21
+ # ์‹ค์ œ ์•ฑ์—์„  'korean-lunar-calendar' ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ ๊ถŒ์žฅ
22
+ # ์—ฌ๊ธฐ์„  AI์—๊ฒŒ ์ •ํ™•ํ•œ ๋‚ ์งœ๋ฅผ ๋„˜๊ฒจ์ฃผ๋Š” ๊ฒƒ์— ์ง‘์ค‘
23
 
24
  return {
25
+ "text_data": f"{year}๋…„ {birth_date.month}์›” {birth_date.day}์ผ {birth_time.hour}์‹œ {birth_time.minute}๋ถ„ ({calendar_type})",
26
+ "year_ganji": f"{y_stem}{y_branch}",
27
+ "animal": animals[y_branch],
28
+ "element": elements[y_stem], # ํƒœ์–ด๋‚œ ํ•ด์˜ ์ฒœ๊ฐ„ ๊ธฐ์ค€ (๋  ์ƒ‰๊น” ๊ฒฐ์ •)
29
+ "desc": f"๋‹น์‹ ์€ {animals[y_branch]}๋ ์ด๋ฉฐ, {elements[y_stem]}({y_stem})์˜ ๊ธฐ์šด์„ ๊ฐ€์ง€๊ณ  ํƒœ์–ด๋‚ฌ์Šต๋‹ˆ๋‹ค."
 
30
  }
31
 
32
+ def get_fengshui_advanced(year, gender, door_dir, head_dir):
33
  """
34
+ ๋ณธ๋ช…๊ถ + ์นจ๋Œ€ ๋ฐฉํ–ฅ ์ •๋ฐ€ ๋ถ„์„
35
  """
36
+ # ๋ณธ๋ช…๊ถ ๊ณ„์‚ฐ (๊ฐ„๋žต์‹)
37
+ digits_sum = sum(int(digit) for digit in str(year))
 
38
  while digits_sum > 9:
39
  digits_sum = sum(int(digit) for digit in str(digits_sum))
40
 
41
+ if gender == "๋‚จ์„ฑ" or gender == "Male":
42
+ gua = 11 - digits_sum
43
+ else:
44
+ gua = digits_sum + 4
 
45
 
46
+ while gua > 9: gua -= 9
47
+ while gua < 1: gua += 9
48
+ if gua == 5: gua = 2 if (gender == "๋‚จ์„ฑ" or gender == "Male") else 8
 
 
49
 
50
+ is_east = gua in [1, 3, 4, 9]
51
+ group = "๋™์‚ฌํƒ (East Group)" if is_east else "์„œ์‚ฌํƒ (West Group)"
 
 
52
 
53
+ good_dirs = ["๋ถ", "๋™", "๋‚จ", "๋‚จ๋™"] if is_east else ["๋ถ๋™", "๋‚จ์„œ", "์„œ", "๋ถ์„œ"]
54
+
55
+ # ์นจ๋Œ€ ๏ฟฝ๏ฟฝ๏ฟฝํ–ฅ ์ง„๋‹จ
56
+ korean_dirs = {"N": "๋ถ", "NE": "๋ถ๋™", "E": "๋™", "SE": "๋‚จ๋™", "S": "๋‚จ", "SW": "๋‚จ์„œ", "W": "์„œ", "NW": "๋ถ์„œ"}
57
+
58
+ # ์ž…๋ ฅ๋œ ์˜๋ฌธ ๋ฐฉํ–ฅ์„ ํ•œ๊ธ€๋กœ ๋ณ€ํ™˜ (๋น„๊ต์šฉ)
59
+ head_kor = korean_dirs.get(door_dir, door_dir) # ๋งคํ•‘ ์•ˆ ๋˜๋ฉด ๊ทธ๋Œ€๋กœ
60
 
61
+ # ๋งค์นญ ์—ฌ๋ถ€ (๋‹จ์ˆœ ๋ฌธ์ž์—ด ํฌํ•จ ์—ฌ๋ถ€๋กœ ์ฒดํฌ)
62
+ is_good_head = any(d in head_dir for d in good_dirs) or (head_dir in good_dirs)
63
 
64
  return {
65
+ "gua": gua,
66
+ "group": group,
67
+ "good_dirs": ", ".join(good_dirs),
68
+ "match": is_good_head,
69
+ "advice": f"๊ท€ํ•˜๋Š” {group}์ž…๋‹ˆ๋‹ค. {head_dir} ๋ฐฉํ–ฅ์€ ๊ท€ํ•˜์—๊ฒŒ {'์ข‹์€' if is_good_head else '๋‚˜์œ'} ๊ธฐ์šด์„ ์ค๋‹ˆ๋‹ค."
70
  }