misc-codes/linebreaking/pageniation.py

619 lines
10 KiB
Python
Raw Normal View History

2024-12-16 23:33:03 +08:00
#!/usr/bin/env python
# coding: utf-8
# In[26]:
pageHeight = 28.0
# In[4]:
textHeight = 0.8
textSpaceheight = 0.6
figHeight = 25.2
alpha = 1
beta = 0
# In[2]:
lineList = [('WL', True),
('WL', True),
('Fig', False),
('WL', True),
('WL', False),
('WL', True),
('WL', False),
('WL', False),
('WL', True),
('WL', False),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', False),
('WL', True),
('WL', False),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', False),
('WL', True),
('WL', True),
('WL', False),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('Fig', False),
('WL', True),
('WL', False),
('WL', True),
('Fig', False),
('WL', True),
('Fig', False),
('WL', True),
('WL', False),
('WL', True),
('WL', False),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', False),
('WL', True),
('WL', False),
('WL', True),
('Fig', True),
('WL', False),
('WL', True),
('WL', True),
('WL', False),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', False),
('WL', True),
('WL', False),
('WL', False),
('WL', True),
('WL', False),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('Fig', True),
('WL', True),
('WL', True),
('Fig', True),
('WL', True),
('WL', True),
('WL', False),
('WL', True),
('WL', True),
('WL', False),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('Fig', True),
('WL', False),
('WL', True),
('WL', False),
('WL', True),
('WL', True),
('WL', False),
('WL', True),
('WL', True),
('WL', False),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('Fig', False),
('WL', True),
('WL', False),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('Fig', False),
('WL', True),
('WL', False),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', False),
('WL', True),
('WL', False),
('WL', True),
('WL', True),
('WL', False),
('WL', True),
('WL', True),
('WL', False),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', False),
('WL', True),
('Fig', False),
('WL', True),
('WL', True),
('WL', False),
('WL', True),
('WL', False),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', False),
('WL', True),
('WL', True),
('WL', False),
('WL', True),
('WL', True),
('WL', False),
('WL', True),
('WL', True),
('WL', False),
('WL', False),
('WL', True),
('WL', False),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', False),
('WL', True),
('Fig', False),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', False),
('WL', True),
('WL', False),
('WL', True),
('WL', True),
('WL', False),
('Fig', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', False),
('WL', True),
('WL', False),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('Fig', True),
('WL', True),
('Fig', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', False),
('WL', True),
('WL', False),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('Fig', False),
('WL', True),
('WL', False),
('WL', True),
('WL', False),
('WL', True),
('WL', False),
('WL', True),
('WL', True),
('WL', False),
('WL', True),
('WL', False),
('WL', True),
('WL', False),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', False),
('WL', True),
('WL', False),
('WL', True),
('Fig', True),
('Fig', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', False),
('WL', True),
('WL', False),
('WL', True),
('WL', False),
('WL', True),
('WL', True),
('WL', False),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', False),
('WL', True),
('WL', False),
('WL', True),
('WL', True),
('Fig', True),
('WL', False),
('WL', True),
('WL', False),
('WL', True),
('WL', False),
('Fig', True),
('WL', True),
('WL', True),
('WL', False),
('WL', True),
('WL', False),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('Fig', False),
('WL', True),
('WL', False),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('Fig', True),
('Fig', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('Fig', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', False),
('WL', True),
('WL', False),
('WL', True),
('WL', True),
('Fig', True),
('WL', True),
('WL', True),
('WL', True),
('Fig', True),
('WL', True),
('WL', True),
('WL', True),
('WL', False),
('WL', True),
('WL', False),
('WL', True),
('WL', False),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', False),
('WL', True),
('WL', False),
('WL', True),
('WL', False),
('WL', True),
('WL', False),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', False),
('WL', True),
('WL', False),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('Fig', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('Fig', True),
('WL', True),
('WL', True),
('WL', True),
('WL', False),
('WL', True),
('WL', False),
('WL', False),
('WL', True),
('WL', False),
('WL', True),
('WL', False),
('WL', True),
('WL', False),
('WL', False),
('WL', True),
('WL', False),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('WL', False),
('WL', True),
('Fig', False),
('WL', True),
('WL', True),
('WL', False),
('WL', True),
('WL', True),
('WL', False),
('WL', True),
('WL', True),
('WL', True),
('WL', True),
('Fig', True),
('Fig', True),
('WL', True),
('WL', True),
('WL', True)]
# In[8]:
lineAssignInfo = dict()
figToRefer = {0 : 0}
# In[7]:
n = len(lineList)
figAndRefer = dict()
# In[53]:
def cost(n):
global pageHeight
global lineAssignInfo
global textHeight
global textSpaceheight
global alpha
global beta
if n == 0:
lineAssignInfo[n] = 0
return 1
min_cost = float("inf")
min_p = -1
cost(n-1)
for p in range(n):
if previousSameItem(n) != -1 and p < lineAssignInfo[previousSameItem(n)]:
pass #cost = float("inf")
else:
# 對於所有的東西
input_texts_in_p = [k for k, v in lineAssignInfo.items() if v == p]
words_len_in_p = len(list(filter(
lambda i : lineList[i][0] == "WL" or lineList[i][0] == "EndOfPara", input_texts_in_p)))
figs_len_in_p = len(list(filter( lambda i : lineList[i][0] == "Fig", input_texts_in_p)))
input_texts_height_in_p = words_len_in_p * (textHeight + textSpaceheight) \
+ figs_len_in_p * (figHeight + textSpaceheight) - textSpaceheight
if (lineList[n][0] in ["WL", "EndOdPara"]) and input_texts_height_in_p + textSpaceheight + textHeight > pageHeight:
pass #cost = float("inf")
elif lineList[n][0] == "Fig" and input_texts_height_in_p + textSpaceheight + figHeight > pageHeight:
pass
else:
temp_max_page_no = p#max(p, max(lineAssignInfo.keys()))
if lineList[n][0] == "Fig":
print(f"fig n = {n}") #TMP
temp_total_diff = p - figRefererId(n) + sum([k - v for k, v in figToRefer.items()])
else:
temp_total_diff = sum([k - v for k, v in figToRefer.items()])
tmp_cost_fun_of_p = temp_max_page_no * beta + temp_total_diff * alpha
print(f"n=={n}, p={p}, tmpCost = {temp_max_page_no}, {temp_total_diff}, lineAssignInfo = {lineAssignInfo}")
if min_cost > tmp_cost_fun_of_p:
min_cost = tmp_cost_fun_of_p
min_p = p
lineAssignInfo[n] = min_p
if lineList[n][0] == "Fig":
figToRefer[min_p] = lineAssignInfo[figRefererId(n)]
return min
def figRefererId(fig_id):
global figAndRefer
print(fig_id) #TMP
referer_id = -1
for i in list(reversed(range(fig_id))):
if lineList[i][0] in ["WL", "EndOfPara"]:
referer_id = i
break
figAndRefer[fig_id] = referer_id
return referer_id
def previousSameItem(n):
global lineList
previous_id = -1
for i in list(reversed(range(n))):
if lineList[i][0] == lineList[n][0]:
previous_id = i
break
return previous_id
# In[54]:
cost(100)
print(lineAssignInfo)
print(figToRefer)
print(figAndRefer)