Барлыбай Мади, 311/312 группа BoxDrawing 9186
david_Yakhin_312 BoxDrawing 9289
t1import syst1import sys
2text = sys.stdin.readline().rstrip('\n')2text = sys.stdin.readline().rstrip('\n')
3words = text.split()3words = text.split()
4w_line = sys.stdin.readline().split()4w_line = sys.stdin.readline().split()
5W = int(w_line[0])5W = int(w_line[0])
6v_w = w_line[1]6v_w = w_line[1]
7h_w = w_line[2]7h_w = w_line[2]
8inside = W - 28inside = W - 2
99
10def key(v, h):10def key(v, h):
11    return ('L' if v == 'LIGHT' else 'H') + ('L' if h == 'LIGHT' else 'H11    return ('L' if v == 'LIGHT' else 'H') + ('L' if h == 'LIGHT' else 'H
>')>')
12corners = {'LL': {'tl': '┌', 'tr': '┐', 'bl': '└', 'br': '┘'}, 'LH': {'t12corners = {'LL': {'tl': '┌', 'tr': '┐', 'bl': '└', 'br': '┘'}, 'LH': {'t
>l': '┍', 'tr': '┑', 'bl': '┕', 'br': '┙'}, 'HL': {'tl': '┎', 'tr': '┒', >l': '┍', 'tr': '┑', 'bl': '┕', 'br': '┙'}, 'HL': {'tl': '┎', 'tr': '┒', 
>'bl': '┖', 'br': '┚'}, 'HH': {'tl': '┏', 'tr': '┓', 'bl': '┗', 'br': '┛'>'bl': '┖', 'br': '┚'}, 'HH': {'tl': '┏', 'tr': '┓', 'bl': '┗', 'br': '┛'
>}}>}}
13tees_right = {'LL': '├', 'LH': '┝', 'HL': '┠', 'HH': '┣'}13tees_right = {'LL': '├', 'LH': '┝', 'HL': '┠', 'HH': '┣'}
14tees_left = {'LL': '┤', 'LH': '┥', 'HL': '┨', 'HH': '┫'}14tees_left = {'LL': '┤', 'LH': '┥', 'HL': '┨', 'HH': '┫'}
15tees_down = {'LL': '┬', 'LH': '┯', 'HL': '┰', 'HH': '┳'}15tees_down = {'LL': '┬', 'LH': '┯', 'HL': '┰', 'HH': '┳'}
16tees_up = {'LL': '┴', 'LH': '┷', 'HL': '┸', 'HH': '┻'}16tees_up = {'LL': '┴', 'LH': '┷', 'HL': '┸', 'HH': '┻'}
17crosses = {'LL': '┼', 'LH': '┿', 'HL': '╂', 'HH': '╋'}17crosses = {'LL': '┼', 'LH': '┿', 'HL': '╂', 'HH': '╋'}
18hors = {'LIGHT': '─', 'HEAVY': '━'}18hors = {'LIGHT': '─', 'HEAVY': '━'}
19vers = {'LIGHT': '│', 'HEAVY': '┃'}19vers = {'LIGHT': '│', 'HEAVY': '┃'}
2020
21def box_char(up, down, left, right):21def box_char(up, down, left, right):
22    k = key(v_w, h_w)22    k = key(v_w, h_w)
23    if up and down and left and right:23    if up and down and left and right:
24        return crosses[k]24        return crosses[k]
25    if up and down and right and (not left):25    if up and down and right and (not left):
26        return tees_right[k]26        return tees_right[k]
27    if up and down and left and (not right):27    if up and down and left and (not right):
28        return tees_left[k]28        return tees_left[k]
29    if left and right and down and (not up):29    if left and right and down and (not up):
30        return tees_down[k]30        return tees_down[k]
31    if left and right and up and (not down):31    if left and right and up and (not down):
32        return tees_up[k]32        return tees_up[k]
33    if down and right and (not up) and (not left):33    if down and right and (not up) and (not left):
34        return corners[k]['tl']34        return corners[k]['tl']
35    if down and left and (not up) and (not right):35    if down and left and (not up) and (not right):
36        return corners[k]['tr']36        return corners[k]['tr']
37    if up and right and (not down) and (not left):37    if up and right and (not down) and (not left):
38        return corners[k]['bl']38        return corners[k]['bl']
39    if up and left and (not down) and (not right):39    if up and left and (not down) and (not right):
40        return corners[k]['br']40        return corners[k]['br']
41    if left and right and (not up) and (not down):41    if left and right and (not up) and (not down):
42        return hors[h_w]42        return hors[h_w]
43    if up and down and (not left) and (not right):43    if up and down and (not left) and (not right):
44        return vers[v_w]44        return vers[v_w]
45    return ' '45    return ' '
46rows = []46rows = []
47cur = []47cur = []
48cur_len = 048cur_len = 0
49for w in words:49for w in words:
50    l = len(w)50    l = len(w)
51    if not cur:51    if not cur:
52        cur = [w]52        cur = [w]
53        cur_len = l53        cur_len = l
54    elif cur_len + 1 + l <= inside:54    elif cur_len + 1 + l <= inside:
55        cur.append(w)55        cur.append(w)
56        cur_len += 1 + l56        cur_len += 1 + l
57    else:57    else:
58        rows.append(cur)58        rows.append(cur)
59        cur = [w]59        cur = [w]
60        cur_len = l60        cur_len = l
61if cur:61if cur:
62    rows.append(cur)62    rows.append(cur)
63row_data = []63row_data = []
64for row in rows:64for row in rows:
65    widths = [len(w) for w in row]65    widths = [len(w) for w in row]
66    k = len(row)66    k = len(row)
67    pad = inside - (sum(widths) + (k - 1))67    pad = inside - (sum(widths) + (k - 1))
68    widths[-1] += pad68    widths[-1] += pad
69    boundaries = [0]69    boundaries = [0]
70    x = 170    x = 1
71    for i in range(k - 1):71    for i in range(k - 1):
72        x += widths[i]72        x += widths[i]
73        boundaries.append(x)73        boundaries.append(x)
74        x += 174        x += 1
75    x += widths[-1]75    x += widths[-1]
76    boundaries.append(x)76    boundaries.append(x)
77    parts = []77    parts = []
78    for i, w in enumerate(row):78    for i, w in enumerate(row):
79        parts.append(w.ljust(widths[i]))79        parts.append(w.ljust(widths[i]))
80        if i < k - 1:80        if i < k - 1:
81            parts.append(vers[v_w])81            parts.append(vers[v_w])
82    inner = ''.join(parts)82    inner = ''.join(parts)
83    text_line = vers[v_w] + inner + vers[v_w]83    text_line = vers[v_w] + inner + vers[v_w]
84    row_data.append((boundaries, text_line))84    row_data.append((boundaries, text_line))
8585
86def make_hline(up_cols, down_cols):86def make_hline(up_cols, down_cols):
87    up_cols = set(up_cols)87    up_cols = set(up_cols)
88    down_cols = set(down_cols)88    down_cols = set(down_cols)
89    s = []89    s = []
90    for x in range(W):90    for x in range(W):
91        up = x in up_cols91        up = x in up_cols
92        down = x in down_cols92        down = x in down_cols
93        left = x > 093        left = x > 0
94        right = x < W - 194        right = x < W - 1
95        s.append(box_char(up, down, left, right))95        s.append(box_char(up, down, left, right))
96    return ''.join(s)96    return ''.join(s)
97out = []97out = []
98out.append(make_hline([], row_data[0][0]))98out.append(make_hline([], row_data[0][0]))
99out.append(row_data[0][1])99out.append(row_data[0][1])
100for i in range(1, len(row_data)):100for i in range(1, len(row_data)):
101    out.append(make_hline(row_data[i - 1][0], row_data[i][0]))101    out.append(make_hline(row_data[i - 1][0], row_data[i][0]))
102    out.append(row_data[i][1])102    out.append(row_data[i][1])
103out.append(make_hline(row_data[-1][0], []))103out.append(make_hline(row_data[-1][0], []))
104sys.stdout.write('\n'.join(out))104sys.stdout.write('\n'.join(out))
Legends
Colors
 Added 
Changed
Deleted
Links
(f)irst change
(n)ext change
(t)op