Прикреплённый файл «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 из ссылки «[получить]», так как он чисто внутренний и может измениться.
 Все файлы | Выбранные файлы: удалить переместить на страницу скопировать на страницу

Вам нельзя прикреплять файлы к этой странице.