pd-code-connected-sum 0.0.1__tar.gz → 0.0.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pd_code_connected_sum-0.0.1 → pd_code_connected_sum-0.0.3}/PKG-INFO +7 -3
- {pd_code_connected_sum-0.0.1 → pd_code_connected_sum-0.0.3}/README.md +5 -2
- {pd_code_connected_sum-0.0.1 → pd_code_connected_sum-0.0.3}/pd_code_connected_sum/main.py +15 -76
- {pd_code_connected_sum-0.0.1 → pd_code_connected_sum-0.0.3}/pyproject.toml +3 -2
- {pd_code_connected_sum-0.0.1 → pd_code_connected_sum-0.0.3}/LICENSE +0 -0
- {pd_code_connected_sum-0.0.1 → pd_code_connected_sum-0.0.3}/pd_code_connected_sum/__init__.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pd-code-connected-sum
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.3
|
|
4
4
|
Summary: make connected sum for link pd_code
|
|
5
5
|
License: MIT
|
|
6
6
|
License-File: LICENSE
|
|
@@ -14,6 +14,7 @@ Classifier: Programming Language :: Python :: 3.11
|
|
|
14
14
|
Classifier: Programming Language :: Python :: 3.12
|
|
15
15
|
Classifier: Programming Language :: Python :: 3.13
|
|
16
16
|
Classifier: Programming Language :: Python :: 3.14
|
|
17
|
+
Requires-Dist: pd-code-pre-nxt
|
|
17
18
|
Requires-Dist: pd-code-sanity
|
|
18
19
|
Description-Content-Type: text/markdown
|
|
19
20
|
|
|
@@ -40,7 +41,10 @@ link_pd_code_2 = [[6, 1, 7, 2], [8, 3, 5, 4], [2, 5, 3, 6], [4, 7, 1, 8]]
|
|
|
40
41
|
connect_pos_1 = 1
|
|
41
42
|
connect_pos_2 = 1
|
|
42
43
|
|
|
43
|
-
|
|
44
|
-
link_pd_code_1, link_pd_code_2, connect_pos_1, connect_pos_2)
|
|
44
|
+
new_pd_code, num_map = pd_code_connected_sum.connected_sum(
|
|
45
|
+
link_pd_code_1, link_pd_code_2, connect_pos_1, connect_pos_2)
|
|
46
|
+
|
|
47
|
+
print(new_pd_code)
|
|
48
|
+
print(num_map)
|
|
45
49
|
```
|
|
46
50
|
|
|
@@ -21,6 +21,9 @@ link_pd_code_2 = [[6, 1, 7, 2], [8, 3, 5, 4], [2, 5, 3, 6], [4, 7, 1, 8]]
|
|
|
21
21
|
connect_pos_1 = 1
|
|
22
22
|
connect_pos_2 = 1
|
|
23
23
|
|
|
24
|
-
|
|
25
|
-
link_pd_code_1, link_pd_code_2, connect_pos_1, connect_pos_2)
|
|
24
|
+
new_pd_code, num_map = pd_code_connected_sum.connected_sum(
|
|
25
|
+
link_pd_code_1, link_pd_code_2, connect_pos_1, connect_pos_2)
|
|
26
|
+
|
|
27
|
+
print(new_pd_code)
|
|
28
|
+
print(num_map)
|
|
26
29
|
```
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import pd_code_sanity
|
|
2
|
+
import pd_code_pre_nxt
|
|
2
3
|
import json
|
|
3
4
|
|
|
4
5
|
# 为编码增加前缀
|
|
@@ -9,66 +10,6 @@ def add_prefix(pd_code:list[list], prefix:str) -> list[list]:
|
|
|
9
10
|
pd_code[i][j] = prefix + str(pd_code[i][j])
|
|
10
11
|
return json.loads(json.dumps(pd_code))
|
|
11
12
|
|
|
12
|
-
# 提取原始数值
|
|
13
|
-
def get_raw_val(val_in_crs:int|str) -> int:
|
|
14
|
-
if isinstance(val_in_crs, str):
|
|
15
|
-
return int(val_in_crs.split("_")[-1])
|
|
16
|
-
return int(val_in_crs)
|
|
17
|
-
|
|
18
|
-
def add_edge(pre:dict, nxt:dict, val1, val2):
|
|
19
|
-
raw_val1 = get_raw_val(val1)
|
|
20
|
-
raw_val2 = get_raw_val(val2)
|
|
21
|
-
|
|
22
|
-
# 记录前后关系
|
|
23
|
-
pre_val = -1
|
|
24
|
-
nxt_val = -1
|
|
25
|
-
|
|
26
|
-
# 确定前后关系
|
|
27
|
-
if abs(raw_val1 - raw_val2) == 1:
|
|
28
|
-
if raw_val1 < raw_val2:
|
|
29
|
-
pre_val = val1
|
|
30
|
-
nxt_val = val2
|
|
31
|
-
else:
|
|
32
|
-
pre_val = val2
|
|
33
|
-
nxt_val = val1
|
|
34
|
-
else:
|
|
35
|
-
if raw_val1 < raw_val2:
|
|
36
|
-
pre_val = val2
|
|
37
|
-
nxt_val = val1
|
|
38
|
-
else:
|
|
39
|
-
pre_val = val1
|
|
40
|
-
nxt_val = val2
|
|
41
|
-
|
|
42
|
-
# 设置 dict 值
|
|
43
|
-
pre[nxt_val] = pre_val
|
|
44
|
-
nxt[pre_val] = nxt_val
|
|
45
|
-
|
|
46
|
-
# 计算 pre 和 nxt
|
|
47
|
-
# 没有 r1 crossing 就不会出现混乱
|
|
48
|
-
def get_pre_nxt(pd_code:list[list]) -> tuple[dict, dict]:
|
|
49
|
-
pre = dict()
|
|
50
|
-
nxt = dict()
|
|
51
|
-
for crossing in pd_code:
|
|
52
|
-
if len(set(crossing)) > 2: # 至少有三个不同的数
|
|
53
|
-
add_edge(pre, nxt, crossing[0], crossing[2])
|
|
54
|
-
add_edge(pre, nxt, crossing[1], crossing[3])
|
|
55
|
-
else:
|
|
56
|
-
two_values = list(set(crossing)) # 只有两个不同的数
|
|
57
|
-
if len(two_values) != 2:
|
|
58
|
-
raise AssertionError()
|
|
59
|
-
for i in range(2):
|
|
60
|
-
pre[two_values[i]] = two_values[1-i] # 互为前驱后继
|
|
61
|
-
nxt[two_values[i]] = two_values[1-i]
|
|
62
|
-
|
|
63
|
-
# 获取数值合集
|
|
64
|
-
num_set = get_num_set(pd_code)
|
|
65
|
-
for num in num_set:
|
|
66
|
-
if pre.get(num) is None:
|
|
67
|
-
pre[num] = nxt[num]
|
|
68
|
-
if nxt.get(num) is None:
|
|
69
|
-
nxt[num] = pre[num]
|
|
70
|
-
return pre, nxt
|
|
71
|
-
|
|
72
13
|
# 替换一个值恰好一次
|
|
73
14
|
def replace_val(crossing:list, val_now:str, val_new:str):
|
|
74
15
|
cnt = 0
|
|
@@ -92,13 +33,7 @@ def check_has2(crossing:list, val1:str, val2:str) -> bool:
|
|
|
92
33
|
check_has(crossing, val1) and
|
|
93
34
|
check_has(crossing, val2))
|
|
94
35
|
|
|
95
|
-
|
|
96
|
-
val_set = set()
|
|
97
|
-
for crossing in pd_code:
|
|
98
|
-
for term in crossing:
|
|
99
|
-
if term not in val_set:
|
|
100
|
-
val_set.add(term)
|
|
101
|
-
return sorted(list(val_set))
|
|
36
|
+
get_num_set = pd_code_pre_nxt.get_num_set
|
|
102
37
|
|
|
103
38
|
# 按照顺序对循环进行遍历
|
|
104
39
|
def dfs(val, nxt:dict[str, str], vis: set[int], idx:dict[str, int]):
|
|
@@ -149,7 +84,7 @@ def find_avaible_pos(pd_code:list[list], val_now):
|
|
|
149
84
|
# 删除 pd_code1 中 val_1 所在的 crossing
|
|
150
85
|
# 然后把两个扭结直接合并
|
|
151
86
|
# 然后重新编号
|
|
152
|
-
def del_component_and_merge(pd_code1, pd_code2, val_1, val_2) -> list[list]:
|
|
87
|
+
def del_component_and_merge(pd_code1, pd_code2, val_1, val_2) -> tuple[list[list], dict]:
|
|
153
88
|
suc = False
|
|
154
89
|
for i in range(len(pd_code1)):
|
|
155
90
|
if check_has(pd_code1[i], val_1):
|
|
@@ -169,8 +104,8 @@ def del_component_and_merge(pd_code1, pd_code2, val_1, val_2) -> list[list]:
|
|
|
169
104
|
pd_code2 = add_prefix(pd_code2, "b_")
|
|
170
105
|
|
|
171
106
|
# 计算前驱后继
|
|
172
|
-
_, nxt1 = get_pre_nxt(pd_code1)
|
|
173
|
-
_, nxt2 = get_pre_nxt(pd_code2)
|
|
107
|
+
_, nxt1 = pd_code_pre_nxt.get_pre_nxt(pd_code1)
|
|
108
|
+
_, nxt2 = pd_code_pre_nxt.get_pre_nxt(pd_code2)
|
|
174
109
|
nxt = nxt1 | nxt2
|
|
175
110
|
|
|
176
111
|
# 合并得到新的 pd_code
|
|
@@ -183,11 +118,11 @@ def del_component_and_merge(pd_code1, pd_code2, val_1, val_2) -> list[list]:
|
|
|
183
118
|
if num_map.get(crossing[i]) is None:
|
|
184
119
|
assert AssertionError()
|
|
185
120
|
crossing[i] = num_map[crossing[i]]
|
|
186
|
-
return sorted(new_pd_code)
|
|
121
|
+
return sorted(new_pd_code), num_map
|
|
187
122
|
|
|
188
123
|
# 将 pd_code1 里面的 val_1 和 pd_code2 里面的 val_2 连接起来
|
|
189
124
|
def connected_sum(
|
|
190
|
-
pd_code1:list[list], pd_code2:list[list], val_1, val_2) -> list[list]:
|
|
125
|
+
pd_code1:list[list], pd_code2:list[list], val_1, val_2) -> tuple[list[list], dict]:
|
|
191
126
|
|
|
192
127
|
# 如果有一个扭结平凡,则不需要连接
|
|
193
128
|
if pd_code1 == [] or pd_code2 == []:
|
|
@@ -261,8 +196,8 @@ def connected_sum(
|
|
|
261
196
|
|
|
262
197
|
# 由于不存在 nugatory crossing 和 r1 crossing
|
|
263
198
|
# 所以两侧各有两个相关 crossing
|
|
264
|
-
_, nxt1 = get_pre_nxt(pd_code1)
|
|
265
|
-
_, nxt2 = get_pre_nxt(pd_code2)
|
|
199
|
+
_, nxt1 = pd_code_pre_nxt.get_pre_nxt(pd_code1)
|
|
200
|
+
_, nxt2 = pd_code_pre_nxt.get_pre_nxt(pd_code2)
|
|
266
201
|
nxt = nxt1 | nxt2
|
|
267
202
|
|
|
268
203
|
# 带有字母前缀的成分
|
|
@@ -300,7 +235,11 @@ def connected_sum(
|
|
|
300
235
|
ans_pd_code = sorted(new_pd_code)
|
|
301
236
|
if not pd_code_sanity.sanity(ans_pd_code):
|
|
302
237
|
raise AssertionError()
|
|
303
|
-
|
|
238
|
+
|
|
239
|
+
return ans_pd_code, num_map
|
|
304
240
|
|
|
305
241
|
if __name__ == "__main__":
|
|
306
|
-
|
|
242
|
+
pd_code, num_map = connected_sum(
|
|
243
|
+
[[1, 5, 2, 4], [3, 1, 4, 6], [5, 3, 6, 2]],
|
|
244
|
+
[[1, 5, 2, 4], [3, 1, 4, 6], [5, 3, 6, 2]], 1, 1)
|
|
245
|
+
print(num_map)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "pd-code-connected-sum"
|
|
3
|
-
version = "0.0.
|
|
3
|
+
version = "0.0.3"
|
|
4
4
|
description = "make connected sum for link pd_code"
|
|
5
5
|
authors = [
|
|
6
6
|
{name = "GGN_2015",email = "neko@jlulug.org"}
|
|
@@ -9,7 +9,8 @@ license = {text = "MIT"}
|
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.10"
|
|
11
11
|
dependencies = [
|
|
12
|
-
"pd-code-sanity"
|
|
12
|
+
"pd-code-sanity",
|
|
13
|
+
"pd-code-pre-nxt"
|
|
13
14
|
]
|
|
14
15
|
|
|
15
16
|
|
|
File without changes
|
{pd_code_connected_sum-0.0.1 → pd_code_connected_sum-0.0.3}/pd_code_connected_sum/__init__.py
RENAMED
|
File without changes
|