Прикреплённый файл «spiral.py»
Загрузка 1 #!/usr/bin/env python3
2 import collections
3
4
5 class Spiral:
6
7 def __init__(self, string=""):
8 # Just use collections
9 self.cells = collections.Counter(string)
10
11 def __iter__(self):
12 # Iterator
13 return self.cells.elements()
14
15 def __add__(self, other):
16 # Sum
17 return type(self)(self.cells + other.cells)
18
19 def __sub__(self, other):
20 # Diff
21 return type(self)(self.cells - other.cells)
22
23 def __mul__(self, num):
24 # Multiplication
25 return type(self)(list(self) * num)
26
27 __rmul__ = __mul__
28
29 def __len__(self):
30 # Legnth
31 return sum(self.cells.values())
32
33 def _square(self):
34 # Output
35 dx, dy = (0, 1, 0, -1), (1, 0, -1, 0)
36 F = {}
37 x = y = n = k = j = mx = Mx = my = My = 0
38 for i, c in enumerate(self):
39 F[x, y] = c
40 mx, my, Mx, My = min(mx, x), min(my, y), max(Mx, x), max(My, y)
41 if i >= n:
42 k += 1
43 n += k
44 j = (j + 1) % 4
45 x, y = x + dx[j], y + dy[j]
46 return F, (mx, Mx), (my, My)
47
48 def __str__(self):
49 # Stringify
50 F, (mx, Mx), (my, My) = self._square()
51 return "\n".join("".join(F.get((x, y), " ")
52 for x in range(mx, Mx + 1)) for y in range(my, My + 1))
53
54
55 def main():
56 # This is main function
57 A, B = Spiral("QWERTY" * 2), Spiral("asdf" * 3)
58 print(A + B)
59
60
61 if __name__ == "__main__":
62 main()
Прикреплённые файлы
Для ссылки на прикреплённый файл в тексте страницы напишите attachment:имяфайла, как показано ниже в списке файлов. Не используйте URL из ссылки «[получить]», так как он чисто внутренний и может измениться.Вам нельзя прикреплять файлы к этой странице.
