Прикреплённый файл «spiral.py»

Загрузка

   1 #!/usr/bin/env python3
   2 '''
   3 '''
   4 
   5 from collections import Counter
   6 
   7 class Spiral:
   8 
   9     def __init__(self, string = ""):
  10         self.cells = Counter(string)
  11 
  12     def __iter__(self):
  13         return self.cells.elements()
  14     
  15     def __add__(self, other):
  16         return type(self)(self.cells + other.cells)
  17 
  18     def __sub__(self, other):
  19         return type(self)(self.cells - other.cells)
  20 
  21     def __mul__(self, num):
  22         return type(self)(list(self)*num)
  23 
  24     __rmul__ = __mul__
  25 
  26     def __len__(self):
  27         return sum(self.cells.values())
  28 
  29     def _square(self):
  30         dx, dy = (0, 1, 0, -1), (1, 0, -1, 0)
  31         F = {}
  32         x = y = n = k = j = mx = Mx = my = My = 0
  33         for i, c in enumerate(self):
  34             F[x,y] = c
  35             mx, my, Mx, My = min(mx, x), min(my, y), max(Mx, x), max(My, y)
  36             if i>= n:
  37                 k += 1
  38                 n += k
  39                 j = (j+1)%4
  40             x, y = x+dx[j], y+dy[j]
  41         return F, (mx, Mx), (my, My)
  42 
  43     def __str__(self):
  44         F, (mx, Mx), (my, My) = self._square()
  45         return "\n".join("".join(F.get((x,y), " ") for x in range(mx, Mx+1)) for y in range(my, My+1))

Прикреплённые файлы

Для ссылки на прикреплённый файл в тексте страницы напишите attachment:имяфайла, как показано ниже в списке файлов. Не используйте URL из ссылки «[получить]», так как он чисто внутренний и может измениться.
 Все файлы | Выбранные файлы: удалить переместить на страницу скопировать на страницу

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