Skip to content

Instantly share code, notes, and snippets.

@ikeikeikeike
Created August 27, 2023 15:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ikeikeikeike/c30739161c8338866b3366136701d323 to your computer and use it in GitHub Desktop.
Save ikeikeikeike/c30739161c8338866b3366136701d323 to your computer and use it in GitHub Desktop.
Great Namer.
stroke_data = {}
with open("./ucs-strokes.txt", "r", encoding="utf-8") as file:
lines = file.readlines()
for line in lines:
if not line.startswith("#"):
parts = line.strip().split("\t")
if len(parts) == 3:
_, char, count = parts
try:
stroke_data[char] = int(count)
except ValueError as err:
pass
# print(err)
include_name_set = {
# "一",
# "一",
# "一",
# "一",
"人",
"仁",
"仁",
"仁",
"仁",
"仁",
"仁",
"仁",
"仁",
"仁",
"令",
"佑",
"佑",
"佑",
"佑",
"佑",
"佑",
"佑",
"佑",
"健",
"健",
"健",
"優",
"優",
"優",
"優",
"優",
"優",
"優",
"優",
"優",
"光",
"光",
"光",
"光",
"光",
"光",
"光",
"光",
"光",
"凛",
"凛",
"凪",
"凪",
"凪",
"凪",
"叶",
"叶",
"叶",
"叶",
"叶",
"叶",
"叶",
"和",
"和",
"和",
"和",
"和",
"和",
"和",
"和",
"和",
"咲",
"夏",
"夏",
"大",
"大",
"大",
"大",
"大",
"大",
"大",
"大",
"大",
"天",
"太",
"太",
"太",
"太",
"太",
"太",
"太",
"太",
"奏",
"奏",
"奏",
"奏",
"奏",
"奏",
"奏",
"奏",
"奏",
"希",
"希",
"希",
"希",
"希",
"希",
"希",
"希",
"希",
"幸",
"幸",
"幸",
"幸",
"幸",
"幸",
"幸",
"幸",
"律",
"律",
"律",
"律",
"律",
"心",
"心",
"心",
"心",
"心",
"心",
"心",
"心",
"心",
"志",
"志",
"志",
"志",
"志",
"志",
"志",
"志",
"志",
"悠",
"悠",
"悠",
"悠",
"悠",
"悠",
"悠",
"悠",
"悠",
"想",
"愛",
"慶",
"慶",
"慶",
"慶",
"成",
"成",
"斗",
"斗",
"斗",
"斗",
"斗",
"斗",
"斗",
"斗",
"斗",
"星",
"星",
"星",
"星",
"星",
"星",
"星",
"星",
"春",
"春",
"春",
"春",
"春",
"春",
"晃",
"晴",
"晴",
"晴",
"晴",
"晴",
"晴",
"晴",
"晴",
"晴",
"智",
"智",
"智",
"智",
"智",
"智",
"暖",
"暖",
"暖",
"暖",
"月",
"月",
"月",
"月",
"月",
"月",
"月",
"月",
"月",
"朔",
"朔",
"朔",
"朔",
"朔",
"朔",
"朔",
"柊",
"柊",
"柊",
"柊",
"柊",
"柊",
"柊",
"柊",
"柊",
"桜",
"桜",
"桜",
"桜",
"桜",
"桜",
"桜",
"桜",
"楓",
"楓",
"楓",
"楓",
"楓",
"楓",
"楓",
"楓",
"楓",
"樹",
"樹",
"樹",
"樹",
"樹",
"樹",
"樹",
"樹",
"樹",
"歩",
"歩",
"泰",
"泰",
"泰",
"海",
"海",
"海",
"海",
"海",
"海",
"海",
"海",
"海",
"涼",
"湊",
"湊",
"湊",
"湊",
"湊",
"湊",
"湊",
"湊",
"湊",
"煌",
"煌",
"煌",
"煌",
"煌",
"煌",
"煌",
"煌",
"煌",
"燈",
"理",
"理",
"理",
"琉",
"琉",
"琉",
"琉",
"琉",
"琉",
"琉",
"琉",
"琉",
"琥",
"瑛",
"瑛",
"瑛",
"瑛",
"瑛",
"瑛",
"瑛",
"瑛",
"瑛",
"生",
"生",
"真",
"真",
"真",
"真",
"真",
"真",
"真",
"真",
"真",
"碧",
"碧",
"碧",
"碧",
"碧",
"碧",
"碧",
"碧",
"碧",
"祐",
"空",
"空",
"空",
"空",
"空",
"空",
"空",
"空",
"空",
"結",
"結",
"結",
"結",
"結",
"結",
"結",
"結",
"結",
"翔",
"翔",
"翔",
"翔",
"翔",
"翔",
"翔",
"翔",
"翔",
"翠",
"翠",
"航",
"航",
"航",
"航",
"葉",
"葉",
"葉",
"葉",
"葵",
"葵",
"葵",
"葵",
"葵",
"葵",
"葵",
"葵",
"葵",
"蒼",
"蒼",
"蒼",
"蒼",
"蒼",
"蒼",
"蒼",
"蒼",
"蒼",
"蓮",
"蓮",
"蓮",
"蓮",
"蓮",
"蓮",
"蓮",
"蓮",
"蓮",
"虎",
"虎",
"虎",
"虎",
"誠",
"誠",
"誠",
"誠",
"誠",
"誠",
"誠",
"誠",
"誠",
"輝",
"輝",
"輝",
"輝",
"輝",
"輝",
"輝",
"輝",
"輝",
"遥",
"陽",
"陽",
"陽",
"陽",
"陽",
"陽",
"陽",
"陽",
"隼",
"雅",
"雅",
"雅",
"雅",
"音",
"音",
"音",
"音",
"音",
"音",
"音",
"音",
"颯",
"颯",
"颯",
"颯",
"颯",
"颯",
"颯",
"颯",
"颯",
"龍",
"龍",
"龍",
}
# Filter characters based on strokes to improve efficiency
potential_first_chars = {
char: strokes
for char, strokes in stroke_data.items()
if char in include_name_set and char.isprintable() and 1 <= strokes <= 20 and ord('一') <= ord(char) <= ord('龥')
}
potential_second_chars = {
char: strokes
for char, strokes in stroke_data.items()
if char in include_name_set and char.isprintable() and 1 <= strokes <= 20 and ord('一') <= ord(char) <= ord('龥')
}
great_scores = {
15, 32, 48, # 三大吉数
15, 16, 31, 32, 45, 48, # 六大吉数
15, 16, 31, 32, 33, 45, 48, # 七大吉数
1, # "大吉",
# 2, # "凶",
3, # "大吉",
# 4, # "凶",
5, # "大吉",
6, # "大吉",
# 7, # "吉",
# 8, # "吉",
# 9, # "凶",
# 10, # "凶",
11, # "大吉",
# 12, # "凶",
13, # "大吉",
# 14, # "凶",
15, # "大吉",
16, # "大吉",
# 17, # "吉",
# 18, # "吉",
# 19, # "凶",
# 20, # "凶",
21, # "大吉",
# 22, # "凶",
23, # "大吉",
24, # "大吉",
25, # "大吉",
# 26, # "凶",
# 27, # "吉凶混合",
# 28, # "凶",
29, # "大吉",
# 30, # "吉凶混合",
31, # "大吉",
32, # "大吉",
33, # "大吉",
# 34, # "凶",
# 35, # "吉",
# 36, # "吉凶混合",
37, # "大吉",
# 38, # "吉",
39, # "大吉",
# 40, # "吉凶混合",
41, # "大吉",
# 42, # "吉凶混合",
# 43, # "凶",
# 44, # "凶",
45, # "大吉",
# 46, # "凶",
47, # "大吉",
48, # "大吉",
# 49, # "凶",
# 50, # "凶",
# 51, # "吉凶混合",
52, # "大吉",
# 53, # "吉凶混合",
# 54, # "凶",
# 55, # "吉凶混合",
# 56, # "凶",
# 57, # "吉",
# 58, # "吉",
# 59, # "凶",
# 60, # "凶",
# 61, # "吉",
# 62, # "凶",
63, # "大吉",
# 64, # "凶",
65, # "大吉",
# 66, # "凶",
67, # "大吉",
68, # "大吉",
# 69, # "凶",
# 70, # "凶",
# 71, # "吉凶混合",
# 72, # "吉凶混合",
# 73, # "吉凶混合",
# 74, # "凶",
# 75, # "吉凶混合",
# 76, # "凶",
# 77, # "吉凶混合",
# 78, # "吉凶混合",
# 79, # "凶",
# 80, # "凶",
81, # "大吉"
}
# Family name: 池田 (Ikeda)
last_one = stroke_data['池'] # 6
last_two = stroke_data['田'] # 5
family_name_strokes = last_one + last_two # 11
# To store the generated names and their scores
generated_names = []
# Generate names
for first_char, first_strokes in potential_first_chars.items():
for second_char, second_strokes in potential_second_chars.items():
# Calculate the various scores (kaku)
ten_kaku = family_name_strokes # 天格(祖運)
jin_kaku = last_two + first_strokes # 人格(主運)
chi_kaku = first_strokes + second_strokes # 地格(初運)
gai_kaku = last_one + second_strokes # 外格(助運)
sou_kaku = family_name_strokes + first_strokes + second_strokes # 総格(総運)
# Check if the scores are "great" based on traditional Japanese name evaluation
if (jin_kaku in great_scores) and \
(chi_kaku in great_scores) and \
(gai_kaku in great_scores) and \
(sou_kaku in great_scores) and \
(ten_kaku in great_scores):
generated_names.append({
'姓名': f"池田{first_char}{second_char}",
'天格(祖運)': ten_kaku,
'人格(主運)': jin_kaku,
'地格(初運)': chi_kaku,
'外格(助運)': gai_kaku,
'総格(総運)': sou_kaku
})
# Generate one-character names
for first_char, first_strokes in potential_first_chars.items():
ten_kaku = family_name_strokes # 天格(祖運)
jin_kaku = last_two + first_strokes # 人格(主運)
chi_kaku = first_strokes # 地格(初運)
gai_kaku = last_one + first_strokes # 外格(助運), as there's no second character
sou_kaku = family_name_strokes + first_strokes # 総格(総運)
if (jin_kaku in great_scores) and \
(chi_kaku in great_scores) and \
(gai_kaku in great_scores) and \
(sou_kaku in great_scores) and \
(ten_kaku in great_scores):
generated_names.append({
'姓名': f"池田{first_char}",
'天格(祖運)': ten_kaku,
'人格(主運)': jin_kaku,
'地格(初運)': chi_kaku,
'外格(助運)': gai_kaku,
'総格(総運)': sou_kaku
})
# Limit the number of generated names for display
for i in generated_names:
print(i)
print(len(generated_names))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment