简单压缩,生成的文件中相邻的前缀相同前缀字符用波浪线替代,最终文件缩减又110k,目前116k。未经完全测试。

This commit is contained in:
zhiyi
2024-12-05 17:44:00 +08:00
parent 7b9fb28619
commit d554c444cc
3 changed files with 36 additions and 1 deletions

View File

@@ -33,6 +33,13 @@ def convert_cidr(cidr):
network_address = network
return hex(int(network_address))[2:]
def longest_common_prefix(str1, str2):
min_length = min(len(str1), len(str2))
for i in range(min_length):
if str1[i] != str2[i]:
return str1[:i]
return str1[:min_length]
def generate_cnip_cidrs():
""" 从文件中读取CIDR地址 """
args = parse_args()
@@ -42,6 +49,22 @@ def generate_cnip_cidrs():
for cidr in cidrs:
converted_cidrs.append(convert_cidr(cidr))
converted_cidrs.sort(key=lambda x: (len(x), x), reverse=False)
converted_cidrs_clone = converted_cidrs[:]
lastFullCidr = ''
for i in range(len(converted_cidrs)):
prevCidr = converted_cidrs_clone[i-1] if i > 0 else ''
currentCidr = converted_cidrs[i]
if len(prevCidr) != len(currentCidr):
lastFullCidr = currentCidr
continue
prefix = longest_common_prefix(lastFullCidr, currentCidr)
if len(prefix) < len(lastFullCidr)//1.2:
lastFullCidr = currentCidr
continue
converted_cidrs[i] = '~' + currentCidr[len(prefix):]
cidr_list = ','.join(converted_cidrs)
return f"'{cidr_list}'.split(',')"